Compare commits
57 commits
0.28.4-SNA
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
0f6c2a5dcc | ||
|
f0b0fb958d | ||
|
def5427840 | ||
|
1e5c4d236d | ||
|
8f84454a84 | ||
|
67ed50a36f | ||
|
3860531bd4 | ||
|
52c65b54c2 | ||
|
e403015a30 | ||
|
60c5efe19b | ||
|
a7fbf02d7e | ||
|
82016d213b | ||
|
db0dde6251 | ||
|
b08e201a03 | ||
|
32ae618fd6 | ||
|
d48206f88c | ||
|
c356ddf7e3 | ||
|
07f901cd67 | ||
|
967aeb325a | ||
|
e6ebb0f9f4 | ||
|
67d5ddbae9 | ||
|
74a7137f00 | ||
|
01f730f648 | ||
|
ba17b46a01 | ||
|
0e5e5cc800 | ||
|
e25a682b3e | ||
|
c9675f5adf | ||
|
d86a6785f6 | ||
|
2dcf2ebebc | ||
|
90c3818d4a | ||
|
331dcaed69 | ||
|
1db967f690 | ||
|
fd546c0a5c | ||
|
67b18318ca | ||
|
be217035f2 | ||
|
318384979c | ||
|
7e89a94009 | ||
|
86dadb56a7 | ||
|
ce5cd6a245 | ||
|
61ec4ddbb4 | ||
|
641f034580 | ||
|
03b9f694ef | ||
|
b3d2d79911 | ||
|
3802c8f5ea | ||
|
2a833797ab | ||
|
9d1ac64f97 | ||
|
dcaf528c6b | ||
|
b68da1cd4f | ||
|
95956159d2 | ||
|
75dc2cbada | ||
|
fda493091c | ||
|
94eaa0c32c | ||
|
a7e17ec309 | ||
|
0abb07c4df | ||
|
b647309675 | ||
|
b5b377aa6c | ||
|
7ecef1127d |
10 changed files with 443 additions and 260 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
__pycache__/
|
||||
.idea/
|
||||
.gradle/
|
||||
build/
|
42
README.md
42
README.md
|
@ -1,3 +1,45 @@
|
|||
This repo shows examples how dda-devops-build (https://repo.prod.meissa.de/meissa/dda-devops-build) can be used.
|
||||
As a starting point, you may want to have a look at file [build.py](build.py) in this repo
|
||||
and the tasks which are defined in this file.
|
||||
|
||||
# Usage
|
||||
|
||||
## Examples
|
||||
|
||||
### Build
|
||||
|
||||
You can trigger the build-task by
|
||||
```
|
||||
pyb dev
|
||||
```
|
||||
|
||||
### Releases
|
||||
|
||||
With task `patch` you can create a patch-level release with one command, i.e. perform the following actions:
|
||||
* create a commit for a patch-leve release version
|
||||
* e.g. if current project version is 1.1.1-dev, the update version will be the release version 1.1.1
|
||||
* the commit contains all build files specified in the build.py (primary as well as secondary build files),
|
||||
where the primary build file contains the version number to be used for all build files
|
||||
* create a tag for the release commit (e.g. tag 1.1.1 for the corresponding commit)
|
||||
* a second commit for the next snapshot version (1.1.2-dev)
|
||||
* push both commits and the tag to the remote git repo
|
||||
|
||||
```
|
||||
pyb patch
|
||||
```
|
||||
|
||||
Similarly you can create a minor or major version with:
|
||||
|
||||
```
|
||||
pyb minor
|
||||
```
|
||||
resp.
|
||||
```
|
||||
pyb major
|
||||
```
|
||||
|
||||
|
||||
|
||||
# Release Testing
|
||||
## NoRelease
|
||||
|
||||
|
|
254
build.gradle
254
build.gradle
|
@ -1,263 +1,13 @@
|
|||
buildscript {
|
||||
ext.kotlin_version = "1.7.22-SNAPSHOT"
|
||||
ext.CI_PROJECT_ID = System.env.CI_PROJECT_ID
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "org.jetbrains.kotlin.jvm" version "$kotlin_version"
|
||||
id 'org.jetbrains.kotlin.plugin.serialization' version "$kotlin_version"
|
||||
id "java"
|
||||
id "java-test-fixtures"
|
||||
}
|
||||
apply plugin: "maven-publish"
|
||||
|
||||
|
||||
version = "0.28.4-SNAPSHOT"
|
||||
group = "org.domaindrivenarchitecture.provs"
|
||||
version = "4.0.1-SNAPSHOT"
|
||||
group = "org.domaindrivenarchitecture.buildtest"
|
||||
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
|
||||
java {
|
||||
// https://stackoverflow.com/questions/21904269/configure-gradle-to-publish-sources-and-javadoc
|
||||
withSourcesJar()
|
||||
withJavadocJar()
|
||||
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(11)
|
||||
}
|
||||
}
|
||||
|
||||
jar {
|
||||
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
|
||||
}
|
||||
|
||||
|
||||
test {
|
||||
// set properties for the tests
|
||||
def propertiesForTests = ["testdockerwithoutsudo"]
|
||||
for (def prop : propertiesForTests) {
|
||||
def value = System.getProperty(prop)
|
||||
if (value != null) {
|
||||
systemProperty prop, value
|
||||
}
|
||||
}
|
||||
|
||||
useJUnitPlatform {
|
||||
def excludedTags = System.getProperty("excludeTags")
|
||||
if (System.getProperty("excludeTags") != null) {
|
||||
excludeTags(excludedTags.split(","))
|
||||
}
|
||||
if (System.getenv("CI_JOB_TOKEN") != null) {
|
||||
excludeTags("containernonci")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
compileJava.options.debugOptions.debugLevel = "source,lines,vars"
|
||||
compileTestFixturesJava.options.debugOptions.debugLevel = "source,lines,vars"
|
||||
compileTestJava.options.debugOptions.debugLevel = "source,lines,vars"
|
||||
|
||||
|
||||
dependencies {
|
||||
|
||||
api("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
|
||||
api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2")
|
||||
api("org.jetbrains.kotlinx:kotlinx-serialization-core:1.3.2")
|
||||
api("org.jetbrains.kotlinx:kotlinx-cli:0.3.4")
|
||||
|
||||
api('com.charleskorn.kaml:kaml:0.54.0')
|
||||
|
||||
api("org.slf4j:slf4j-api:1.7.36")
|
||||
api('ch.qos.logback:logback-classic:1.2.11')
|
||||
api('ch.qos.logback:logback-core:1.2.11')
|
||||
|
||||
implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
|
||||
implementation("com.hierynomus:sshj:0.32.0")
|
||||
|
||||
implementation("aws.sdk.kotlin:s3:0.17.1-beta")
|
||||
|
||||
testFixturesApi("org.junit.jupiter:junit-jupiter-api:5.8.2")
|
||||
testFixturesApi('io.mockk:mockk:1.12.3')
|
||||
|
||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.2")
|
||||
}
|
||||
|
||||
|
||||
tasks.register('uberjarDesktop', Jar) {
|
||||
|
||||
from sourceSets.main.output
|
||||
|
||||
dependsOn configurations.runtimeClasspath
|
||||
from {
|
||||
configurations.runtimeClasspath.findAll { it.name.endsWith("jar") }.collect { zipTree(it) }
|
||||
} {
|
||||
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
|
||||
exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA"
|
||||
}
|
||||
|
||||
manifest {
|
||||
attributes "Implementation-Title": "Uberjar of provs",
|
||||
"Implementation-Version": project.version,
|
||||
"Main-Class": "org.domaindrivenarchitecture.provs.desktop.application.ApplicationKt"
|
||||
}
|
||||
archiveFileName = "provs-desktop.jar"
|
||||
}
|
||||
|
||||
|
||||
tasks.register('uberjarServer', Jar) {
|
||||
|
||||
from sourceSets.main.output
|
||||
|
||||
dependsOn configurations.runtimeClasspath
|
||||
from {
|
||||
configurations.runtimeClasspath.findAll { it.name.endsWith("jar") }.collect { zipTree(it) }
|
||||
} {
|
||||
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
|
||||
exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA"
|
||||
}
|
||||
|
||||
manifest {
|
||||
attributes "Implementation-Title": "Uberjar of provs",
|
||||
"Implementation-Version": project.version,
|
||||
"Main-Class": "org.domaindrivenarchitecture.provs.server.application.ApplicationKt"
|
||||
}
|
||||
archiveFileName = "provs-server.jar"
|
||||
}
|
||||
|
||||
|
||||
tasks.register('uberjarSyspec', Jar) {
|
||||
|
||||
from sourceSets.main.output
|
||||
|
||||
dependsOn configurations.runtimeClasspath
|
||||
from {
|
||||
configurations.runtimeClasspath.findAll { it.name.endsWith("jar") }.collect { zipTree(it) }
|
||||
} {
|
||||
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
|
||||
exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA"
|
||||
}
|
||||
|
||||
manifest {
|
||||
attributes "Implementation-Title": "Uberjar of provs",
|
||||
"Implementation-Version": project.version,
|
||||
"Main-Class": "org.domaindrivenarchitecture.provs.syspec.application.ApplicationKt"
|
||||
}
|
||||
archiveFileName = "provs-syspec.jar"
|
||||
}
|
||||
def projectRoot = rootProject.projectDir
|
||||
|
||||
|
||||
// copy jar to /usr/local/bin and make it executable
|
||||
// Remark: to be able to use it you must have jarwrapper installed (sudo apt install jarwrapper)
|
||||
tasks.register('installlocally') {
|
||||
dependsOn(uberjarServer, uberjarDesktop, uberjarSyspec)
|
||||
doLast {
|
||||
exec { commandLine("sh", "-c", "sudo apt-get update & sudo apt-get install jarwrapper") }
|
||||
exec { commandLine("sh", "-c", "sudo cp $projectRoot/build/libs/provs-server.jar /usr/local/bin/") }
|
||||
exec { commandLine("sh", "-c", "sudo cp $projectRoot/build/libs/provs-desktop.jar /usr/local/bin/") }
|
||||
exec { commandLine("sh", "-c", "sudo cp $projectRoot/build/libs/provs-syspec.jar /usr/local/bin/") }
|
||||
exec { commandLine("sh", "-c", "sudo chmod 755 /usr/local/bin/provs-server.jar") }
|
||||
exec { commandLine("sh", "-c", "sudo chmod 755 /usr/local/bin/provs-desktop.jar") }
|
||||
exec { commandLine("sh", "-c", "sudo chmod 755 /usr/local/bin/provs-syspec.jar") }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// publish to repo.prod.meissa.de with task "publishLibraryPublicationToMeissaRepository" -- (using pattern "publishLibraryPublicationTo<MAVEN REPOSITORY NAME>Repository")
|
||||
publishing {
|
||||
publications {
|
||||
library(MavenPublication) {
|
||||
groupId 'org.domaindrivenarchitecture'
|
||||
artifactId 'provs'
|
||||
from components.java
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
name = "gitlab"
|
||||
url = "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/maven"
|
||||
credentials(HttpHeaderCredentials) {
|
||||
name = "Job-Token"
|
||||
value = System.getenv("CI_JOB_TOKEN")
|
||||
}
|
||||
authentication {
|
||||
header(HttpHeaderAuthentication)
|
||||
}
|
||||
}
|
||||
maven {
|
||||
name = "meissa"
|
||||
url = uri("https://repo.prod.meissa.de/api/packages/meissa/maven")
|
||||
|
||||
credentials(HttpHeaderCredentials) {
|
||||
name = "Authorization"
|
||||
if (System.getenv("CI_JOB_TOKEN") != null) {
|
||||
def tokenFromEnv = System.getenv("RELEASE_TOKEN")
|
||||
if (tokenFromEnv == null) {
|
||||
println "Error: RELEASE_TOKEN not found"
|
||||
} else {
|
||||
value = "token " + tokenFromEnv
|
||||
println "RELEASE_TOKEN found - "
|
||||
}
|
||||
} else {
|
||||
// use project-property (define e.g. in "~/.gradle/gradle.properties") when not running in ci
|
||||
// you can create a token in gitea "Profile and Settings ... > Settings > Applications", Token Name, Select scopes (write:package) > "Generate Token"
|
||||
if (!project.hasProperty("RELEASE_TOKEN")) {
|
||||
// if RELEASE_TOKEN is missing, provide a dummy in order to avoid error "Could not get unknown property 'RELEASE_TOKEN' for Credentials [header: Authorization]" for other gradle tasks
|
||||
ext.RELEASE_TOKEN = "RELEASE_TOKEN not provided in file \".gradle/gradle.properties\""
|
||||
println "Error: RELEASE_TOKEN not found"
|
||||
}
|
||||
value = "token $RELEASE_TOKEN"
|
||||
}
|
||||
}
|
||||
|
||||
authentication {
|
||||
header(HttpHeaderAuthentication)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
tasks.register('createReleaseAndUploadAssets') {
|
||||
dependsOn(uberjarServer, uberjarDesktop, uberjarSyspec)
|
||||
doLast {
|
||||
|
||||
def token = project.properties.get("RELEASE_TOKEN") ?: System.getenv("RELEASE_TOKEN")
|
||||
if (token == null) {
|
||||
throw new GradleException('No token found.')
|
||||
}
|
||||
|
||||
def output1 = new ByteArrayOutputStream()
|
||||
exec {
|
||||
standardOutput = output1
|
||||
def TAG = project.version
|
||||
commandLine("sh", "-c", "curl -X 'POST' 'https://repo.prod.meissa.de/api/v1/repos/meissa/provs/releases' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{ \"body\": \"Provides jar-files for release $TAG\\nAttention: The \\\"Source Code\\\"-files below are not up-to-date!\", \"tag_name\": \"$TAG\" }' -H \"Authorization: token $token\"")
|
||||
}
|
||||
|
||||
def matches = output1 =~ /\{"id":(\d+?),/
|
||||
if (!matches) {
|
||||
throw new GradleException('id of release could not be parsed in: ' + output1)
|
||||
}
|
||||
|
||||
def releaseId = matches.group(1)
|
||||
println "Release=$releaseId"
|
||||
|
||||
def releaseApiUrl = "https://repo.prod.meissa.de/api/v1/repos/meissa/provs/releases"
|
||||
exec { commandLine("sh", "-c", "find build/libs/ -type f -exec sha256sum {} \\; | sort > build/libs/sha256sum.lst") }
|
||||
exec { commandLine("sh", "-c", "find build/libs/ -type f -exec sha512sum {} \\; | sort > build/libs/sha512sum.lst") }
|
||||
exec { commandLine("sh", "-c", "curl -X 'POST' '$releaseApiUrl/$releaseId/assets' -H 'accept: application/json' -H \"Authorization: token $token\" -H 'Content-Type: multipart/form-data' -F 'attachment=@build/libs/provs-desktop.jar;type=application/x-java-archive'") }
|
||||
exec { commandLine("sh", "-c", "curl -X 'POST' '$releaseApiUrl/$releaseId/assets' -H 'accept: application/json' -H \"Authorization: token $token\" -H 'Content-Type: multipart/form-data' -F 'attachment=@build/libs/provs-server.jar;type=application/x-java-archive'") }
|
||||
exec { commandLine("sh", "-c", "curl -X 'POST' '$releaseApiUrl/$releaseId/assets' -H 'accept: application/json' -H \"Authorization: token $token\" -H 'Content-Type: multipart/form-data' -F 'attachment=@build/libs/provs-syspec.jar;type=application/x-java-archive'") }
|
||||
exec { commandLine("sh", "-c", "curl -X 'POST' '$releaseApiUrl/$releaseId/assets' -H 'accept: application/json' -H \"Authorization: token $token\" -H 'Content-Type: multipart/form-data' -F 'attachment=@build/libs/sha256sum.lst;type=text/plain'") }
|
||||
exec { commandLine("sh", "-c", "curl -X 'POST' '$releaseApiUrl/$releaseId/assets' -H 'accept: application/json' -H \"Authorization: token $token\" -H 'Content-Type: multipart/form-data' -F 'attachment=@build/libs/sha512sum.lst;type=text/plain'") }
|
||||
}
|
||||
}
|
||||
|
|
54
build.py
54
build.py
|
@ -1,3 +1,4 @@
|
|||
import os
|
||||
from os import environ
|
||||
from pybuilder.core import task, init
|
||||
from ddadevops import *
|
||||
|
@ -6,10 +7,29 @@ name = "buildtest"
|
|||
MODULE = "release"
|
||||
PROJECT_ROOT_PATH = "."
|
||||
|
||||
version = "1.7.22-dev"
|
||||
version = "4.0.1-dev"
|
||||
|
||||
|
||||
@init
|
||||
def initialize(project):
|
||||
def initialize0(project):
|
||||
"""
|
||||
to avoid prompt for gopass if no artifacts need to be uploaded
|
||||
usage: with option "-E ng" , e.g. "pyb -E artifacts patch_local"
|
||||
"""
|
||||
os.environ["RELEASE_ARTIFACT_TOKEN"] = "dummy" # avoids prompt for RELEASE_ARTIFACT_TOKEN
|
||||
|
||||
|
||||
@init(environments=["artifacts"])
|
||||
def initialize1(project):
|
||||
"""
|
||||
prompt for gopass if no artifacts need to be uploaded
|
||||
usage: with option "-E artifacts" , e.g. "pyb -E artifacts patch_local"
|
||||
"""
|
||||
del os.environ["RELEASE_ARTIFACT_TOKEN"]
|
||||
|
||||
|
||||
@init
|
||||
def initialize2(project):
|
||||
input = {
|
||||
"name": name,
|
||||
"module": MODULE,
|
||||
|
@ -17,34 +37,55 @@ def initialize(project):
|
|||
"project_root_path": PROJECT_ROOT_PATH,
|
||||
"build_types": [],
|
||||
"mixin_types": ["RELEASE"],
|
||||
"release_primary_build_file": "build.gradle",
|
||||
"release_secondary_build_files": ["build.py"],
|
||||
"release_primary_build_file": "build_to_test.py",
|
||||
"release_secondary_build_files": ["package.json", "project.clj", "build.gradle", "build.py"],
|
||||
"release_artifacts": ["README.md"],
|
||||
"release_artifact_server_url": "https://repo.prod.meissa.de",
|
||||
"release_organisation": "meissa",
|
||||
"release_repository_name": name,
|
||||
}
|
||||
|
||||
project.build_depends_on("ddadevops>=4.7.0")
|
||||
|
||||
project.build_depends_on("ddadevops>=4.10.7")
|
||||
build = ReleaseMixin(project, input)
|
||||
build.initialize_build_dir()
|
||||
|
||||
|
||||
@task
|
||||
def patch(project):
|
||||
"""
|
||||
updates version to next patch level, creates a tag, creates new SNAPSHOT version,
|
||||
commits build files (primary and secondary) and pushes to remote
|
||||
"""
|
||||
linttest(project, "PATCH")
|
||||
release(project)
|
||||
|
||||
|
||||
@task
|
||||
def patch_local(project):
|
||||
"""
|
||||
updates version to next patch level,
|
||||
commits build files (primary and secondary), DOES NOT push to remote
|
||||
"""
|
||||
linttest(project, "PATCH")
|
||||
prepare(project)
|
||||
|
||||
|
||||
@task
|
||||
def minor(project):
|
||||
"""
|
||||
updates version to next minor level, creates a tag, creates new SNAPSHOT version,
|
||||
commits build files (primary and secondary) and pushes to remote
|
||||
"""
|
||||
linttest(project, "MINOR")
|
||||
release(project)
|
||||
|
||||
|
||||
@task
|
||||
def major(project):
|
||||
"""
|
||||
updates version to next major level, creates a tag, creates new SNAPSHOT version,
|
||||
commits build files (primary and secondary) and pushes to remote
|
||||
"""
|
||||
linttest(project, "MAJOR")
|
||||
release(project)
|
||||
|
||||
|
@ -68,6 +109,7 @@ def tag(project):
|
|||
|
||||
@task
|
||||
def publish_artifacts(project):
|
||||
""" creates a release in <release_artifact_server_url> and uploads artifacts """
|
||||
build = get_devops_build(project)
|
||||
print("PROTECTED_TOKEN_EXAMPLE" in environ)
|
||||
print(environ.get("PROTECTED_TOKEN_EXAMPLE"))
|
||||
|
|
|
@ -33,7 +33,7 @@ default_task = "dev"
|
|||
name = "ddadevops"
|
||||
MODULE = "not-used"
|
||||
PROJECT_ROOT_PATH = "."
|
||||
version = "3.3.2-dev"
|
||||
version = "4.0.1-dev"
|
||||
summary = "tools to support builds combining gopass, terraform, dda-pallet, aws & hetzner-cloud"
|
||||
description = __doc__
|
||||
authors = [Author("meissa GmbH", "buero@meissa-gmbh.de")]
|
||||
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
7
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
7
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
249
gradlew
vendored
Executable file
249
gradlew
vendored
Executable file
|
@ -0,0 +1,249 @@
|
|||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
if ! command -v java >/dev/null 2>&1
|
||||
then
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
92
gradlew.bat
vendored
Normal file
92
gradlew.bat
vendored
Normal file
|
@ -0,0 +1,92 @@
|
|||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
|
@ -2,7 +2,7 @@
|
|||
"name": "c4k-jira",
|
||||
"description": "Generate c4k yaml for a jira deployment.",
|
||||
"author": "meissa GmbH",
|
||||
"version": "3.3.2-dev",
|
||||
"version": "4.0.1-SNAPSHOT",
|
||||
"homepage": "https://gitlab.com/domaindrivenarchitecture/c4k-jira#readme",
|
||||
"repository": "https://www.npmjs.com/package/c4k-jira",
|
||||
"license": "APACHE2",
|
||||
|
|
Loading…
Reference in a new issue