From b1b0ba14db4750db05c0ba6f3b28baabf430d475 Mon Sep 17 00:00:00 2001 From: Tad Fisher Date: Thu, 23 Jan 2020 15:36:10 -0800 Subject: [PATCH] Update README and add copyright license --- COPYING | 20 ++ README.org | 150 +++++++++- assets/gradle2nix.png | Bin 0 -> 46701 bytes assets/gradle2nix.svg | 680 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 847 insertions(+), 3 deletions(-) create mode 100644 COPYING create mode 100644 assets/gradle2nix.png create mode 100644 assets/gradle2nix.svg diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..22a0345 --- /dev/null +++ b/COPYING @@ -0,0 +1,20 @@ +Copyright © Tad Fisher and the gradle2nix contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.org b/README.org index b45af3d..1a7b75e 100644 --- a/README.org +++ b/README.org @@ -1,12 +1,156 @@ -* gradle2nix +#+STARTUP: inlineimages -Application and Gradle plugin to generate Nix build scripts for Gradle-based -projects. +[[./assets/gradle2nix.png]] + +Generate [[https://nixos.org/nix/][Nix]] expressions which build [[https://gradle.org/][Gradle]]-based projects. + +** Why? + +Nix is an OS-agnostic package manager, a language-agnostic build +system, and a bespoke programming language. One of its unique features +is that it is purely functional; a "package" is a function which +accepts inputs (source code, configuration, etc) and produces an +output (binaries, a Java JAR, documentation, really anything). + +One benefit of a functional build system is [[https://reproducible-builds.org/][reproducibility]]. If you +specify your inputs precisely, and take care not to introduce +impurities—such as files retrieved over a network without tracking +their content—you will receive, byte-for-byte, the exact output as +someone else running the same function over the same inputs. + +Gradle is not a functional build system. Most Gradle-based projects +will produce highly variable outputs depending on a host of impure +inputs, including: + +- The JVM hosting the build +- The Gradle installation running the build +- Any usage of dynamic version constraints for dependencies +- SNAPSHOT dependencies +- Environment variables and command-line options +- Artifacts cached on the system hosting the build + +=gradle2nix= helps to solve this problem by leveraging Nix to control +the most common inputs to a Gradle build. When run on a project, it +will record all dependencies for both the build environment (including +=plugins= and =buildscript= blocks) and the project, and provide a Nix +expression to run the build given these dependencies. The build itself +is then run in a sandbox, where only content-tracked network requests +are allowed to fetch dependencies, and a local Maven repository is +created on-the-fly to host the dependency artifacts somewhere Gradle +can resolve them without a network. + +This tool is useful for both development and packaging. You can use +=gradle2nix= to: + +- Create isolated and reproducible development environments that work + anywhere Nix itself can run; +- Reduce or eliminate flakiness and maintenance headaches from CI/CD + pipelines +- Distribute a recipe which can reliably build a Gradle project in + repositories such as the [[https://nixos.org/nixpkgs/][Nix Package Collection]]. ** Installation +A [[./default.nix][Nix expression]] (generated by =gradle2nix= itself) is provided for +convenience. The following expression will fetch and build the latest +version of this package: + +#+begin_src nix +import (fetchTarball "https://github.com/tadfisher/gradle2nix/archive/master.tar.gz") {} +#+end_src + +If this expression is in, say, =gradle2nix.nix=, =gradle2nix= can be +built and placed in =.//result= with the following: + +#+begin_example +nix build -f gradle2nix.nix +#+end_example + +You can also use the following one-liners to build or install +=gradle2nix= in your user profile: + +#+begin_example +# Build and place in ./result/ +nix build -f "https://github.com/tadfisher/gradle2nix/archive/master.tar.gz" + +# Build and install in the user profile +nix-env -if "https://github.com/tadfisher/gradle2nix/archive/master.tar.gz" +#+end_example + +=gradle2nix= is not yet packaged in =nixpkgs= itself, but work is +[[https://github.com/NixOS/nixpkgs/pull/77422][in progress]]. ** Usage +#+begin_example +Usage: gradle2nix [OPTIONS] [PROJECT-DIR] + +Options: + -g, --gradle-version VERSION Use a specific Gradle version + -a, --gradle-args ARGS Extra arguments to pass to Gradle + -c, --configuration NAME Add a configuration to resolve (default: + all configurations) + -i, --include DIR Add an additional project to include + -p, --project PATH Only resolve these subproject paths, e.g. + ':', or ':sub:project' (default: all + projects) + -o, --out-dir DIR Path to write generated files (default: + PROJECT-DIR) + -e, --env FILENAME Prefix for environment files (.json and + .nix) (default: gradle-env) + -b, --build-src / -nb, --no-build-src + Include buildSrc project (default: true) + -q, --quiet Disable logging + -h, --help Show this message and exit + +Arguments: + PROJECT-DIR Path to the project root (default: .) +#+end_example + +Simply running =gradle2nix= in the root directory of a project should +be enough for most projects. This will produce two files, by default +called =gradle-env.json= and =gradle-env.nix=, which contain the +pinned dependencies for the project and a standard build expression +which can be imported or called by other Nix expressions. An example +of such an expression can be found in this project's [[./default.nix][default.nix]]. + +*** Specifying the Gradle version + +By default, if the project has configured the Gradle wrapper, that +version will be detected and pinned; otherwise, the version of Gradle +installed on your system will be pinned. You can override this with +the =--gradle-version= argument, which also avoids the need to have +Gradle installed. + +#+begin_example +gradle2nix -g 6.1 +#+end_example + +*** Multi-project builds + +If you want to resolve only a subset of projects in a [[https://docs.gradle.org/current/userguide/intro_multi_project_builds.html][multi-project +build]], add the =--project= option for each project. For example, in a +project where you only want to build the subprojects =:app= and +=:widget=: + +#+begin_example +gradle2nix -p :app -p :widget +#+end_example + +Any [[https://docs.gradle.org/current/userguide/declaring_dependencies.html#sub:project_dependencies][project dependencies]] will be also be included when pinning +dependency artifacts. + +** Contributing + +Bug reports and feature requests are encouraged. + +[[https://github.com/tadfisher/gradle2nix/issues/new][Create an issue]] + +Code contributions are also encouraged. Please review the test cases +in the [[./fixtures][fixtures]] directory and create a new one to reproduce any fixes +or test new features. See the [[./plugin/src/compatTest/kotlin/org/nixos/gradle2nix][existing compatibility tests]] for +examples of testing with these fixtures. ** License + +=gradle2nix= is licensed under the [[./COPYING][MIT License]]. diff --git a/assets/gradle2nix.png b/assets/gradle2nix.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d4efe8af9359f747b007771110eb5eb516c83a GIT binary patch literal 46701 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 F69BJ|mv#UE literal 0 HcmV?d00001 diff --git a/assets/gradle2nix.svg b/assets/gradle2nix.svg new file mode 100644 index 0000000..0569dea --- /dev/null +++ b/assets/gradle2nix.svg @@ -0,0 +1,680 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gradle 2 nix + + +