mirror of
https://github.com/tadfisher/gradle2nix.git
synced 2026-01-12 07:50:53 -05:00
Compare commits
9 Commits
custom-res
...
lenient-co
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b88ee98da2 | ||
|
|
59e8130e64 | ||
|
|
dd5d60e835 | ||
|
|
23cb225ccf | ||
|
|
c949f19891 | ||
|
|
c3c4079566 | ||
|
|
baa58da5a1 | ||
|
|
b1b0ba14db | ||
|
|
823e43d592 |
20
COPYING
Normal file
20
COPYING
Normal file
@@ -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.
|
||||||
150
README.org
150
README.org
@@ -1,12 +1,156 @@
|
|||||||
* gradle2nix
|
#+STARTUP: inlineimages
|
||||||
|
|
||||||
Application and Gradle plugin to generate Nix build scripts for Gradle-based
|
[[./assets/gradle2nix.png]]
|
||||||
projects.
|
|
||||||
|
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
|
** 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
|
** 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
|
** License
|
||||||
|
|
||||||
|
=gradle2nix= is licensed under the [[./COPYING][MIT License]].
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ plugins {
|
|||||||
kotlin("jvm")
|
kotlin("jvm")
|
||||||
kotlin("kapt")
|
kotlin("kapt")
|
||||||
application
|
application
|
||||||
|
idea
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -18,6 +19,11 @@ dependencies {
|
|||||||
implementation("com.squareup.moshi:moshi-kotlin:latest.release")
|
implementation("com.squareup.moshi:moshi-kotlin:latest.release")
|
||||||
kapt("com.squareup.moshi:moshi-kotlin-codegen:latest.release")
|
kapt("com.squareup.moshi:moshi-kotlin-codegen:latest.release")
|
||||||
implementation("com.squareup.okio:okio:latest.release")
|
implementation("com.squareup.okio:okio:latest.release")
|
||||||
|
|
||||||
|
testRuntimeOnly(kotlin("reflect"))
|
||||||
|
testImplementation("org.spekframework.spek2:spek-dsl-jvm:latest.release")
|
||||||
|
testRuntimeOnly("org.spekframework.spek2:spek-runner-junit5:latest.release")
|
||||||
|
testImplementation("io.strikt:strikt-core:latest.release")
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
@@ -30,11 +36,19 @@ application {
|
|||||||
.rename("plugin.*\\.jar", "plugin.jar")
|
.rename("plugin.*\\.jar", "plugin.jar")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
test {
|
||||||
|
resources {
|
||||||
|
srcDir("$rootDir/fixtures")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
(run) {
|
(run) {
|
||||||
dependsOn(installDist)
|
dependsOn(installDist)
|
||||||
doFirst {
|
doFirst {
|
||||||
jvmArgs = listOf("-Dorg.nixos.gradle2nix.share=${installDist.get().destinationDir.resolve("share")}")
|
systemProperties("org.nixos.gradle2nix.share" to installDist.get().destinationDir.resolve("share"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,9 +59,28 @@ tasks {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
dependsOn(installDist)
|
||||||
|
doFirst {
|
||||||
|
systemProperties("org.nixos.gradle2nix.share" to installDist.get().destinationDir.resolve("share"))
|
||||||
|
}
|
||||||
|
useJUnitPlatform {
|
||||||
|
includeEngines("spek2")
|
||||||
|
}
|
||||||
|
testLogging {
|
||||||
|
events("passed", "skipped", "failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
withType<KotlinCompile> {
|
withType<KotlinCompile> {
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "1.8"
|
jvmTarget = "1.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
idea {
|
||||||
|
module {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.github.ajalt:clikt:2.3.0
|
com.github.ajalt:clikt:2.6.0
|
||||||
com.squareup.moshi:moshi-adapters:1.9.2
|
com.squareup.moshi:moshi-adapters:1.9.2
|
||||||
com.squareup.moshi:moshi-kotlin:1.9.2
|
com.squareup.moshi:moshi-kotlin:1.9.2
|
||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:2.4.3
|
com.squareup.okio:okio:2.6.0
|
||||||
org.gradle:gradle-tooling-api:6.1
|
org.gradle:gradle-tooling-api:6.3
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
org.slf4j:slf4j-api:2.0.0-alpha1
|
org.slf4j:slf4j-api:2.0.0-alpha1
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.github.ajalt:clikt:2.3.0
|
com.github.ajalt:clikt:2.6.0
|
||||||
com.squareup.moshi:moshi-adapters:1.9.2
|
com.squareup.moshi:moshi-adapters:1.9.2
|
||||||
com.squareup.moshi:moshi-kotlin:1.9.2
|
com.squareup.moshi:moshi-kotlin:1.9.2
|
||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:2.4.3
|
com.squareup.okio:okio:2.6.0
|
||||||
net.swiftzer.semver:semver:1.1.1
|
net.swiftzer.semver:semver:1.1.1
|
||||||
org.gradle:gradle-tooling-api:6.1
|
org.gradle:gradle-tooling-api:6.3
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
org.slf4j:slf4j-api:2.0.0-alpha1
|
org.slf4j:slf4j-api:2.0.0-alpha1
|
||||||
org.slf4j:slf4j-simple:2.0.0-alpha1
|
org.slf4j:slf4j-simple:2.0.0-alpha1
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.github.ajalt:clikt:2.3.0
|
com.christophsturm:filepeek:0.1.2
|
||||||
|
com.github.ajalt:clikt:2.6.0
|
||||||
com.squareup.moshi:moshi-adapters:1.9.2
|
com.squareup.moshi:moshi-adapters:1.9.2
|
||||||
com.squareup.moshi:moshi-kotlin:1.9.2
|
com.squareup.moshi:moshi-kotlin:1.9.2
|
||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:2.4.3
|
com.squareup.okio:okio:2.6.0
|
||||||
org.gradle:gradle-tooling-api:6.1
|
io.strikt:strikt-core:0.25.0
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.gradle:gradle-tooling-api:6.3
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
org.opentest4j:opentest4j:1.2.0
|
||||||
org.slf4j:slf4j-api:2.0.0-alpha1
|
org.slf4j:slf4j-api:2.0.0-alpha1
|
||||||
|
org.spekframework.spek2:spek-dsl-jvm:2.0.10
|
||||||
|
|||||||
@@ -1,18 +1,31 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.github.ajalt:clikt:2.3.0
|
com.christophsturm:filepeek:0.1.2
|
||||||
|
com.github.ajalt:clikt:2.6.0
|
||||||
com.squareup.moshi:moshi-adapters:1.9.2
|
com.squareup.moshi:moshi-adapters:1.9.2
|
||||||
com.squareup.moshi:moshi-kotlin:1.9.2
|
com.squareup.moshi:moshi-kotlin:1.9.2
|
||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:2.4.3
|
com.squareup.okio:okio:2.6.0
|
||||||
|
io.github.classgraph:classgraph:4.8.37
|
||||||
|
io.strikt:strikt-core:0.25.0
|
||||||
net.swiftzer.semver:semver:1.1.1
|
net.swiftzer.semver:semver:1.1.1
|
||||||
org.gradle:gradle-tooling-api:6.1
|
org.apiguardian:apiguardian-api:1.1.0
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.gradle:gradle-tooling-api:6.3
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.71
|
||||||
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.71
|
||||||
|
org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.3
|
||||||
|
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.5
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
org.junit.platform:junit-platform-commons:1.6.0
|
||||||
|
org.junit.platform:junit-platform-engine:1.6.0
|
||||||
|
org.junit:junit-bom:5.6.0
|
||||||
|
org.opentest4j:opentest4j:1.2.0
|
||||||
org.slf4j:slf4j-api:2.0.0-alpha1
|
org.slf4j:slf4j-api:2.0.0-alpha1
|
||||||
org.slf4j:slf4j-simple:2.0.0-alpha1
|
org.slf4j:slf4j-simple:2.0.0-alpha1
|
||||||
|
org.spekframework.spek2:spek-dsl-jvm:2.0.10
|
||||||
|
org.spekframework.spek2:spek-runner-junit5:2.0.10
|
||||||
|
org.spekframework.spek2:spek-runtime-jvm:2.0.10
|
||||||
|
|||||||
9
app/src/dist/share/gradle-env.nix
vendored
9
app/src/dist/share/gradle-env.nix
vendored
@@ -254,13 +254,18 @@ in stdenv.mkDerivation (args // {
|
|||||||
|
|
||||||
(
|
(
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
|
# use the init script here
|
||||||
|
TMPHOME=$(mktemp -d)
|
||||||
|
mkdir -p $TMPHOME/init.d
|
||||||
|
cp ${projectEnv.initScript} $TMPHOME/init.d
|
||||||
|
|
||||||
env \
|
env \
|
||||||
"GRADLE_USER_HOME=$(mktemp -d)" \
|
"GRADLE_USER_HOME=$TMPHOME" \
|
||||||
gradle --offline --no-daemon --no-build-cache \
|
gradle --offline --no-daemon --no-build-cache \
|
||||||
--info --full-stacktrace --warning-mode=all \
|
--info --full-stacktrace --warning-mode=all \
|
||||||
${optionalString enableParallelBuilding "--parallel"} \
|
${optionalString enableParallelBuilding "--parallel"} \
|
||||||
${optionalString enableDebug "-Dorg.gradle.debug=true"} \
|
${optionalString enableDebug "-Dorg.gradle.debug=true"} \
|
||||||
--init-script ${projectEnv.initScript} \
|
|
||||||
${concatStringsSep " " gradleFlags}
|
${concatStringsSep " " gradleFlags}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ fun ProjectConnection.getBuildModel(config: Config, path: String): DefaultBuild
|
|||||||
if (config.gradleArgs != null) addArguments(config.gradleArgs)
|
if (config.gradleArgs != null) addArguments(config.gradleArgs)
|
||||||
if (path.isNotEmpty()) addArguments("--project-dir=$path")
|
if (path.isNotEmpty()) addArguments("--project-dir=$path")
|
||||||
if (!config.quiet) {
|
if (!config.quiet) {
|
||||||
setColorOutput(true)
|
|
||||||
setStandardOutput(System.err)
|
setStandardOutput(System.err)
|
||||||
setStandardError(System.err)
|
setStandardError(System.err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import com.github.ajalt.clikt.parameters.options.default
|
|||||||
import com.github.ajalt.clikt.parameters.options.flag
|
import com.github.ajalt.clikt.parameters.options.flag
|
||||||
import com.github.ajalt.clikt.parameters.options.multiple
|
import com.github.ajalt.clikt.parameters.options.multiple
|
||||||
import com.github.ajalt.clikt.parameters.options.option
|
import com.github.ajalt.clikt.parameters.options.option
|
||||||
import com.github.ajalt.clikt.parameters.options.split
|
|
||||||
import com.github.ajalt.clikt.parameters.options.validate
|
import com.github.ajalt.clikt.parameters.options.validate
|
||||||
import com.github.ajalt.clikt.parameters.types.file
|
import com.github.ajalt.clikt.parameters.types.file
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
@@ -55,7 +54,7 @@ class Main : CliktCommand(
|
|||||||
private val includes: List<File> by option("--include", "-i",
|
private val includes: List<File> by option("--include", "-i",
|
||||||
metavar = "DIR",
|
metavar = "DIR",
|
||||||
help = "Add an additional project to include")
|
help = "Add an additional project to include")
|
||||||
.file(exists = true, fileOkay = false, folderOkay = true, readable = true)
|
.file(mustExist = true, canBeFile = false, canBeDir = true, mustBeReadable = true)
|
||||||
.multiple()
|
.multiple()
|
||||||
.validate { files ->
|
.validate { files ->
|
||||||
val failures = files.filterNot { it.isProjectRoot() }
|
val failures = files.filterNot { it.isProjectRoot() }
|
||||||
@@ -79,12 +78,12 @@ class Main : CliktCommand(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val outDir: File? by option("--out-dir", "-o",
|
val outDir: File? by option("--out-dir", "-o",
|
||||||
metavar = "DIR",
|
metavar = "DIR",
|
||||||
help = "Path to write generated files (default: PROJECT-DIR)")
|
help = "Path to write generated files (default: PROJECT-DIR)")
|
||||||
.file(fileOkay = false, folderOkay = true)
|
.file(canBeFile = false, canBeDir = true)
|
||||||
|
|
||||||
private val envFile: String by option("--env", "-e",
|
val envFile: String by option("--env", "-e",
|
||||||
metavar = "FILENAME",
|
metavar = "FILENAME",
|
||||||
help = "Prefix for environment files (.json and .nix)")
|
help = "Prefix for environment files (.json and .nix)")
|
||||||
.default("gradle-env")
|
.default("gradle-env")
|
||||||
@@ -105,8 +104,11 @@ class Main : CliktCommand(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Visible for testing
|
||||||
|
lateinit var config: Config
|
||||||
|
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val config = Config(
|
config = Config(
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
gradleArgs,
|
gradleArgs,
|
||||||
configurations,
|
configurations,
|
||||||
|
|||||||
19
app/src/test/kotlin/org/nixos/gradle2nix/BuildSrcTest.kt
Normal file
19
app/src/test/kotlin/org/nixos/gradle2nix/BuildSrcTest.kt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package org.nixos.gradle2nix
|
||||||
|
|
||||||
|
import org.spekframework.spek2.Spek
|
||||||
|
import org.spekframework.spek2.style.specification.describe
|
||||||
|
import strikt.api.expectThat
|
||||||
|
import strikt.assertions.containsKey
|
||||||
|
|
||||||
|
object BuildSrcTest : Spek({
|
||||||
|
fixture("buildsrc/plugin-in-buildsrc/kotlin")
|
||||||
|
val fixture: Fixture by memoized()
|
||||||
|
|
||||||
|
describe("project with plugin in buildSrc") {
|
||||||
|
fixture.run()
|
||||||
|
|
||||||
|
it("should include buildSrc in gradle env", timeout = 0) {
|
||||||
|
expectThat(fixture.env()).containsKey("buildSrc")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
57
app/src/test/kotlin/org/nixos/gradle2nix/TestUtil.kt
Normal file
57
app/src/test/kotlin/org/nixos/gradle2nix/TestUtil.kt
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package org.nixos.gradle2nix
|
||||||
|
|
||||||
|
import com.squareup.moshi.Moshi
|
||||||
|
import com.squareup.moshi.Types
|
||||||
|
import okio.buffer
|
||||||
|
import okio.source
|
||||||
|
import org.spekframework.spek2.dsl.Root
|
||||||
|
import strikt.api.expectThat
|
||||||
|
import strikt.assertions.exists
|
||||||
|
import strikt.assertions.isNotNull
|
||||||
|
import strikt.assertions.toPath
|
||||||
|
import java.nio.file.Files
|
||||||
|
import java.nio.file.Path
|
||||||
|
import java.nio.file.Paths
|
||||||
|
|
||||||
|
private val moshi = Moshi.Builder().build()
|
||||||
|
|
||||||
|
class Fixture(val project: Path) {
|
||||||
|
private val app = Main()
|
||||||
|
|
||||||
|
fun run(vararg args: String) {
|
||||||
|
app.main(args.toList() + project.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun env(): Map<String, NixGradleEnv> {
|
||||||
|
val file = (app.outDir ?: project.toFile()).resolve("${app.envFile}.json")
|
||||||
|
expectThat(file).toPath().exists()
|
||||||
|
val env = file.source().buffer().use { source ->
|
||||||
|
moshi
|
||||||
|
.adapter<Map<String, NixGradleEnv>>(
|
||||||
|
Types.newParameterizedType(Map::class.java, String::class.java, NixGradleEnv::class.java)
|
||||||
|
).fromJson(source)
|
||||||
|
}
|
||||||
|
expectThat(env).isNotNull()
|
||||||
|
return env!!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Root.fixture(name: String) {
|
||||||
|
val fixture by memoized(
|
||||||
|
factory = {
|
||||||
|
val url = checkNotNull(Thread.currentThread().contextClassLoader.getResource(name)?.toURI()) {
|
||||||
|
"$name: No test fixture found"
|
||||||
|
}
|
||||||
|
val fixtureRoot = Paths.get(url)
|
||||||
|
val dest = createTempDir("gradle2nix").toPath()
|
||||||
|
val src = checkNotNull(fixtureRoot.takeIf { Files.exists(it) }) {
|
||||||
|
"$name: Test fixture not found: $fixtureRoot"
|
||||||
|
}
|
||||||
|
src.toFile().copyRecursively(dest.toFile())
|
||||||
|
Fixture(dest)
|
||||||
|
},
|
||||||
|
destructor = {
|
||||||
|
it.project.toFile().deleteRecursively()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
BIN
assets/gradle2nix.png
Normal file
BIN
assets/gradle2nix.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
680
assets/gradle2nix.svg
Normal file
680
assets/gradle2nix.svg
Normal file
@@ -0,0 +1,680 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1280"
|
||||||
|
height="640"
|
||||||
|
viewBox="0 0 338.66666 169.33334"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="gradle2nix.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
gradientTransform="matrix(0.52333152,0,0,0.52333152,25.176839,183.12552)"
|
||||||
|
id="linear-gradient"
|
||||||
|
x1="1.5"
|
||||||
|
y1="29.09"
|
||||||
|
x2="88.3"
|
||||||
|
y2="38.21"
|
||||||
|
gradientUnits="userSpaceOnUse">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
stop-color="#06a0ce"
|
||||||
|
id="stop4734" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
stop-color="#51cbbf"
|
||||||
|
id="stop4736" />
|
||||||
|
</linearGradient>
|
||||||
|
<style
|
||||||
|
id="style4930">.Graphic-Style-2{fill:url(#linear-gradient);}</style>
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="38.21"
|
||||||
|
x2="88.3"
|
||||||
|
y1="29.09"
|
||||||
|
x1="1.5"
|
||||||
|
id="linear-gradient-5"
|
||||||
|
gradientTransform="matrix(0.52333152,0,0,0.52333152,25.176839,183.12552)">
|
||||||
|
<stop
|
||||||
|
id="stop4932"
|
||||||
|
stop-color="#06a0ce"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4934"
|
||||||
|
stop-color="#51cbbf"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5562"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
id="stop5564"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#699ad7;stop-opacity:1" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#7eb1dd;stop-opacity:1"
|
||||||
|
offset="0.24345198"
|
||||||
|
id="stop5566" />
|
||||||
|
<stop
|
||||||
|
id="stop5568"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#7ebae4;stop-opacity:1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5053"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
id="stop5055"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#415e9a;stop-opacity:1" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#4a6baf;stop-opacity:1"
|
||||||
|
offset="0.23168644"
|
||||||
|
id="stop5057" />
|
||||||
|
<stop
|
||||||
|
id="stop5059"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#5277c3;stop-opacity:1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient5960">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#637ddf;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop5962" />
|
||||||
|
<stop
|
||||||
|
id="stop5964"
|
||||||
|
offset="0.23168644"
|
||||||
|
style="stop-color:#649afa;stop-opacity:1" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#719efa;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop5966" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5867"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
id="stop5869"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#7363df;stop-opacity:1" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#6478fa;stop-opacity:1"
|
||||||
|
offset="0.23168644"
|
||||||
|
id="stop5871" />
|
||||||
|
<stop
|
||||||
|
id="stop5873"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#719efa;stop-opacity:1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5960"
|
||||||
|
id="linearGradient5855"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(983.36076,601.38885)"
|
||||||
|
x1="213.95642"
|
||||||
|
y1="338.62445"
|
||||||
|
x2="282.26105"
|
||||||
|
y2="515.97058" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5867"
|
||||||
|
id="linearGradient5855-8"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-197.75174,-337.1451)"
|
||||||
|
x1="213.95642"
|
||||||
|
y1="338.62445"
|
||||||
|
x2="282.26105"
|
||||||
|
y2="515.97058" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5960"
|
||||||
|
id="linearGradient4544"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(983.36076,601.38885)"
|
||||||
|
x1="-775.20807"
|
||||||
|
y1="102.74675"
|
||||||
|
x2="-702.75317"
|
||||||
|
y2="247.58188" />
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath4501">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#adadad;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="circle4503"
|
||||||
|
cx="335.13995"
|
||||||
|
cy="686.09473"
|
||||||
|
r="241.06563" />
|
||||||
|
</clipPath>
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath5410">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="circle5412"
|
||||||
|
cx="335.98114"
|
||||||
|
cy="340.98975"
|
||||||
|
r="241.13741" />
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient
|
||||||
|
y2="937.71399"
|
||||||
|
x2="-496.29703"
|
||||||
|
y1="782.33563"
|
||||||
|
x1="-584.19934"
|
||||||
|
gradientTransform="translate(864.55062,-2197.497)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient5137"
|
||||||
|
xlink:href="#linearGradient5053"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
y2="506.18814"
|
||||||
|
x2="290.08701"
|
||||||
|
y1="351.41116"
|
||||||
|
x1="200.59668"
|
||||||
|
gradientTransform="translate(70.505061,-1761.3076)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient5162"
|
||||||
|
xlink:href="#linearGradient5562"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5562"
|
||||||
|
id="linearGradient3917"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(70.650339,-1055.1511)"
|
||||||
|
x1="200.59668"
|
||||||
|
y1="351.41116"
|
||||||
|
x2="290.08701"
|
||||||
|
y2="506.18814" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5053"
|
||||||
|
id="linearGradient3919"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(864.69589,-1491.3405)"
|
||||||
|
x1="-584.19934"
|
||||||
|
y1="782.33563"
|
||||||
|
x2="-496.29703"
|
||||||
|
y2="937.71399" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linear-gradient-5"
|
||||||
|
id="linearGradient4732"
|
||||||
|
x1="418.76779"
|
||||||
|
y1="264.43814"
|
||||||
|
x2="652.08905"
|
||||||
|
y2="296.6008"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5867"
|
||||||
|
id="linearGradient4745"
|
||||||
|
x1="421.11343"
|
||||||
|
y1="273.91626"
|
||||||
|
x2="524.12122"
|
||||||
|
y2="273.91626"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linear-gradient-5"
|
||||||
|
id="linearGradient4763"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="418.76779"
|
||||||
|
y1="264.43814"
|
||||||
|
x2="652.08905"
|
||||||
|
y2="296.6008" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linear-gradient-5"
|
||||||
|
id="linearGradient4765"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="418.76779"
|
||||||
|
y1="264.43814"
|
||||||
|
x2="652.08905"
|
||||||
|
y2="296.6008" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linear-gradient-5"
|
||||||
|
id="linearGradient4767"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="418.76779"
|
||||||
|
y1="264.43814"
|
||||||
|
x2="652.08905"
|
||||||
|
y2="296.6008" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linear-gradient-5"
|
||||||
|
id="linearGradient4769"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="418.76779"
|
||||||
|
y1="264.43814"
|
||||||
|
x2="652.08905"
|
||||||
|
y2="296.6008" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5867"
|
||||||
|
id="linearGradient4771"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="421.11343"
|
||||||
|
y1="273.91626"
|
||||||
|
x2="524.12122"
|
||||||
|
y2="273.91626" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5867"
|
||||||
|
id="linearGradient4773"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="421.11343"
|
||||||
|
y1="273.91626"
|
||||||
|
x2="524.12122"
|
||||||
|
y2="273.91626" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5867"
|
||||||
|
id="linearGradient4775"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="421.11343"
|
||||||
|
y1="273.91626"
|
||||||
|
x2="524.12122"
|
||||||
|
y2="273.91626" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.38515625"
|
||||||
|
inkscape:cx="791.08312"
|
||||||
|
inkscape:cy="364.77075"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="g4759"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:window-width="1660"
|
||||||
|
inkscape:window-height="1011"
|
||||||
|
inkscape:window-x="260"
|
||||||
|
inkscape:window-y="30"
|
||||||
|
inkscape:window-maximized="0">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,148.16667"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide4518"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,0,255)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,21.166667"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide4793"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,0,255)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="21.166667,0"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4795"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,0,255)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="317.5,0"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide4797"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,0,255)" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-127.66665)">
|
||||||
|
<g
|
||||||
|
id="g3833"
|
||||||
|
transform="matrix(1.087741,0,0,1.0877425,-6.2376695,-19.285721)">
|
||||||
|
<path
|
||||||
|
style="fill:url(#linear-gradient-5);stroke-width:0.52333152"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
class="Graphic-Style-2"
|
||||||
|
d="m 69.717638,185.31305 a 7.4679407,7.4679407 0 0 0 -10.37771,-0.17802 0.72219753,0.72219753 0 0 0 0,1.04667 l 0.900124,0.92105 a 0.71173086,0.71173086 0 0 0 0.931533,0.0627 4.2808518,4.2808518 0 0 1 5.610133,6.45792 c -5.929373,5.92412 -13.842146,-10.68643 -31.802883,-2.12473 a 2.4334915,2.4334915 0 0 0 -1.04665,3.4226 l 3.082411,5.32227 a 2.4282583,2.4282583 0 0 0 3.296998,0.90536 l 0.07318,-0.0419 -0.05756,0.0419 1.350185,-0.75359 a 31.551656,31.551656 0 0 0 4.301795,-3.20804 0.75359739,0.75359739 0 0 1 0.978628,-0.0314 v 0 a 0.70126424,0.70126424 0 0 1 0.03145,1.04667 32.242454,32.242454 0 0 1 -4.542531,3.41735 h -0.04707 l -1.365891,0.76407 a 3.8412533,3.8412533 0 0 1 -1.889235,0.49194 3.8988198,3.8988198 0 0 1 -3.385946,-1.94158 l -2.914958,-5.0292 c -5.573487,3.96685 -8.996077,11.58655 -7.143483,21.23679 a 0.71173086,0.71173086 0 0 0 0.696033,0.58089 h 3.286533 a 0.71173086,0.71173086 0 0 0 0.72743,-0.64893 4.8617496,4.8617496 0 0 1 9.639776,0 0.70649755,0.70649755 0 0 0 0.70126,0.62278 h 3.213252 a 0.71173086,0.71173086 0 0 0 0.701262,-0.62278 4.8617496,4.8617496 0 0 1 9.639776,0 0.71173086,0.71173086 0 0 0 0.70126,0.62278 h 3.192327 a 0.71173086,0.71173086 0 0 0 0.711723,-0.70128 c 0.07318,-4.50064 1.287386,-9.67117 4.746628,-12.26165 11.98433,-8.96468 8.83387,-16.64718 6.06022,-19.42083 z m -12.21985,13.53858 -2.286941,-1.1461 v 0 a 1.4339283,1.4339283 0 1 1 2.286941,1.15134 z"
|
||||||
|
id="path4941" />
|
||||||
|
<g
|
||||||
|
transform="matrix(0.08170627,0,0,0.08170627,58.715285,207.19198)"
|
||||||
|
id="g5193">
|
||||||
|
<g
|
||||||
|
id="layer7"
|
||||||
|
inkscape:label="bg"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-23.75651,-24.84972)">
|
||||||
|
<rect
|
||||||
|
transform="translate(-132.5822,958.04022)"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5389"
|
||||||
|
width="1543.4283"
|
||||||
|
height="483.7439"
|
||||||
|
x="132.5822"
|
||||||
|
y="-957.77832" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="layer6"
|
||||||
|
inkscape:label="logo-guide"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(-156.33871,933.1905)">
|
||||||
|
<rect
|
||||||
|
y="-958.02759"
|
||||||
|
x="132.65129"
|
||||||
|
height="484.30399"
|
||||||
|
width="550.41602"
|
||||||
|
id="rect5379"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nix-wiki.png"
|
||||||
|
inkscape:export-xdpi="22.07"
|
||||||
|
inkscape:export-ydpi="22.07" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5372"
|
||||||
|
width="501.94415"
|
||||||
|
height="434.30405"
|
||||||
|
x="156.12303"
|
||||||
|
y="-933.02759"
|
||||||
|
inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nixos-logo-only-hires-print.png"
|
||||||
|
inkscape:export-xdpi="212.2"
|
||||||
|
inkscape:export-ydpi="212.2" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5381"
|
||||||
|
width="24.939611"
|
||||||
|
height="24.939611"
|
||||||
|
x="658.02826"
|
||||||
|
y="-958.04022" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:label="print-logo"
|
||||||
|
id="layer1-6"
|
||||||
|
style="display:inline"
|
||||||
|
transform="translate(-156.33871,933.1905)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
id="path4861"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccccc" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||||
|
id="use4863"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccccc" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||||
|
id="use4865"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccccc" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||||
|
id="use4867"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccccc" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4873"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="use4875"
|
||||||
|
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="use4877"
|
||||||
|
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||||
|
<g
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="guides"
|
||||||
|
style="display:none"
|
||||||
|
transform="translate(72.039038,-1799.4476)">
|
||||||
|
<path
|
||||||
|
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
sodipodi:arg2="1.5707963"
|
||||||
|
sodipodi:arg1="1.0471976"
|
||||||
|
sodipodi:r2="217.25499"
|
||||||
|
sodipodi:r1="250.86446"
|
||||||
|
sodipodi:cy="377.47382"
|
||||||
|
sodipodi:cx="335.17407"
|
||||||
|
sodipodi:sides="6"
|
||||||
|
id="path6032"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.23600003;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||||
|
sodipodi:type="star" />
|
||||||
|
<path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||||
|
id="path5875"
|
||||||
|
sodipodi:sides="6"
|
||||||
|
sodipodi:cx="335.17407"
|
||||||
|
sodipodi:cy="685.74158"
|
||||||
|
sodipodi:r1="100.83495"
|
||||||
|
sodipodi:r2="87.32563"
|
||||||
|
sodipodi:arg1="1.0471976"
|
||||||
|
sodipodi:arg2="1.5707963"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 385.59154,773.06721 -100.83495,0 -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" />
|
||||||
|
<path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
sodipodi:nodetypes="ccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5851"
|
||||||
|
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
|
||||||
|
style="fill:url(#linearGradient5855);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.41499999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c53a3a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5884"
|
||||||
|
width="48.834862"
|
||||||
|
height="226.22897"
|
||||||
|
x="-34.74221"
|
||||||
|
y="446.17056"
|
||||||
|
transform="rotate(-30)" />
|
||||||
|
<path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.50899999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="path3428"
|
||||||
|
sodipodi:sides="6"
|
||||||
|
sodipodi:cx="223.93674"
|
||||||
|
sodipodi:cy="878.63831"
|
||||||
|
sodipodi:r1="28.048939"
|
||||||
|
sodipodi:r2="24.291094"
|
||||||
|
sodipodi:arg1="0"
|
||||||
|
sodipodi:arg2="0.52359878"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect5884"
|
||||||
|
id="use4252"
|
||||||
|
transform="rotate(60,268.29786,489.4515)"
|
||||||
|
width="100%"
|
||||||
|
height="100%" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.6507937;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect4254"
|
||||||
|
width="5.3947482"
|
||||||
|
height="115.12564"
|
||||||
|
x="545.71014"
|
||||||
|
y="467.07007"
|
||||||
|
transform="rotate(30,575.23539,-154.13386)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="gradient-logo"
|
||||||
|
style="display:inline;opacity:1"
|
||||||
|
transform="translate(-156.33871,933.1905)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3336-6"
|
||||||
|
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
|
||||||
|
style="opacity:1;fill:url(#linearGradient3917);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(60,407.11155,-715.78724)"
|
||||||
|
id="use3439-6"
|
||||||
|
inkscape:transform-center-y="151.59082"
|
||||||
|
inkscape:transform-center-x="124.43045"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0" />
|
||||||
|
<use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(-60,407.31177,-715.70016)"
|
||||||
|
id="use3445-0"
|
||||||
|
inkscape:transform-center-y="75.573958"
|
||||||
|
inkscape:transform-center-x="-168.20651"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0" />
|
||||||
|
<use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(180,407.41868,-715.7565)"
|
||||||
|
id="use3449-5"
|
||||||
|
inkscape:transform-center-y="-139.94592"
|
||||||
|
inkscape:transform-center-x="59.669705"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient3919);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
|
||||||
|
id="path4260-0"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccccc" />
|
||||||
|
<use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(120,407.33916,-716.08356)"
|
||||||
|
id="use4354-5"
|
||||||
|
xlink:href="#path4260-0"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="display:inline" />
|
||||||
|
<use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(-120,407.28823,-715.86995)"
|
||||||
|
id="use4362-2"
|
||||||
|
xlink:href="#path4260-0"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="display:inline" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<flowRoot
|
||||||
|
xml:space="preserve"
|
||||||
|
id="flowRoot6066"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
|
||||||
|
id="flowRegion6068"><rect
|
||||||
|
id="rect6070"
|
||||||
|
width="650"
|
||||||
|
height="201.42857"
|
||||||
|
x="428.57144"
|
||||||
|
y="231.42857" /></flowRegion><flowPara
|
||||||
|
id="flowPara6072" /></flowRoot> <g
|
||||||
|
id="g3895"
|
||||||
|
transform="matrix(1.087741,0,0,1.0877425,-1.5979005,-62.174062)">
|
||||||
|
<g
|
||||||
|
id="g4759"
|
||||||
|
transform="translate(0,-0.48648156)">
|
||||||
|
<flowRoot
|
||||||
|
transform="matrix(0.45162205,0,0,0.45162205,-75.796378,125.9913)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;line-height:1.25;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:url(#linearGradient4769);fill-opacity:1;stroke:none"
|
||||||
|
id="flowRoot3849"
|
||||||
|
xml:space="preserve"><flowRegion
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4765);fill-opacity:1"
|
||||||
|
id="flowRegion3845"><rect
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4763);fill-opacity:1"
|
||||||
|
y="218.57143"
|
||||||
|
x="412.85715"
|
||||||
|
height="200"
|
||||||
|
width="787.14282"
|
||||||
|
id="rect3843" /></flowRegion><flowPara
|
||||||
|
style="fill:url(#linearGradient4767);fill-opacity:1"
|
||||||
|
id="flowPara3847">gradle</flowPara></flowRoot> <flowRoot
|
||||||
|
transform="matrix(0.45162205,0,0,0.45162205,34.199761,125.86986)"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;line-height:1.25;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff2a2a;fill-opacity:0.68707485;stroke:none"
|
||||||
|
id="flowRoot3865"
|
||||||
|
xml:space="preserve"><flowRegion
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff2a2a;fill-opacity:0.68707485"
|
||||||
|
id="flowRegion3861"><rect
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff2a2a;fill-opacity:0.68707485"
|
||||||
|
y="218.57143"
|
||||||
|
x="412.85715"
|
||||||
|
height="200"
|
||||||
|
width="787.14282"
|
||||||
|
id="rect3859" /></flowRegion><flowPara
|
||||||
|
id="flowPara3863">2</flowPara></flowRoot> <flowRoot
|
||||||
|
xml:space="preserve"
|
||||||
|
id="flowRoot3873"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;line-height:1.25;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:url(#linearGradient4745);fill-opacity:1;stroke:none"
|
||||||
|
transform="matrix(0.45162205,0,0,0.45162205,56.653631,125.86986)"><flowRegion
|
||||||
|
id="flowRegion3869"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4773);fill-opacity:1"><rect
|
||||||
|
id="rect3867"
|
||||||
|
width="787.14282"
|
||||||
|
height="200"
|
||||||
|
x="412.85715"
|
||||||
|
y="218.57143"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:96px;font-family:Vegur;-inkscape-font-specification:'Vegur, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4771);fill-opacity:1" /></flowRegion><flowPara
|
||||||
|
style="fill:url(#linearGradient4775);fill-opacity:1"
|
||||||
|
id="flowPara3871">nix</flowPara></flowRoot> </g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 37 KiB |
@@ -50,7 +50,7 @@ allprojects {
|
|||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
wrapper {
|
wrapper {
|
||||||
gradleVersion = "6.1"
|
gradleVersion = "6.3"
|
||||||
distributionType = Wrapper.DistributionType.ALL
|
distributionType = Wrapper.DistributionType.ALL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
37
default.nix
37
default.nix
@@ -5,15 +5,34 @@ with pkgs;
|
|||||||
let
|
let
|
||||||
buildGradle = pkgs.callPackage ./gradle-env.nix {};
|
buildGradle = pkgs.callPackage ./gradle-env.nix {};
|
||||||
|
|
||||||
in buildGradle {
|
gradle2nix = buildGradle {
|
||||||
envSpec = ./gradle-env.json;
|
envSpec = ./gradle-env.json;
|
||||||
|
|
||||||
src = ./.;
|
src = lib.cleanSourceWith {
|
||||||
|
filter = lib.cleanSourceFilter;
|
||||||
|
src = lib.cleanSourceWith {
|
||||||
|
filter = path: type: let baseName = baseNameOf path; in !(
|
||||||
|
(type == "directory" && (
|
||||||
|
baseName == "build" ||
|
||||||
|
baseName == ".idea" ||
|
||||||
|
baseName == ".gradle"
|
||||||
|
)) ||
|
||||||
|
(lib.hasSuffix ".iml" baseName)
|
||||||
|
);
|
||||||
|
src = ./.;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
gradleFlags = [ "installDist" ];
|
gradleFlags = [ "installDist" ];
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cp -r app/build/install/gradle2nix/* $out/
|
cp -r app/build/install/gradle2nix/* $out/
|
||||||
'';
|
'';
|
||||||
}
|
|
||||||
|
passthru = {
|
||||||
|
plugin = "${gradle2nix}/share/plugin.jar";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
in gradle2nix
|
||||||
|
|||||||
30
fixtures/basic/basic-kotlin-project/kotlin/build.gradle.kts
Normal file
30
fixtures/basic/basic-kotlin-project/kotlin/build.gradle.kts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
val kotlinVersion = "1.3.61"
|
||||||
|
val spekVersion = "2.0.9"
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
application
|
||||||
|
kotlin("jvm") version "1.3.61"
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile(kotlin("stdlib"))
|
||||||
|
implementation("com.natpryce:konfig:1.6.10.0")
|
||||||
|
implementation("com.github.pengrad:java-telegram-bot-api:4.6.0")
|
||||||
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3")
|
||||||
|
implementation("org.jetbrains.exposed:exposed-core:0.21.1")
|
||||||
|
implementation("org.jetbrains.exposed", "exposed-dao", "0.21.1")
|
||||||
|
implementation("org.jetbrains.exposed", "exposed-jdbc", "0.21.1")
|
||||||
|
implementation("org.jetbrains.exposed", "exposed-jodatime", "0.21.1")
|
||||||
|
implementation("io.javalin:javalin:3.7.0")
|
||||||
|
implementation("org.slf4j:slf4j-simple:1.8.0-beta4")
|
||||||
|
implementation(group = "org.xerial", name = "sqlite-jdbc", version = "3.30.1")
|
||||||
|
implementation("org.postgresql:postgresql:42.2.2")
|
||||||
|
implementation("com.fasterxml.jackson.core:jackson-databind:2.10.1")
|
||||||
|
testImplementation("org.spekframework.spek2:spek-dsl-jvm:$spekVersion")
|
||||||
|
testRuntimeOnly("org.spekframework.spek2:spek-runner-junit5:$spekVersion")
|
||||||
|
testCompile("com.winterbe:expekt:0.5.0")
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
plugins {
|
||||||
|
`java-library`
|
||||||
|
id("com.example.custom-spotless")
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
plugins {
|
||||||
|
`kotlin-dsl`
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation("com.diffplug.spotless:spotless-plugin-gradle:3.28.1")
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.example
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
com.diffplug.gradle.spotless
|
||||||
|
}
|
||||||
|
|
||||||
|
spotless {
|
||||||
|
kotlin {
|
||||||
|
ktlint()
|
||||||
|
}
|
||||||
|
}
|
||||||
2561
gradle-env.json
2561
gradle-env.json
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
||||||
|
|
||||||
VERSION=1.0.0-rc1
|
VERSION=1.0.0-rc2
|
||||||
|
|||||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:1.16.0
|
com.squareup.okio:okio:1.16.0
|
||||||
net.swiftzer.semver:semver:1.1.1
|
net.swiftzer.semver:semver:1.1.1
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:1.16.0
|
com.squareup.okio:okio:1.16.0
|
||||||
net.swiftzer.semver:semver:1.1.1
|
net.swiftzer.semver:semver:1.1.1
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:1.16.0
|
com.squareup.okio:okio:1.16.0
|
||||||
net.swiftzer.semver:semver:1.1.1
|
net.swiftzer.semver:semver:1.1.1
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
|||||||
@@ -2,36 +2,33 @@
|
|||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.google.code.gson:gson:2.8.5
|
com.google.code.gson:gson:2.8.5
|
||||||
commons-codec:commons-codec:1.9
|
de.undercouch:gradle-download-task:4.0.2
|
||||||
commons-logging:commons-logging:1.2
|
org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:1.3.4
|
||||||
de.undercouch:gradle-download-task:3.4.3
|
org.gradle.kotlin:plugins:1.3.4
|
||||||
org.apache.httpcomponents:httpclient:4.5.3
|
|
||||||
org.apache.httpcomponents:httpcore:4.4.6
|
|
||||||
org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:1.3.3
|
|
||||||
org.gradle.kotlin:plugins:1.3.3
|
|
||||||
org.jetbrains.intellij.deps:trove4j:1.0.20181211
|
org.jetbrains.intellij.deps:trove4j:1.0.20181211
|
||||||
org.jetbrains.kotlin:kotlin-android-extensions:1.3.61
|
org.jetbrains.kotlin:kotlin-android-extensions:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.3.61
|
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-build-common:1.3.61
|
org.jetbrains.kotlin:kotlin-build-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.61
|
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.3.61
|
org.jetbrains.kotlin:kotlin-compiler-runner:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-daemon-client:1.3.61
|
org.jetbrains.kotlin:kotlin-daemon-client:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.3.61
|
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.3.61
|
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.3.61
|
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61
|
org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-native-utils:1.3.61
|
org.jetbrains.kotlin:kotlin-native-utils:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-sam-with-receiver:1.3.61
|
org.jetbrains.kotlin:kotlin-sam-with-receiver:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-script-runtime:1.3.61
|
org.jetbrains.kotlin:kotlin-script-runtime:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-scripting-common:1.3.61
|
org.jetbrains.kotlin:kotlin-scripting-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.61
|
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.61
|
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.61
|
org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-util-io:1.3.61
|
org.jetbrains.kotlin:kotlin-util-io:1.3.70
|
||||||
|
org.jetbrains.kotlin:kotlin-util-klib:1.3.70
|
||||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1
|
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
|||||||
@@ -1,23 +1,24 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
|
com.christophsturm:filepeek:0.1.2
|
||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:2.4.3
|
com.squareup.okio:okio:2.6.0
|
||||||
dev.minutest:minutest:1.10.0
|
dev.minutest:minutest:1.11.0
|
||||||
io.strikt:strikt-core:0.23.4
|
io.strikt:strikt-core:0.25.0
|
||||||
org.apiguardian:apiguardian-api:1.1.0
|
org.apiguardian:apiguardian-api:1.1.0
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.61
|
org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-test-common:1.3.61
|
org.jetbrains.kotlin:kotlin-test-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-test-junit5:1.3.61
|
org.jetbrains.kotlin:kotlin-test-junit5:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-test:1.3.61
|
org.jetbrains.kotlin:kotlin-test:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
org.junit.jupiter:junit-jupiter-api:5.6.0
|
org.junit.jupiter:junit-jupiter-api:5.7.0-M1
|
||||||
org.junit.jupiter:junit-jupiter-params:5.6.0
|
org.junit.jupiter:junit-jupiter-params:5.7.0-M1
|
||||||
org.junit.platform:junit-platform-commons:1.6.0
|
org.junit.platform:junit-platform-commons:1.7.0-M1
|
||||||
org.junit:junit-bom:5.6.0
|
org.junit:junit-bom:5.7.0-M1
|
||||||
org.opentest4j:opentest4j:1.2.0
|
org.opentest4j:opentest4j:1.2.0
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.christophsturm:filepeek:0.1.1
|
com.christophsturm:filepeek:0.1.2
|
||||||
com.squareup.moshi:moshi:1.9.2
|
com.squareup.moshi:moshi:1.9.2
|
||||||
com.squareup.okio:okio:2.4.3
|
com.squareup.okio:okio:2.6.0
|
||||||
dev.minutest:minutest:1.10.0
|
dev.minutest:minutest:1.11.0
|
||||||
io.github.classgraph:classgraph:4.8.28
|
io.github.classgraph:classgraph:4.8.28
|
||||||
io.strikt:strikt-core:0.23.4
|
io.strikt:strikt-core:0.25.0
|
||||||
net.swiftzer.semver:semver:1.1.1
|
net.swiftzer.semver:semver:1.1.1
|
||||||
org.apiguardian:apiguardian-api:1.1.0
|
org.apiguardian:apiguardian-api:1.1.0
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.71
|
||||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.61
|
org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-test-common:1.3.61
|
org.jetbrains.kotlin:kotlin-test-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-test-junit5:1.3.61
|
org.jetbrains.kotlin:kotlin-test-junit5:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-test:1.3.61
|
org.jetbrains.kotlin:kotlin-test:1.3.70
|
||||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3
|
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.5
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
org.junit.jupiter:junit-jupiter-api:5.6.0
|
org.junit.jupiter:junit-jupiter-api:5.7.0-M1
|
||||||
org.junit.jupiter:junit-jupiter-engine:5.6.0
|
org.junit.jupiter:junit-jupiter-engine:5.7.0-M1
|
||||||
org.junit.jupiter:junit-jupiter-params:5.6.0
|
org.junit.jupiter:junit-jupiter-params:5.7.0-M1
|
||||||
org.junit.platform:junit-platform-commons:1.6.0
|
org.junit.platform:junit-platform-commons:1.7.0-M1
|
||||||
org.junit.platform:junit-platform-engine:1.6.0
|
org.junit.platform:junit-platform-engine:1.7.0-M1
|
||||||
org.junit.platform:junit-platform-launcher:1.6.0
|
org.junit.platform:junit-platform-launcher:1.7.0-M1
|
||||||
org.junit:junit-bom:5.6.0
|
org.junit:junit-bom:5.7.0-M1
|
||||||
org.opentest4j:opentest4j:1.2.0
|
org.opentest4j:opentest4j:1.2.0
|
||||||
|
|||||||
@@ -6,10 +6,11 @@ com.squareup.okio:okio:1.16.0
|
|||||||
org.apache.ivy:ivy:2.5.0
|
org.apache.ivy:ivy:2.5.0
|
||||||
org.apache.maven:maven-repository-metadata:3.6.3
|
org.apache.maven:maven-repository-metadata:3.6.3
|
||||||
org.codehaus.plexus:plexus-utils:3.2.1
|
org.codehaus.plexus:plexus-utils:3.2.1
|
||||||
org.gradle:gradle-tooling-api:6.1
|
org.gradle:gradle-tooling-api:6.3
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
org.slf4j:slf4j-api:1.7.28
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ com.squareup.okio:okio:1.16.0
|
|||||||
org.apache.ivy:ivy:2.5.0
|
org.apache.ivy:ivy:2.5.0
|
||||||
org.apache.maven:maven-repository-metadata:3.6.3
|
org.apache.maven:maven-repository-metadata:3.6.3
|
||||||
org.codehaus.plexus:plexus-utils:3.2.1
|
org.codehaus.plexus:plexus-utils:3.2.1
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ net.swiftzer.semver:semver:1.1.1
|
|||||||
org.apache.ivy:ivy:2.5.0
|
org.apache.ivy:ivy:2.5.0
|
||||||
org.apache.maven:maven-repository-metadata:3.6.3
|
org.apache.maven:maven-repository-metadata:3.6.3
|
||||||
org.codehaus.plexus:plexus-utils:3.2.1
|
org.codehaus.plexus:plexus-utils:3.2.1
|
||||||
org.jetbrains.kotlin:kotlin-reflect:1.3.61
|
org.jetbrains.kotlin:kotlin-reflect:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.70
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|
org.jetbrains.kotlin:kotlin-stdlib:1.3.70
|
||||||
org.jetbrains:annotations:13.0
|
org.jetbrains:annotations:13.0
|
||||||
|
|||||||
@@ -8,10 +8,12 @@ import org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.MAVEN_CENT
|
|||||||
import strikt.api.expectThat
|
import strikt.api.expectThat
|
||||||
import strikt.assertions.all
|
import strikt.assertions.all
|
||||||
import strikt.assertions.containsExactly
|
import strikt.assertions.containsExactly
|
||||||
|
import strikt.assertions.flatMap
|
||||||
import strikt.assertions.get
|
import strikt.assertions.get
|
||||||
import strikt.assertions.hasSize
|
import strikt.assertions.hasSize
|
||||||
import strikt.assertions.isEqualTo
|
import strikt.assertions.isEqualTo
|
||||||
import strikt.assertions.map
|
import strikt.assertions.map
|
||||||
|
import strikt.assertions.none
|
||||||
import strikt.assertions.startsWith
|
import strikt.assertions.startsWith
|
||||||
|
|
||||||
class BasicTest : JUnit5Minutests {
|
class BasicTest : JUnit5Minutests {
|
||||||
@@ -22,6 +24,12 @@ class BasicTest : JUnit5Minutests {
|
|||||||
expectThat(build()) {
|
expectThat(build()) {
|
||||||
get("gradle version") { gradle.version }.isEqualTo(System.getProperty("compat.gradle.version"))
|
get("gradle version") { gradle.version }.isEqualTo(System.getProperty("compat.gradle.version"))
|
||||||
|
|
||||||
|
get("all dependencies") {
|
||||||
|
pluginDependencies +
|
||||||
|
rootProject.buildscriptDependencies +
|
||||||
|
rootProject.projectDependencies
|
||||||
|
}.flatMap { it.urls }.none { startsWith("file:") }
|
||||||
|
|
||||||
get("root project dependencies") { rootProject.projectDependencies }.and {
|
get("root project dependencies") { rootProject.projectDependencies }.and {
|
||||||
ids.containsExactly(
|
ids.containsExactly(
|
||||||
"com.squareup.moshi:moshi:1.8.0@jar",
|
"com.squareup.moshi:moshi:1.8.0@jar",
|
||||||
@@ -47,5 +55,17 @@ class BasicTest : JUnit5Minutests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
withFixture("basic/basic-kotlin-project") {
|
||||||
|
test("excludes embedded kotlin repo") {
|
||||||
|
expectThat(build()) {
|
||||||
|
get("all dependencies") {
|
||||||
|
pluginDependencies +
|
||||||
|
rootProject.buildscriptDependencies +
|
||||||
|
rootProject.projectDependencies
|
||||||
|
}.flatMap { it.urls }.all { not { startsWith("file:") } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,9 @@ internal class ConfigurationResolverFactory(repositories: RepositoryHandler) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private val resolvers = repositories.filterIsInstance<ResolutionAwareRepository>()
|
private val resolvers = repositories
|
||||||
|
.filterIsInstance<ResolutionAwareRepository>()
|
||||||
|
.filterNot { it.createResolver().isLocal }
|
||||||
.mapNotNull { it.repositoryResolver(ivySettings) }
|
.mapNotNull { it.repositoryResolver(ivySettings) }
|
||||||
|
|
||||||
fun create(dependencies: DependencyHandler): ConfigurationResolver =
|
fun create(dependencies: DependencyHandler): ConfigurationResolver =
|
||||||
@@ -50,12 +52,12 @@ internal class ConfigurationResolver(
|
|||||||
private val ivy = Ivy.newInstance(ivySettings)
|
private val ivy = Ivy.newInstance(ivySettings)
|
||||||
|
|
||||||
fun resolve(configuration: Configuration): List<DefaultArtifact> {
|
fun resolve(configuration: Configuration): List<DefaultArtifact> {
|
||||||
val resolved = configuration.resolvedConfiguration
|
val resolved = configuration.resolvedConfiguration.lenientConfiguration
|
||||||
|
|
||||||
val topLevelMetadata = resolved.firstLevelModuleDependencies
|
val topLevelMetadata = resolved.firstLevelModuleDependencies
|
||||||
.flatMap { resolveMetadata(it.moduleGroup, it.moduleName, it.moduleVersion) }
|
.flatMap { resolveMetadata(it.moduleGroup, it.moduleName, it.moduleVersion) }
|
||||||
|
|
||||||
val allArtifacts = resolved.resolvedArtifacts
|
val allArtifacts = resolved.artifacts
|
||||||
.filter { it.id.componentIdentifier is ModuleComponentIdentifier }
|
.filter { it.id.componentIdentifier is ModuleComponentIdentifier }
|
||||||
.flatMap(::resolve)
|
.flatMap(::resolve)
|
||||||
|
|
||||||
@@ -203,7 +205,7 @@ internal class ConfigurationResolver(
|
|||||||
val seen = mutableSetOf<ComponentArtifactIdentifier>()
|
val seen = mutableSetOf<ComponentArtifactIdentifier>()
|
||||||
return generateSequence(listOf(this)) { descs ->
|
return generateSequence(listOf(this)) { descs ->
|
||||||
val parents = descs.flatMap { it.parentDescriptors(seen) }
|
val parents = descs.flatMap { it.parentDescriptors(seen) }
|
||||||
seen.addAll(parents.map(ResolvedArtifactResult::id))
|
seen.addAll(parents.map(ResolvedArtifactResult::getId))
|
||||||
parents.takeUnless { it.isEmpty() }
|
parents.takeUnless { it.isEmpty() }
|
||||||
}.flatten().distinct().toList()
|
}.flatten().distinct().toList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ private fun fetchDistSha256(url: String): String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val nativePlatformJarRegex = Regex("""native-platform-([\d.]+)\.jar""")
|
private val nativePlatformJarRegex = Regex("""native-platform-([\d.]+(-(alpha|beta|milestone)-\d+)?)\.jar""")
|
||||||
|
|
||||||
private val Wrapper.sha256: String
|
private val Wrapper.sha256: String
|
||||||
get() {
|
get() {
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ internal open class PluginResolver @Inject constructor(
|
|||||||
) {
|
) {
|
||||||
private val configurations = pluginDependencyResolutionServices.configurationContainer
|
private val configurations = pluginDependencyResolutionServices.configurationContainer
|
||||||
|
|
||||||
private val resolver = ConfigurationResolverFactory(pluginDependencyResolutionServices.resolveRepositoryHandler)
|
private val resolver = ConfigurationResolverFactory(
|
||||||
.create(pluginDependencyResolutionServices.dependencyHandler)
|
pluginDependencyResolutionServices.resolveRepositoryHandler
|
||||||
|
).create(pluginDependencyResolutionServices.dependencyHandler)
|
||||||
|
|
||||||
fun resolve(pluginRequests: List<PluginRequest>): List<DefaultArtifact> {
|
fun resolve(pluginRequests: List<PluginRequest>): List<DefaultArtifact> {
|
||||||
val markerDependencies = pluginRequests.map {
|
val markerDependencies = pluginRequests.map {
|
||||||
|
|||||||
Reference in New Issue
Block a user