From 92eaf175fa43bbe675fe94764e9be9fb9c7d570d Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Fri, 27 Sep 2024 14:31:11 +0200 Subject: [PATCH 01/33] upgrade Gradle to 8.10.2 --- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 ++++- gradlew.bat | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 12612 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 HJ4oML2Lo<@i8BwbL^1~GkG`E7C$SEa_ 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a441313..df97d72 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf1..f5feea6 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # 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 +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30d..9d21a21 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## From 8821c8fb104b8f115fa42a750a2ee97ca1aa2f79 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Fri, 27 Sep 2024 14:27:57 +0200 Subject: [PATCH 02/33] update Kotlin to 1.9.24 and API version to 1.8 --- build.gradle.kts | 7 ++--- buildscript-gradle.lockfile | 58 ++++++++++++++++++------------------- gradle.lockfile | 40 ++++++++++++------------- gradle.properties | 2 ++ settings.gradle.kts | 5 ++++ 5 files changed, 58 insertions(+), 54 deletions(-) create mode 100644 gradle.properties diff --git a/build.gradle.kts b/build.gradle.kts index b3944f6..4fb1f60 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,16 +11,15 @@ buildscript { } } -val kotlinApiVersion by extra { "1.7" } -val kotlinVersion by extra { "$kotlinApiVersion.10" } - +val kotlinApiVersion: String by project +val kotlinVersion: String by project plugins { groovy `java-gradle-plugin` `kotlin-dsl` `maven-publish` - kotlin("jvm") version "1.7.10" + kotlin("jvm") id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.13.2" } diff --git a/buildscript-gradle.lockfile b/buildscript-gradle.lockfile index 77a8d73..757eb29 100644 --- a/buildscript-gradle.lockfile +++ b/buildscript-gradle.lockfile @@ -2,36 +2,36 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. com.googlecode.java-diff-utils:diffutils:1.3.0=classpath -org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:4.3.1=classpath -org.gradle.kotlin:gradle-kotlin-dsl-plugins:4.3.1=classpath +org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:4.5.0=classpath +org.gradle.kotlin:gradle-kotlin-dsl-plugins:4.5.0=classpath org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath -org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.7.10=classpath -org.jetbrains.kotlin:kotlin-android-extensions:1.9.22=classpath -org.jetbrains.kotlin:kotlin-assignment:1.9.22=classpath -org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=classpath -org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=classpath -org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=classpath -org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=classpath -org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.22=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.22=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.22=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.22=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.22=classpath -org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22=classpath -org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.22=classpath -org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.22=classpath -org.jetbrains.kotlin:kotlin-native-utils:1.9.22=classpath -org.jetbrains.kotlin:kotlin-project-model:1.9.22=classpath -org.jetbrains.kotlin:kotlin-sam-with-receiver:1.9.22=classpath -org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=classpath -org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=classpath -org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=classpath -org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=classpath -org.jetbrains.kotlin:kotlin-stdlib:1.9.22=classpath -org.jetbrains.kotlin:kotlin-tooling-core:1.9.22=classpath -org.jetbrains.kotlin:kotlin-util-io:1.9.22=classpath -org.jetbrains.kotlin:kotlin-util-klib:1.9.22=classpath +org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.9.24=classpath +org.jetbrains.kotlin:kotlin-android-extensions:1.9.24=classpath +org.jetbrains.kotlin:kotlin-assignment:1.9.24=classpath +org.jetbrains.kotlin:kotlin-build-tools-api:1.9.24=classpath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.24=classpath +org.jetbrains.kotlin:kotlin-compiler-runner:1.9.24=classpath +org.jetbrains.kotlin:kotlin-daemon-client:1.9.24=classpath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.24=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.24=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.24=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.24=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.24=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.24=classpath +org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.24=classpath +org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.24=classpath +org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.24=classpath +org.jetbrains.kotlin:kotlin-native-utils:1.9.24=classpath +org.jetbrains.kotlin:kotlin-project-model:1.9.24=classpath +org.jetbrains.kotlin:kotlin-sam-with-receiver:1.9.24=classpath +org.jetbrains.kotlin:kotlin-scripting-common:1.9.24=classpath +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.24=classpath +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.24=classpath +org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.24=classpath +org.jetbrains.kotlin:kotlin-stdlib:1.9.24=classpath +org.jetbrains.kotlin:kotlin-tooling-core:1.9.24=classpath +org.jetbrains.kotlin:kotlin-util-io:1.9.24=classpath +org.jetbrains.kotlin:kotlin-util-klib:1.9.24=classpath org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.13.2=classpath org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2=classpath org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath diff --git a/gradle.lockfile b/gradle.lockfile index 1c904a4..d8a7a6d 100644 --- a/gradle.lockfile +++ b/gradle.lockfile @@ -6,26 +6,24 @@ junit:junit:4.13.2=testCompileClasspath,testImplementationDependenciesMetadata,t net.swiftzer.semver:semver:1.1.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.hamcrest:hamcrest-core:1.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath -org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.22=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest -org.jetbrains.kotlin:kotlin-build-common:1.9.22=kotlinBuildToolsApiClasspath -org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=kotlinBuildToolsApiClasspath -org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.22=kotlinBuildToolsApiClasspath -org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath -org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=kotlinBuildToolsApiClasspath -org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=kotlinBuildToolsApiClasspath -org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath -org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.22=kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-build-common:1.9.24=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-api:1.9.24=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.24=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.24=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-compiler-runner:1.9.24=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-client:1.9.24=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.24=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.24=kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath -org.jetbrains.kotlin:kotlin-reflect:1.9.22=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath -org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.22=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest -org.jetbrains.kotlin:kotlin-script-runtime:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath -org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest -org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest -org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest -org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest -org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10=implementationDependenciesMetadata,runtimeClasspath -org.jetbrains.kotlin:kotlin-stdlib:1.7.10=implementationDependenciesMetadata,runtimeClasspath -org.jetbrains.kotlin:kotlin-stdlib:1.9.22=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-reflect:1.9.24=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-script-runtime:1.9.24=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-scripting-common:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-stdlib:1.9.24=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath -org.jetbrains:annotations:13.0=compileClasspath,embeddedKotlin,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -empty=annotationProcessor,apiDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,mps,runtimeOnlyDependenciesMetadata,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions,testRuntimeOnlyDependenciesMetadata +org.jetbrains:annotations:13.0=compileClasspath,embeddedKotlin,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +empty=annotationProcessor,apiDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,mps,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..3876028 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +kotlinApiVersion=1.8 +kotlinVersion=1.9.24 \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index a400c38..4ecce1c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,10 @@ pluginManagement { includeBuild("git-based-versioning") + + val kotlinVersion: String by settings + plugins { + kotlin("jvm") version "$kotlinVersion" + } } plugins { From 2a6ba42d1faa25adc546650159c95f7f7b890918 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Fri, 27 Sep 2024 15:46:26 +0200 Subject: [PATCH 03/33] update the Kotlin DSL to 4.5.0 --- build.gradle.kts | 2 +- gradle.lockfile | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4fb1f60..c70fdb1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ val kotlinVersion: String by project plugins { groovy `java-gradle-plugin` - `kotlin-dsl` + `kotlin-dsl` version "4.5.0" `maven-publish` kotlin("jvm") id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.13.2" diff --git a/gradle.lockfile b/gradle.lockfile index d8a7a6d..bbaa6ab 100644 --- a/gradle.lockfile +++ b/gradle.lockfile @@ -1,9 +1,10 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -de.itemis.mps.build-backends:launcher:2.4.0.95.a261d1d=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +de.itemis.mps.build-backends:launcher:2.5.2.107.def8e1d=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath junit:junit:4.13.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath -net.swiftzer.semver:semver:1.1.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +net.swiftzer.semver:semver-jvm:2.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.swiftzer.semver:semver:2.0.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.hamcrest:hamcrest-core:1.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest @@ -15,6 +16,7 @@ org.jetbrains.kotlin:kotlin-compiler-runner:1.9.24=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-client:1.9.24=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.24=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.24=kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.20=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-reflect:1.9.24=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest @@ -23,7 +25,11 @@ org.jetbrains.kotlin:kotlin-scripting-common:1.9.24=kotlinCompilerPluginClasspat org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.24=implementationDependenciesMetadata,runtimeClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:1.9.24=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.3=runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.3=runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.3=implementationDependenciesMetadata,runtimeClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains:annotations:13.0=compileClasspath,embeddedKotlin,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor,apiDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,mps,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions From 143fbe471e070de4bdfad723ca9cbcabaa339999 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Fri, 27 Sep 2024 16:04:59 +0200 Subject: [PATCH 04/33] update binary-compatibility-validator to 0.14.0 --- build.gradle.kts | 2 +- buildscript-gradle.lockfile | 10 +++++----- gradle.lockfile | 6 +++++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c70fdb1..1d3bed4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { `kotlin-dsl` version "4.5.0" `maven-publish` kotlin("jvm") - id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.13.2" + id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.14.0" } val baseVersion = "1.28.0" diff --git a/buildscript-gradle.lockfile b/buildscript-gradle.lockfile index 757eb29..386d22d 100644 --- a/buildscript-gradle.lockfile +++ b/buildscript-gradle.lockfile @@ -1,7 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.googlecode.java-diff-utils:diffutils:1.3.0=classpath +io.github.java-diff-utils:java-diff-utils:4.12=classpath org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:4.5.0=classpath org.gradle.kotlin:gradle-kotlin-dsl-plugins:4.5.0=classpath org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath @@ -32,11 +32,11 @@ org.jetbrains.kotlin:kotlin-stdlib:1.9.24=classpath org.jetbrains.kotlin:kotlin-tooling-core:1.9.24=classpath org.jetbrains.kotlin:kotlin-util-io:1.9.24=classpath org.jetbrains.kotlin:kotlin-util-klib:1.9.24=classpath -org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.13.2=classpath -org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2=classpath +org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.14.0=classpath +org.jetbrains.kotlinx:binary-compatibility-validator:0.14.0=classpath org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.6.2=classpath org.jetbrains:annotations:13.0=classpath -org.ow2.asm:asm-tree:9.2=classpath -org.ow2.asm:asm:9.2=classpath +org.ow2.asm:asm-tree:9.6=classpath +org.ow2.asm:asm:9.6=classpath empty= diff --git a/gradle.lockfile b/gradle.lockfile index bbaa6ab..3d63946 100644 --- a/gradle.lockfile +++ b/gradle.lockfile @@ -16,6 +16,7 @@ org.jetbrains.kotlin:kotlin-compiler-runner:1.9.24=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-client:1.9.24=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.24=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.24=kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-metadata-jvm:2.0.0=bcv-rt-jvm-cp-resolver org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.20=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-reflect:1.9.24=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath @@ -27,9 +28,12 @@ org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.24=kotlinComp org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.24=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-stdlib-common:1.9.24=implementationDependenciesMetadata,runtimeClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:1.9.24=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:2.0.0=bcv-rt-jvm-cp-resolver org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.3=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.3=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.3=implementationDependenciesMetadata,runtimeClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath -org.jetbrains:annotations:13.0=compileClasspath,embeddedKotlin,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.jetbrains:annotations:13.0=bcv-rt-jvm-cp-resolver,compileClasspath,embeddedKotlin,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.ow2.asm:asm-tree:9.6=bcv-rt-jvm-cp-resolver +org.ow2.asm:asm:9.6=bcv-rt-jvm-cp-resolver empty=annotationProcessor,apiDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,mps,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions From c1df9c266bb99673b3cdde7546baa0af7f80c86c Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Fri, 27 Sep 2024 16:13:34 +0200 Subject: [PATCH 05/33] set de.itemis.mps.build-backends:launcher to 2.5+ --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1d3bed4..8d7c031 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -60,7 +60,7 @@ dependencies { api("de.itemis.mps.gradle:git-based-versioning") implementation(kotlin("stdlib", version = kotlinVersion)) implementation("net.swiftzer.semver:semver:1.1.2") - implementation("de.itemis.mps.build-backends:launcher:2.4.0.+") + implementation("de.itemis.mps.build-backends:launcher:2.5.+") testImplementation("junit:junit:4.13.2") } From d5e9faa912456b5f28c81350ad2d19aa59d4bbf2 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Fri, 27 Sep 2024 16:14:02 +0200 Subject: [PATCH 06/33] update net.swiftzer.semver:semver to 2.0.0 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8d7c031..1c998a6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -59,7 +59,7 @@ dependencyLocking { dependencies { api("de.itemis.mps.gradle:git-based-versioning") implementation(kotlin("stdlib", version = kotlinVersion)) - implementation("net.swiftzer.semver:semver:1.1.2") + implementation("net.swiftzer.semver:semver:2.0.0") implementation("de.itemis.mps.build-backends:launcher:2.5.+") testImplementation("junit:junit:4.13.2") } From d3c6d1c7a4b63a240f741d71a17638c28779c6ff Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Fri, 27 Sep 2024 21:16:21 +0200 Subject: [PATCH 07/33] update org.jetbrains.kotlinx.binary-compatibility-validator to 0.16.3 --- build.gradle.kts | 2 +- buildscript-gradle.lockfile | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1c998a6..da97f57 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { `kotlin-dsl` version "4.5.0" `maven-publish` kotlin("jvm") - id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.14.0" + id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.16.3" } val baseVersion = "1.28.0" diff --git a/buildscript-gradle.lockfile b/buildscript-gradle.lockfile index 386d22d..da11ca4 100644 --- a/buildscript-gradle.lockfile +++ b/buildscript-gradle.lockfile @@ -32,11 +32,8 @@ org.jetbrains.kotlin:kotlin-stdlib:1.9.24=classpath org.jetbrains.kotlin:kotlin-tooling-core:1.9.24=classpath org.jetbrains.kotlin:kotlin-util-io:1.9.24=classpath org.jetbrains.kotlin:kotlin-util-klib:1.9.24=classpath -org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.14.0=classpath -org.jetbrains.kotlinx:binary-compatibility-validator:0.14.0=classpath +org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.16.3=classpath +org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3=classpath org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath -org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.6.2=classpath org.jetbrains:annotations:13.0=classpath -org.ow2.asm:asm-tree:9.6=classpath -org.ow2.asm:asm:9.6=classpath empty= From 46e8ad3b7a9a4b7aa96dcc48db84c9a08beb1f85 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 10:48:36 +0200 Subject: [PATCH 08/33] add an extension for setting the CI flag --- .../kotlin/de/itemis/mps/gradle/common.gradle.kts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index d296f72..c4ef90b 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -27,3 +27,17 @@ configurations.create(BackendConfigurations.REMIGRATE_BACKEND_CONFIGURATION_NAME add(project.dependencies.create("de.itemis.mps.build-backends:remigrate:[0,2)")) } } + +extensions.create("ci", project) + +abstract class CI(val _project: Project) { + fun determineCI() { + if(System.getenv("CI").toBoolean()) { + _project.extra["ciBuild"] = true + } else{ + _project.extra["ciBuild"] = _project.hasProperty("teamcity") + } + } + + fun isCI() = _project.extra["ciBuild"] +} \ No newline at end of file From 90f076982909fb4755e646444ab8adb82fc558df Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 10:49:50 +0200 Subject: [PATCH 09/33] add a class for representing an MPS version --- .../kotlin/de/itemis/mps/gradle/Common.kt | 25 ++++++++++++++++ .../de/itemis/mps/gradle/common.gradle.kts | 30 ++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/Common.kt b/src/main/kotlin/de/itemis/mps/gradle/Common.kt index 94783ce..f060bb4 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/Common.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/Common.kt @@ -112,3 +112,28 @@ fun BasePluginExtensions.getMPSVersion(extensionName: String): String { // Otherwise, the version has to be provided explicitly. throw GradleException(ErrorMessages.mustSetVersionWhenNoMpsConfiguration(extensionName)) } + +class MPSVersion( + var major: String, + var minor: String, + var releaseType: String? = null) { + + private fun appendOpt(str: String?, pre: String): String { + return if (!str.isNullOrEmpty()) "${pre}${str}" else "" + } + + private fun substringBefore(text: String, substring: String):String? { + val i: Int = text.indexOf(substring) + if (i == -1) return null + return text.substring(0, i) + } + + fun minorMainPart(): String { + val value = substringBefore(minor, ".") + return value ?: minor + } + + override fun toString(): String { + return major + appendOpt(minor, ".") + appendOpt(releaseType, "-") + } +} diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index c4ef90b..6c408f0 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -40,4 +40,32 @@ abstract class CI(val _project: Project) { } fun isCI() = _project.extra["ciBuild"] -} \ No newline at end of file +} + +extensions.create("java", project) + +abstract class Java(val _project: Project) { + fun determineCI() { + if(System.getenv("CI").toBoolean()) { + _project.extra["ciBuild"] = true + } else{ + _project.extra["ciBuild"] = _project.hasProperty("teamcity") + } + } + + fun isCI() = _project.extra["ciBuild"] +} + +extensions.create("itemis",buildscript) + +abstract class Itemis(val bs: ScriptHandler) { + fun nexus() { + bs.repositories { + apply { maven("https://artifacts.itemis.cloud/repository/maven-mps/") } + } + return + } + + +} + From b8fcba532500b182af8e29b555700198cacab704 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 11:05:53 +0200 Subject: [PATCH 10/33] add an extension for determining the JDK --- .../de/itemis/mps/gradle/common.gradle.kts | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 6c408f0..a54515b 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -42,18 +42,31 @@ abstract class CI(val _project: Project) { fun isCI() = _project.extra["ciBuild"] } -extensions.create("java", project) +extensions.create("jdk", project) -abstract class Java(val _project: Project) { - fun determineCI() { - if(System.getenv("CI").toBoolean()) { - _project.extra["ciBuild"] = true - } else{ - _project.extra["ciBuild"] = _project.hasProperty("teamcity") +abstract class JDK(val _project: Project) { + fun determine(javaVersion: JavaVersion) { + if (_project.extra.has("java${javaVersion}_home")) { + _project.extra["jdk_home"] = _project.extra.get("java${javaVersion}_home") + } else if (System.getenv("JB_JAVA${javaVersion}_HOME") != null) { + _project.extra["jdk_home"] = System.getenv("JB_JAVA${javaVersion}_HOME") + } else { + if (JavaVersion.current() != javaVersion) { + throw GradleException("This build script requires Java ${javaVersion} but you are currently using ${JavaVersion.current()}.\nWhat you can do:\n" + + " * Use project property java${javaVersion}_home to point to the Java ${javaVersion} JDK.\n" + + " * Use environment variable JB_JAVA${javaVersion}_HOME to point to the Java ${javaVersion} JDK\n" + + " * Run Gradle using Java ${javaVersion}") + } + _project.extra["jdk_home"] = System.getProperty("java.home") } - } - fun isCI() = _project.extra["ciBuild"] + val jdk_home = _project.extra["jdk_home"] + // Check JDK location + if (!File(jdk_home.toString(), "lib").exists()) { + throw GradleException("Unable to locate JDK home folder. Detected folder is: ${jdk_home}") + } + _project.logger.info("Using JDK at ${jdk_home}") + } } extensions.create("itemis",buildscript) From 2afc0d65b80d5c5c5a97778b70123d13f1170611 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 11:10:35 +0200 Subject: [PATCH 11/33] add an extension with links for the mbeddr github and itemis nexus repository --- src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index a54515b..37db5c1 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -71,6 +71,14 @@ abstract class JDK(val _project: Project) { extensions.create("itemis",buildscript) +abstract class Itemis(val bs: ScriptHandler) { + fun mbeddrGitHub() = "https://maven.pkg.github.com/mbeddr/*" + fun itemisNexus() = "https://artifacts.itemis.cloud/repository/maven-mps/" +} + +/* +extensions.create("itemis",buildscript) + abstract class Itemis(val bs: ScriptHandler) { fun nexus() { bs.repositories { From 1b8afc3c8b618da19cbf88521938c3e47a36047c Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 11:25:27 +0200 Subject: [PATCH 12/33] create the mps, languageLibs and antLib configuration automatically --- .../kotlin/de/itemis/mps/gradle/common.gradle.kts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 37db5c1..aa00c1e 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -76,6 +76,18 @@ abstract class Itemis(val bs: ScriptHandler) { fun itemisNexus() = "https://artifacts.itemis.cloud/repository/maven-mps/" } +project.configurations.create("mps") { + description = "The MPS dependencies configuration" +} + +project.configurations.create("languageLibs") { + description = "The language dependencies configuration" +} + +project.configurations.create("antLib") { + description = "The JUnit dependencies configuration" +} + /* extensions.create("itemis",buildscript) From 444eb9a894685c9ff72a4d2c3b0be5e2f70bc7c1 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 11:44:41 +0200 Subject: [PATCH 13/33] set MPS home dir and create the resolveMPS task --- .../de/itemis/mps/gradle/common.gradle.kts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index aa00c1e..b254da4 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -88,6 +88,24 @@ project.configurations.create("antLib") { description = "The JUnit dependencies configuration" } +project.extra["skipResolveMps"] = project.hasProperty("mpsHomeDir") +project.extra["mpsHomeDir"] = rootProject.file(project.findProperty("mpsHomeDir") ?: "${layout.buildDirectory.toString()}/mps") + +if (project.extra["skipResolveMps"].toString().toBoolean()) { + tasks.register("resolveMps") { + doLast { + logger.info("MPS resolution skipped") + logger.info("MPS home: " + (project.extra["mpsHomeDir"] as File).absolutePath) + } + } +} else { + tasks.register("resolveMps") { + dependsOn(configurations.getByName("mps")) + from(configurations.getByName("mps").resolve().map { zipTree(it) }) + project.extra["mpsHomeDir"]?.let { into(it) } + } +} + /* extensions.create("itemis",buildscript) From 8100dbb5b6c0fa99429ff087a7aa69ed6bde85dc Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 11:51:39 +0200 Subject: [PATCH 14/33] apply plugin base and create a cleanMPS task --- .../de/itemis/mps/gradle/common.gradle.kts | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index b254da4..4109ea2 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -5,6 +5,10 @@ package de.itemis.mps.gradle * ([RunAntScript], [BuildLanguages], etc.) onto the classpath. */ +plugins { + id("base") +} + val modelcheckBackend = configurations.create(BackendConfigurations.MODELCHECK_BACKEND_CONFIGURATION_NAME) val generateBackend = configurations.create(BackendConfigurations.GENERATE_BACKEND_CONFIGURATION_NAME) val executeBackend = configurations.create(BackendConfigurations.EXECUTE_BACKEND_CONFIGURATION_NAME) @@ -106,6 +110,17 @@ if (project.extra["skipResolveMps"].toString().toBoolean()) { } } +tasks.register("cleanMps") { + delete(fileTree(mapOf( + "dir" to projectDir, + "include" to listOf("**/classes_gen/**", "**/source_gen/**", "**/source_gen.caches/**", "tmp/**") + ))) +} + +tasks.named("clean") { + dependsOn("cleanMPS") +} + /* extensions.create("itemis",buildscript) @@ -115,8 +130,7 @@ abstract class Itemis(val bs: ScriptHandler) { apply { maven("https://artifacts.itemis.cloud/repository/maven-mps/") } } return - } - - + } } + */ From e2a59d5138457a03adf2bc7961c2846beedf41ae Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 12:07:38 +0200 Subject: [PATCH 15/33] provide an extension for the GitHub user and token --- src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 4109ea2..c86f6be 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -121,6 +121,13 @@ tasks.named("clean") { dependsOn("cleanMPS") } +extensions.create("githubAuth", project) + +abstract class GitHubAuth(val _project: Project) { + val user = _project.findProperty("github_username") ?: System.getenv("GITHUB_ACTOR") + val token = _project.findProperty("github_token") ?: System.getenv("GITHUB_TOKEN") +} + /* extensions.create("itemis",buildscript) From b003355920b3b7f3b4a8218ec775db16176e8bb5 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 12:11:49 +0200 Subject: [PATCH 16/33] provide a method ci.buildNumber() --- src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index c86f6be..89e514f 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -44,6 +44,8 @@ abstract class CI(val _project: Project) { } fun isCI() = _project.extra["ciBuild"] + + fun buildNumber() = System.getenv("GITHUB_RUN_NUMBER").toIntOrNull() ?: System.getenv("BUILD_NUMBER").toInt() } extensions.create("jdk", project) From 6abf67eaa1bfc7fa778aff80f2ced252c98e46d2 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 12:28:51 +0200 Subject: [PATCH 17/33] provide a method ci.registerDependencyRepositories() --- .../de/itemis/mps/gradle/common.gradle.kts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 89e514f..42f1acf 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -46,6 +46,18 @@ abstract class CI(val _project: Project) { fun isCI() = _project.extra["ciBuild"] fun buildNumber() = System.getenv("GITHUB_RUN_NUMBER").toIntOrNull() ?: System.getenv("BUILD_NUMBER").toInt() + + fun registerDependencyRepositories(repositories: ArrayList) { + for (repoUrl in repositories) { + _project.repositories.maven { + url = _project.uri(repoUrl) + credentials { + username = (_project.extensions.getByName("githubAuth") as GitHubAuth).user + password = (_project.extensions.getByName("githubAuth") as GitHubAuth).token + } + } + } + } } extensions.create("jdk", project) @@ -126,8 +138,8 @@ tasks.named("clean") { extensions.create("githubAuth", project) abstract class GitHubAuth(val _project: Project) { - val user = _project.findProperty("github_username") ?: System.getenv("GITHUB_ACTOR") - val token = _project.findProperty("github_token") ?: System.getenv("GITHUB_TOKEN") + val user:String = (_project.findProperty("github_username") ?: System.getenv("GITHUB_ACTOR")).toString() + val token:String = (_project.findProperty("github_token") ?: System.getenv("GITHUB_TOKEN")).toString() } /* From c71b49a727822b1cc556cd56a912c12192681972 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 12:35:13 +0200 Subject: [PATCH 18/33] provide MPSVersion#toMavenSnapshot --- src/main/kotlin/de/itemis/mps/gradle/Common.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/Common.kt b/src/main/kotlin/de/itemis/mps/gradle/Common.kt index f060bb4..ca1453f 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/Common.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/Common.kt @@ -136,4 +136,6 @@ class MPSVersion( override fun toString(): String { return major + appendOpt(minor, ".") + appendOpt(releaseType, "-") } + + fun toMavenSnapshot() = "$major.${minorMainPart()}-SNAPSHOT" } From 7f4a48e82925bd5868ba1fbdfec2f3f27792fbde Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 12:59:52 +0200 Subject: [PATCH 19/33] improve GitBasedVersioning --- .../itemis/mps/gradle/GitBasedVersioning.groovy | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/git-based-versioning/src/main/groovy/de/itemis/mps/gradle/GitBasedVersioning.groovy b/git-based-versioning/src/main/groovy/de/itemis/mps/gradle/GitBasedVersioning.groovy index c00c45c..523fddf 100644 --- a/git-based-versioning/src/main/groovy/de/itemis/mps/gradle/GitBasedVersioning.groovy +++ b/git-based-versioning/src/main/groovy/de/itemis/mps/gradle/GitBasedVersioning.groovy @@ -75,17 +75,18 @@ class GitBasedVersioning { getVersion(branch, major, minor, getGitCommitCount()) } - static String getVersionWithCount(String major, String minor, int count) { + static String getVersionWithCount(String major, String minor, Integer count) { getVersion(getGitBranch(), major, minor, count) } - static String getVersionWithBugfixAndCount(String major, String minor, String bugfix, int count) { + static String getVersionWithBugfixAndCount(String major, String minor, String bugfix, Integer count) { getVersion(getGitBranch(), major, minor, bugfix, count) } - static String getVersion(String branch, String major, String minor, String bugfix = "", int count) { + static String getVersion(String branch, String major, String minor, String bugfix = "", Integer count) { def hash = getGitShortCommitHash() - def baseVersion = bugfix.isEmpty() ? "$major.$minor.$count.$hash" : "$major.$minor.$bugfix.$count.$hash" + def countStr = count != null ? ".$count": "" + def baseVersion = bugfix.isEmpty() ? "$major.$minor${countStr}.$hash" : "$major.$minor.$bugfix${countStr}.$hash" if (branch == 'master' || branch == 'main' || branch == 'HEAD' /*this happens in detached head situations*/) { return baseVersion } @@ -100,12 +101,12 @@ class GitBasedVersioning { * @param minor * @return */ - static String getVersionWithoutMaintenancePrefix(String major, String minor) { + static String getVersionWithoutMaintenancePrefix(String major, String minor, Integer count = null) { def branch = getGitBranch() if (branch.startsWith("maintenance") || branch.startsWith("mps")) { - getVersion("HEAD", major, minor) + getVersion("HEAD", major, minor, count != null? count: getGitCommitCount()) } else { - getVersion(major, minor) + getVersion(getGitBranch(), major, minor, count != null? count: getGitCommitCount()) } } } From 96f8cb5640474a9c2aa4fca9a4459731c820a3e1 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 18:51:50 +0200 Subject: [PATCH 20/33] create a directories extension --- .../de/itemis/mps/gradle/common.gradle.kts | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 42f1acf..06c6caa 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -142,16 +142,12 @@ abstract class GitHubAuth(val _project: Project) { val token:String = (_project.findProperty("github_token") ?: System.getenv("GITHUB_TOKEN")).toString() } -/* -extensions.create("itemis",buildscript) - -abstract class Itemis(val bs: ScriptHandler) { - fun nexus() { - bs.repositories { - apply { maven("https://artifacts.itemis.cloud/repository/maven-mps/") } - } - return - } -} - */ +extensions.create("directories",project) +abstract class Directories(val _project: Project) { + fun artifactsDir() :File = _project.file("${_project.layout.projectDirectory}/artifacts") + + fun scriptFile(name:String):File = _project.file("${_project.layout.projectDirectory}/scripts/$name") + + fun jnLibraryPath():File = File(_project.extra["mpsHomeDir"].toString(), "lib/jna/${System.getProperty("os.arch")}") +} \ No newline at end of file From 9cff748bfcb5010c129550313e606231a637c9a5 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 19:23:35 +0200 Subject: [PATCH 21/33] hardcode MPS versions --- .../kotlin/de/itemis/mps/gradle/Common.kt | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/Common.kt b/src/main/kotlin/de/itemis/mps/gradle/Common.kt index ca1453f..2df0418 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/Common.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/Common.kt @@ -117,6 +117,115 @@ class MPSVersion( var major: String, var minor: String, var releaseType: String? = null) { + + companion object { + val MPS_2017_1 = MPSVersion("2017","1") + val MPS_2017_1_1 = MPSVersion("2017","1.1") + val MPS_2017_1_2 = MPSVersion("2017","1.2") + val MPS_2017_1_3 = MPSVersion("2017","1.3") + val MPS_2017_2 = MPSVersion("2017","2") + val MPS_2017_2_1 = MPSVersion("2017","2.1") + val MPS_2017_2_2 = MPSVersion("2017","2.2") + val MPS_2017_2_3 = MPSVersion("2017","2.3") + val MPS_2017_3_ = MPSVersion("2017","3") + val MPS_2017_3_1 = MPSVersion("2017","3.1") + val MPS_2017_3_2 = MPSVersion("2017","3.2") + val MPS_2017_3_3 = MPSVersion("2017","3.3") + val MPS_2017_3_4 = MPSVersion("2017","3.4") + val MPS_2017_3_5 = MPSVersion("2017","3.5") + val MPS_2017_3_6 = MPSVersion("2017","3.6") + + val MPS_2018_1_ = MPSVersion("2018","1") + val MPS_2018_1_1 = MPSVersion("2018","1.1") + val MPS_2018_1_2 = MPSVersion("2018","1.2") + val MPS_2018_1_3 = MPSVersion("2018","1.3") + val MPS_2018_1_4 = MPSVersion("2018","1.4") + val MPS_2018_1_5 = MPSVersion("2018","1.5") + val MPS_2018_1_6 = MPSVersion("2018","1.6") + val MPS_2018_2_ = MPSVersion("2018","2") + val MPS_2018_2_1 = MPSVersion("2018","2.1") + val MPS_2018_2_2 = MPSVersion("2018","2.2") + val MPS_2018_2_3 = MPSVersion("2018","2.3") + val MPS_2018_2_4 = MPSVersion("2018","2.4") + val MPS_2018_2_5 = MPSVersion("2018","2.5") + val MPS_2018_2_6 = MPSVersion("2018","2.6") + val MPS_2018_3_ = MPSVersion("2018","3") + val MPS_2018_3_1 = MPSVersion("2018","3.1") + val MPS_2018_3_2 = MPSVersion("2018","3.2") + val MPS_2018_3_3 = MPSVersion("2018","3.3") + val MPS_2018_3_4 = MPSVersion("2018","3.4") + val MPS_2018_3_5 = MPSVersion("2018","3.5") + val MPS_2018_3_6 = MPSVersion("2018","3.6") + val MPS_2018_3_7 = MPSVersion("2018","3.7") + + val MPS_2019_1_ = MPSVersion("2019","1") + val MPS_2019_1_1 = MPSVersion("2019","1.1") + val MPS_2019_1_2 = MPSVersion("2019","1.2") + val MPS_2019_1_3 = MPSVersion("2019","1.3") + val MPS_2019_1_4 = MPSVersion("2019","1.4") + val MPS_2019_1_5 = MPSVersion("2019","1.5") + val MPS_2019_1_6 = MPSVersion("2019","1.6") + val MPS_2019_2_ = MPSVersion("2019","2") + val MPS_2019_2_1 = MPSVersion("2019","2.1") + val MPS_2019_2_2 = MPSVersion("2019","2.2") + val MPS_2019_2_3 = MPSVersion("2019","2.3") + val MPS_2019_2_4 = MPSVersion("2019","2.4") + + val MPS_2020_1 = MPSVersion("2020","1") + val MPS_2020_1_1 = MPSVersion("2020","1.1") + val MPS_2020_1_2 = MPSVersion("2020","1.2") + val MPS_2020_1_3 = MPSVersion("2020","1.3") + val MPS_2020_1_4 = MPSVersion("2020","1.4") + val MPS_2020_1_5 = MPSVersion("2020","1.5") + val MPS_2020_1_6 = MPSVersion("2020","1.6") + val MPS_2020_1_7 = MPSVersion("2020","1.7") + val MPS_2020_2 = MPSVersion("2020","2") + val MPS_2020_2_1 = MPSVersion("2020","2.1") + val MPS_2020_2_2 = MPSVersion("2020","2.2") + val MPS_2020_2_3 = MPSVersion("2020","2.3") + val MPS_2020_3 = MPSVersion("2020","3") + val MPS_2020_3_1 = MPSVersion("2020","3.1") + val MPS_2020_3_2 = MPSVersion("2020","3.2") + val MPS_2020_3_3 = MPSVersion("2020","3.3") + val MPS_2020_3_4 = MPSVersion("2020","3.4") + val MPS_2020_3_5 = MPSVersion("2020","3.5") + val MPS_2020_3_6 = MPSVersion("2020","3.6") + + val MPS_2021_1 = MPSVersion("2021","1") + val MPS_2021_1_1 = MPSVersion("2021","1.1") + val MPS_2021_1_2 = MPSVersion("2021","1.2") + val MPS_2021_1_3 = MPSVersion("2021","1.3") + val MPS_2021_1_4 = MPSVersion("2021","1.4") + val MPS_2021_2 = MPSVersion("2021","2") + val MPS_2021_2_1 = MPSVersion("2021","2.1") + val MPS_2021_2_2 = MPSVersion("2021","2.2") + val MPS_2021_2_3 = MPSVersion("2021","2.3") + val MPS_2021_2_4 = MPSVersion("2021","2.4") + val MPS_2021_2_5 = MPSVersion("2021","2.5") + val MPS_2021_2_6 = MPSVersion("2021","2.6") + val MPS_2021_3 = MPSVersion("2021","3") + val MPS_2021_3_1 = MPSVersion("2021","3.1") + val MPS_2021_3_2 = MPSVersion("2021","3.2") + val MPS_2021_3_3 = MPSVersion("2021","3.3") + val MPS_2021_3_4 = MPSVersion("2021","3.4") + val MPS_2021_3_5 = MPSVersion("2021","3.5") + + val MPS_2022_2 = MPSVersion("2022","2") + val MPS_2022_2_1 = MPSVersion("2022","2.1") + val MPS_2022_2_2 = MPSVersion("2022","2.2") + val MPS_2022_2_3 = MPSVersion("2022","2.3") + val MPS_2022_3 = MPSVersion("2022","3") + val MPS_2022_3_1 = MPSVersion("2022","3.1") + val MPS_2022_3_2 = MPSVersion("2022","3.2") + + val MPS_2023_2 = MPSVersion("2023","2") + val MPS_2023_2_1 = MPSVersion("2023","2.1") + val MPS_2023_2_2 = MPSVersion("2023","2.2") + val MPS_2023_3 = MPSVersion("2023","3") + val MPS_2023_3_1 = MPSVersion("2023","3.1") + + val MPS_2024_1 = MPSVersion("2024","1") + } private fun appendOpt(str: String?, pre: String): String { return if (!str.isNullOrEmpty()) "${pre}${str}" else "" From ece5bb3a6b7b0ad80a23bbf4b6557b3d45d0dbca Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 21:14:50 +0200 Subject: [PATCH 22/33] enable the option to make the downloaded JBR the default java executable --- src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt b/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt index 512eb0d..16a770a 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt @@ -11,6 +11,7 @@ import javax.inject.Inject open class DownloadJbrConfiguration @Inject constructor(objects: ObjectFactory) { lateinit var jbrVersion: String + var defaultJavaExecutable = false var distributionType : String? = null internal val downloadDirProperty: DirectoryProperty = objects.directoryProperty() @@ -84,6 +85,9 @@ open class DownloadJbrProjectPlugin : Plugin { else "jbr" )) javaExecutableProperty.set(jbrDirProperty.file(if (Os.isFamily(Os.FAMILY_WINDOWS)) "bin/java.exe" else "bin/java")) + if(extension.defaultJavaExecutable) { + project.setProperty("itemis.mps.gradle.ant.defaultJavaExecutable",javaExecutableProperty.asFile) + } } } } From 420c222cd1177cb4febff33822f8898409f5ecd4 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 21:53:59 +0200 Subject: [PATCH 23/33] convert a few classes to Kotlin --- .../itemis/mps/gradle/BundleMacosJdk.groovy | 76 ------------- .../itemis/mps/gradle/BundledScripts.groovy | 26 ----- .../de/itemis/mps/gradle/CreateDmg.groovy | 106 ------------------ .../itemis/mps/gradle/GetMpsInBrowser.groovy | 54 --------- .../groovy/de/itemis/mps/gradle/Pom.groovy | 43 ------- .../de/itemis/mps/gradle/BundleMacosJdk.kt | 66 +++++++++++ .../de/itemis/mps/gradle/BundleScripts.kt | 32 ++++++ .../kotlin/de/itemis/mps/gradle/CreateDmg.kt | 106 ++++++++++++++++++ .../de/itemis/mps/gradle/GetMpsInBrowser.kt | 46 ++++++++ src/main/kotlin/de/itemis/mps/gradle/Pom.kt | 44 ++++++++ 10 files changed, 294 insertions(+), 305 deletions(-) delete mode 100644 src/main/groovy/de/itemis/mps/gradle/BundleMacosJdk.groovy delete mode 100644 src/main/groovy/de/itemis/mps/gradle/BundledScripts.groovy delete mode 100644 src/main/groovy/de/itemis/mps/gradle/CreateDmg.groovy delete mode 100644 src/main/groovy/de/itemis/mps/gradle/GetMpsInBrowser.groovy delete mode 100644 src/main/groovy/de/itemis/mps/gradle/Pom.groovy create mode 100644 src/main/kotlin/de/itemis/mps/gradle/BundleMacosJdk.kt create mode 100644 src/main/kotlin/de/itemis/mps/gradle/BundleScripts.kt create mode 100644 src/main/kotlin/de/itemis/mps/gradle/CreateDmg.kt create mode 100644 src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt create mode 100644 src/main/kotlin/de/itemis/mps/gradle/Pom.kt diff --git a/src/main/groovy/de/itemis/mps/gradle/BundleMacosJdk.groovy b/src/main/groovy/de/itemis/mps/gradle/BundleMacosJdk.groovy deleted file mode 100644 index 1553c55..0000000 --- a/src/main/groovy/de/itemis/mps/gradle/BundleMacosJdk.groovy +++ /dev/null @@ -1,76 +0,0 @@ -package de.itemis.mps.gradle - -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.artifacts.Dependency -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.OutputFile -import org.gradle.api.tasks.TaskAction - -class BundleMacosJdk extends DefaultTask { - @InputFile - File rcpArtifact - - @Optional @Input - String jdkDirname = "jre" - - @InputFile - File jdk - - @OutputFile - File outputFile - - def setRcpArtifact(Object file) { - this.rcpArtifact = project.file(file) - } - - def setJdkDirname(String dirname) { - this.jdkDirname = dirname - } - - def setJdk(Object file) { - this.jdk = project.file(file) - } - - /** - * Sets the {@link #jdk} property from a dependency, given as either a {@link Dependency} object or in dependency - * notation. - */ - def setJdkDependency(Object jdkDependency) { - Dependency dep = project.dependencies.create(jdkDependency) - def files = project.configurations.detachedConfiguration(dep).resolve() - if (files.size() != 1) { - throw new GradleException( - "Expected a single file for jdkDependency '$jdkDependency', got ${files.size()} files") - } - this.jdk = files.first() - } - - def setOutputFile(Object file) { - this.outputFile = project.file(file) - } - - @TaskAction - def build() { - project.logger.lifecycle("The jdkDirname: ${jdkDirname}") - File scriptsDir = File.createTempDir() - File tmpDir = File.createTempDir() - try { - String scriptName = 'bundle_macos_jdk.sh' - BundledScripts.extractScriptsToDir(scriptsDir, scriptName) - project.exec { - executable new File(scriptsDir, scriptName) - args rcpArtifact, tmpDir, jdkDirname, jdk, outputFile - workingDir scriptsDir - } - } finally { - // Do not use File.deleteDir() because it follows symlinks! - // (e.g. the symlink to /Applications inside tmpDir) - project.exec { - commandLine 'rm', '-rf', scriptsDir, tmpDir - } - } - } -} diff --git a/src/main/groovy/de/itemis/mps/gradle/BundledScripts.groovy b/src/main/groovy/de/itemis/mps/gradle/BundledScripts.groovy deleted file mode 100644 index 6ca62f1..0000000 --- a/src/main/groovy/de/itemis/mps/gradle/BundledScripts.groovy +++ /dev/null @@ -1,26 +0,0 @@ -package de.itemis.mps.gradle - -import org.gradle.api.GradleException - -import java.nio.file.Files -import java.nio.file.attribute.PosixFilePermissions - -class BundledScripts { - static void extractScriptsToDir(File dir, String... scriptNames) { - def rwxPermissions = PosixFilePermissions.fromString("rwx------") - - for (name in scriptNames) { - File file = new File(dir, name) - if (!file.parentFile.isDirectory() && ! file.parentFile.mkdirs()) { - throw new GradleException("Could not create directory " + file.parentFile) - } - InputStream resourceStream = BundledScripts.class.getResourceAsStream(name) - if (resourceStream == null) { - throw new IllegalArgumentException("Resource ${name} was not found") - } - - resourceStream.withStream { is -> file.newOutputStream().withStream { os -> os << is } } - Files.setPosixFilePermissions(file.toPath(), rwxPermissions) - } - } -} diff --git a/src/main/groovy/de/itemis/mps/gradle/CreateDmg.groovy b/src/main/groovy/de/itemis/mps/gradle/CreateDmg.groovy deleted file mode 100644 index b0dc195..0000000 --- a/src/main/groovy/de/itemis/mps/gradle/CreateDmg.groovy +++ /dev/null @@ -1,106 +0,0 @@ -package de.itemis.mps.gradle - -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.artifacts.Dependency -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.OutputFile -import org.gradle.api.tasks.TaskAction -import org.gradle.api.tasks.Optional - -class CreateDmg extends DefaultTask { - @InputFile - File rcpArtifact - - @InputFile - File backgroundImage - - @InputFile - File jdk - - @OutputFile - File dmgFile - - @Optional @Input - String signKeyChainPassword - - @Optional @Input - String signIdentity - - @InputFile @Optional - File signKeyChain - - def setSignKeyChain(Object file) { - this.signKeyChain = project.file(file) - } - - def setRcpArtifact(Object file) { - this.rcpArtifact = project.file(file) - } - - def setBackgroundImage(Object file) { - this.backgroundImage = project.file(file) - } - - def setJdk(Object file) { - this.jdk = project.file(file) - } - - /** - * Sets the {@link #jdk} property from a dependency, given as either a {@link Dependency} object or in dependency - * notation. - */ - def setJdkDependency(Object jdkDependency) { - Dependency dep = project.dependencies.create(jdkDependency) - def files = project.configurations.detachedConfiguration(dep).resolve() - if (files.size() != 1) { - throw new GradleException( - "Expected a single file for jdkDependency '$jdkDependency', got ${files.size()} files") - } - this.jdk = files.first() - } - - def setDmgFile(Object file) { - this.dmgFile = project.file(file) - if (dmgFile != null && !dmgFile.name.endsWith(".dmg")) { - throw new GradleException("Value of dmgFile must end with .dmg but was $dmgFile") - } - } - - @TaskAction - def build() { - String[] scripts = ['mpssign.sh', 'mpsdmg.sh', 'mpsdmg.pl', - 'Mac/Finder/DSStore/BuddyAllocator.pm', 'Mac/Finder/DSStore.pm'] - File scriptsDir = File.createTempDir() - File dmgDir = File.createTempDir() - def signingInfo = [signKeyChainPassword, signKeyChain, signIdentity] - try { - BundledScripts.extractScriptsToDir(scriptsDir, scripts) - project.exec { - executable new File(scriptsDir, 'mpssign.sh') - - if(signingInfo.every {it != null}) { - args '-r', rcpArtifact, '-o', dmgDir, '-j', jdk, '-p', signKeyChainPassword, '-k', signKeyChain, '-i', signIdentity - }else if (signingInfo.every {it == null}){ - args '-r', rcpArtifact, '-o', dmgDir, '-j', jdk - }else{ - throw new IllegalArgumentException("Not all signing paramters set. signKeyChain: ${getSigningInfo[1]}, signIdentity: ${getSigningInfo[2]} and signKeyChainPassword needs to be set. ") - } - workingDir scriptsDir - } - project.exec { - executable new File(scriptsDir, 'mpsdmg.sh') - args dmgDir, dmgFile, backgroundImage - workingDir scriptsDir - } - } finally { - // Do not use File.deleteDir() because it follows symlinks! - // (e.g. the symlink to /Applications inside dmgDir) - project.exec { - commandLine 'rm', '-rf', scriptsDir, dmgDir - } - } - } - -} diff --git a/src/main/groovy/de/itemis/mps/gradle/GetMpsInBrowser.groovy b/src/main/groovy/de/itemis/mps/gradle/GetMpsInBrowser.groovy deleted file mode 100644 index 252f91b..0000000 --- a/src/main/groovy/de/itemis/mps/gradle/GetMpsInBrowser.groovy +++ /dev/null @@ -1,54 +0,0 @@ -package de.itemis.mps.gradle - -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.TaskAction -import org.apache.tools.ant.taskdefs.condition.Os - -import java.awt.Desktop - -class GetMpsInBrowser extends DefaultTask { - - @Input - String version - - def setVersion(String version) { - this.version = version - } - - private String getMajorPart() { - def split = version.split("\\.") - if (split.length == 2) { - return version - } - - return split.take(2).join(".") - } - - private URI getDownloadUrl() { - def major = getMajorPart() - - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - return new URI("https://download.jetbrains.com/mps/${major}/MPS-${version}.exe") - } else if (Os.isFamily(Os.FAMILY_MAC)) { - return new URI("https://download.jetbrains.com/mps/${major}/MPS-${version}-macos-jdk-bundled.dmg") - } else if (Os.isFamily(Os.FAMILY_UNIX)) { - return new URI("https://download.jetbrains.com/mps/${major}/MPS-${version}.tar.gz") - } else { - print "Warning: could not determine OS downloading generic distribution" - return new URI("http://download.jetbrains.com/mps/${major}/MPS-${version}.zip") - } - - } - - @TaskAction - def build() { - - if (Desktop.isDesktopSupported()) { - Desktop.getDesktop().browse(getDownloadUrl()) - } else { - throw new GradleException("this task is not supported in headless mode") - } - } -} diff --git a/src/main/groovy/de/itemis/mps/gradle/Pom.groovy b/src/main/groovy/de/itemis/mps/gradle/Pom.groovy deleted file mode 100644 index 89bd350..0000000 --- a/src/main/groovy/de/itemis/mps/gradle/Pom.groovy +++ /dev/null @@ -1,43 +0,0 @@ -package de.itemis.mps.gradle - -import org.gradle.api.artifacts.Configuration -import org.gradle.api.publish.maven.MavenPom - -class Pom { - - /** - * Add all top level dependencies of a configuration to a pom - * @param pom the POM node where to add the dependencies - * @param config the configuration where to get the dependencies from - */ - def withDep(MavenPom pom, Configuration config) { - pom.withXml { - def dependenciesNode = asNode().appendNode('dependencies') - config.resolvedConfiguration.firstLevelModuleDependencies.each { - def dependencyNode = dependenciesNode.appendNode('dependency') - dependencyNode.appendNode('groupId', it.moduleGroup) - dependencyNode.appendNode('artifactId', it.moduleName) - dependencyNode.appendNode('version', it.moduleVersion) - dependencyNode.appendNode('type', it.moduleArtifacts[0].type) - } - } - } - /** - * Add all top level dependencies of a configuration to a pom with provided scope - * @param pom the POM node where to add the dependencies - * @param config the configuration where to get the dependencies from - */ - def withProvidedDep(MavenPom pom, Configuration config) { - pom.withXml { - def dependenciesNode = asNode().appendNode('dependencies') - config.resolvedConfiguration.firstLevelModuleDependencies.each { - def dependencyNode = dependenciesNode.appendNode('dependency') - dependencyNode.appendNode('groupId', it.moduleGroup) - dependencyNode.appendNode('artifactId', it.moduleName) - dependencyNode.appendNode('version', it.moduleVersion) - dependencyNode.appendNode('type', it.moduleArtifacts[0].type) - dependencyNode.appendNode('scope', 'provided') - } - } - } -} \ No newline at end of file diff --git a/src/main/kotlin/de/itemis/mps/gradle/BundleMacosJdk.kt b/src/main/kotlin/de/itemis/mps/gradle/BundleMacosJdk.kt new file mode 100644 index 0000000..c4dbf55 --- /dev/null +++ b/src/main/kotlin/de/itemis/mps/gradle/BundleMacosJdk.kt @@ -0,0 +1,66 @@ +package de.itemis.mps.gradle + +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.artifacts.Dependency +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction +import java.io.File +import kotlin.io.path.createTempDirectory + +open class BundleMacosJdk : DefaultTask() { + @InputFile + lateinit var rcpArtifact: File + + @Optional @Input + var jdkDirname: String = "jre" + + @InputFile + lateinit var jdk: File + + @OutputFile + lateinit var outputFile: File + + /** + * Sets the [jdk] property from a dependency, given as either a [Dependency] object or in dependency notation. + */ + fun setJdkDependency(jdkDependency: Any) { + val dep: Dependency = project.dependencies.create(jdkDependency) + val files = project.configurations.detachedConfiguration(dep).resolve() + if (files.size != 1) { + throw GradleException( + "Expected a single file for jdkDependency '$jdkDependency', got ${files.size} files" + ) + } + this.jdk = files.first() + } + + fun setOutputFile(file: Any) { + this.outputFile = project.file(file) + } + + @TaskAction + fun build() { + project.logger.lifecycle("The jdkDirname: $jdkDirname") + val scriptsDir = createTempDirectory().toFile() + val tmpDir = createTempDirectory().toFile() + try { + val scriptName = "bundle_macos_jdk.sh" + BundledScripts.extractScriptsToDir(scriptsDir, scriptName) + project.exec { + executable = File(scriptsDir, scriptName).absolutePath + args = listOf(rcpArtifact.toString(), tmpDir.toString(), jdkDirname.toString(), jdk.toString(), outputFile.toString()) + workingDir = scriptsDir + } + } finally { + // Do not use File.deleteDir() because it follows symlinks! + // (e.g. the symlink to /Applications inside tmpDir) + project.exec { + commandLine("rm", "-rf", scriptsDir.absolutePath, tmpDir.absolutePath) + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/de/itemis/mps/gradle/BundleScripts.kt b/src/main/kotlin/de/itemis/mps/gradle/BundleScripts.kt new file mode 100644 index 0000000..0768466 --- /dev/null +++ b/src/main/kotlin/de/itemis/mps/gradle/BundleScripts.kt @@ -0,0 +1,32 @@ +package de.itemis.mps.gradle + +import org.gradle.api.GradleException +import java.io.File +import java.io.InputStream +import java.nio.file.Files +import java.nio.file.attribute.PosixFilePermissions + +class BundledScripts { + companion object { + @JvmStatic + fun extractScriptsToDir(dir: File, vararg scriptNames: String) { + val rwxPermissions = PosixFilePermissions.fromString("rwx------") + + for (name in scriptNames) { + val file = File(dir, name) + if (!file.parentFile.isDirectory && !file.parentFile.mkdirs()) { + throw GradleException("Could not create directory ${file.parentFile}") + } + val resourceStream: InputStream = BundledScripts::class.java.getResourceAsStream(name) + ?: throw IllegalArgumentException("Resource $name was not found") + + resourceStream.use { inputStream -> + file.outputStream().use { outputStream -> + inputStream.copyTo(outputStream) + } + } + Files.setPosixFilePermissions(file.toPath(), rwxPermissions) + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/de/itemis/mps/gradle/CreateDmg.kt b/src/main/kotlin/de/itemis/mps/gradle/CreateDmg.kt new file mode 100644 index 0000000..3b84818 --- /dev/null +++ b/src/main/kotlin/de/itemis/mps/gradle/CreateDmg.kt @@ -0,0 +1,106 @@ +package de.itemis.mps.gradle.de.itemis.mps.gradle + +import de.itemis.mps.gradle.BundledScripts +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.artifacts.Dependency +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction +import org.gradle.api.tasks.Optional +import java.io.File +import kotlin.io.path.createTempDirectory + +open class CreateDmg : DefaultTask() { + @InputFile + lateinit var rcpArtifact: File + + @InputFile + lateinit var backgroundImage: File + + @InputFile + lateinit var jdk: File + + @OutputFile + lateinit var dmgFile: File + + @Optional @Input + var signKeyChainPassword: String? = null + + @Optional @Input + var signIdentity: String? = null + + @InputFile @Optional + var signKeyChain: File? = null + + fun setSignKeyChain(file: Any) { + this.signKeyChain = project.file(file) + } + + fun setRcpArtifact(file: Any) { + this.rcpArtifact = project.file(file) + } + + fun setBackgroundImage(file: Any) { + this.backgroundImage = project.file(file) + } + + fun setJdk(file: Any) { + this.jdk = project.file(file) + } + + /** + * Sets the [jdk] property from a dependency, given as either a [Dependency] object or in dependency notation. + */ + fun setJdkDependency(jdkDependency: Any) { + val dep: Dependency = project.dependencies.create(jdkDependency) + val files = project.configurations.detachedConfiguration(dep).resolve() + if (files.size != 1) { + throw GradleException("Expected a single file for jdkDependency '$jdkDependency', got ${files.size} files") + } + this.jdk = files.first() + } + + fun setDmgFile(file: Any) { + this.dmgFile = project.file(file) + if (!dmgFile.name.endsWith(".dmg")) { + throw GradleException("Value of dmgFile must end with .dmg but was $dmgFile") + } + } + + @TaskAction + fun build() { + val scripts = arrayOf("mpssign.sh", "mpsdmg.sh", "mpsdmg.pl", + "Mac/Finder/DSStore/BuddyAllocator.pm", "Mac/Finder/DSStore.pm") + val scriptsDir = createTempDirectory().toFile() + val dmgDir = createTempDirectory().toFile() + val signingInfo = arrayOf(signKeyChainPassword, signKeyChain, signIdentity) + try { + BundledScripts.extractScriptsToDir(scriptsDir, *scripts) + project.exec { + executable = File(scriptsDir, "mpssign.sh").toString() + + if (signingInfo.all { it != null }) { + args = listOf("-r", rcpArtifact.toString(), "-o", dmgDir.toString(), "-j", jdk.toString(), "-p", signKeyChainPassword, "-k", signKeyChain.toString(), "-i", signIdentity) + } else if (signingInfo.all { it == null }) { + args = listOf("-r", rcpArtifact.toString(), "-o", dmgDir.toString(), "-j", jdk.toString()) + } else { + throw IllegalArgumentException("Not all signing parameters set. signKeyChain: ${signingInfo[1]}, signIdentity: ${signingInfo[2]} and signKeyChainPassword needs to be set.") + } + workingDir = scriptsDir + } + project.exec { + executable = File(scriptsDir, "mpsdmg.sh").toString() + args = listOf(dmgDir.toString(), dmgFile.toString(), backgroundImage.toString()) + workingDir = scriptsDir + } + } finally { + // Do not use File.deleteDir() because it follows symlinks! + // (e.g. the symlink to /Applications inside dmgDir) + project.exec { + commandLine = listOf("rm", "-rf", scriptsDir.toString(), dmgDir.toString()) + } + } + } +} diff --git a/src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt b/src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt new file mode 100644 index 0000000..aed3646 --- /dev/null +++ b/src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt @@ -0,0 +1,46 @@ +package de.itemis.mps.gradle + +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.TaskAction +import org.apache.tools.ant.taskdefs.condition.Os +import java.awt.Desktop +import java.net.URI + +open class GetMpsInBrowser : DefaultTask() { + + @Input + var version: String? = null + + private fun getMajorPart(): String { + val split = version?.split(".") + return if (split?.size == 2) { + version!! + } else { + split?.take(2)?.joinToString(".") ?: "" + } + } + + private fun getDownloadUrl(): URI { + val major = getMajorPart() + return when { + Os.isFamily(Os.FAMILY_WINDOWS) -> URI("https://download.jetbrains.com/mps/$major/MPS-$version.exe") + Os.isFamily(Os.FAMILY_MAC) -> URI("https://download.jetbrains.com/mps/$major/MPS-$version-macos-jdk-bundled.dmg") + Os.isFamily(Os.FAMILY_UNIX) -> URI("https://download.jetbrains.com/mps/$major/MPS-$version.tar.gz") + else -> { + println("Warning: could not determine OS, downloading generic distribution") + URI("http://download.jetbrains.com/mps/$major/MPS-$version.zip") + } + } + } + + @TaskAction + fun build() { + if (Desktop.isDesktopSupported()) { + Desktop.getDesktop().browse(getDownloadUrl()) + } else { + throw GradleException("This task is not supported in headless mode") + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/de/itemis/mps/gradle/Pom.kt b/src/main/kotlin/de/itemis/mps/gradle/Pom.kt new file mode 100644 index 0000000..2c90a5c --- /dev/null +++ b/src/main/kotlin/de/itemis/mps/gradle/Pom.kt @@ -0,0 +1,44 @@ +package de.itemis.mps.gradle + +import org.gradle.api.artifacts.Configuration +import org.gradle.api.publish.maven.MavenPom + +class Pom { + + /** + * Add all top level dependencies of a configuration to a pom + * @param pom the POM node where to add the dependencies + * @param config the configuration where to get the dependencies from + */ + fun withDep(pom: MavenPom, config: Configuration) { + pom.withXml { + val dependenciesNode = asNode().appendNode("dependencies") + config.resolvedConfiguration.firstLevelModuleDependencies.forEach { + val dependencyNode = dependenciesNode.appendNode("dependency") + dependencyNode.appendNode("groupId", it.moduleGroup) + dependencyNode.appendNode("artifactId", it.moduleName) + dependencyNode.appendNode("version", it.moduleVersion) + dependencyNode.appendNode("type", it.moduleArtifacts.first().type) + } + } + } + + /** + * Add all top level dependencies of a configuration to a pom with provided scope + * @param pom the POM node where to add the dependencies + * @param config the configuration where to get the dependencies from + */ + fun withProvidedDep(pom: MavenPom, config: Configuration) { + pom.withXml { + val dependenciesNode = asNode().appendNode("dependencies") + config.resolvedConfiguration.firstLevelModuleDependencies.forEach { + val dependencyNode = dependenciesNode.appendNode("dependency") + dependencyNode.appendNode("groupId", it.moduleGroup) + dependencyNode.appendNode("artifactId", it.moduleName) + dependencyNode.appendNode("version", it.moduleVersion) + dependencyNode.appendNode("type", it.moduleArtifacts.first().type) + dependencyNode.appendNode("scope", "provided") + } + } + } +} \ No newline at end of file From ada92cdacfcf580306afba920c59f264e172089f Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 21:57:18 +0200 Subject: [PATCH 24/33] update the base version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index da97f57..de5489e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,7 +23,7 @@ plugins { id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.16.3" } -val baseVersion = "1.28.0" +val baseVersion = "1.29.0" group = "de.itemis.mps" From f8b8ff7717ccf15dfa25184433044ea1e6777b2b Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 22:07:22 +0200 Subject: [PATCH 25/33] extract some more version strings to gradle.properties --- build.gradle.kts | 4 ++-- gradle.properties | 4 +++- settings.gradle.kts | 7 ++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index de5489e..d7db10c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,10 +17,10 @@ val kotlinVersion: String by project plugins { groovy `java-gradle-plugin` - `kotlin-dsl` version "4.5.0" + `kotlin-dsl` `maven-publish` kotlin("jvm") - id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.16.3" + id("org.jetbrains.kotlinx.binary-compatibility-validator") } val baseVersion = "1.29.0" diff --git a/gradle.properties b/gradle.properties index 3876028..2a65d38 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,4 @@ kotlinApiVersion=1.8 -kotlinVersion=1.9.24 \ No newline at end of file +kotlinVersion=1.9.24 +kotlinDSLVersion=4.5.0 +binaryCompatibilityValidator=0.16.3 \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 4ecce1c..5fa8840 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,8 +2,13 @@ pluginManagement { includeBuild("git-based-versioning") val kotlinVersion: String by settings + val kotlinDSLVersion: String by settings + val binaryCompatibilityValidator: String by settings + plugins { - kotlin("jvm") version "$kotlinVersion" + kotlin("jvm") version kotlinVersion + `kotlin-dsl` version kotlinDSLVersion + id("org.jetbrains.kotlinx.binary-compatibility-validator") version binaryCompatibilityValidator } } From 212d7e1b5a43d062a7cfb7c043303f94459c1762 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 22:29:01 +0200 Subject: [PATCH 26/33] fix a NullPointerException --- src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 06c6caa..605fa7c 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -138,8 +138,8 @@ tasks.named("clean") { extensions.create("githubAuth", project) abstract class GitHubAuth(val _project: Project) { - val user:String = (_project.findProperty("github_username") ?: System.getenv("GITHUB_ACTOR")).toString() - val token:String = (_project.findProperty("github_token") ?: System.getenv("GITHUB_TOKEN")).toString() + val user:String? = (_project.findProperty("github_username") ?: System.getenv("GITHUB_ACTOR"))?.toString() + val token:String? = (_project.findProperty("github_token") ?: System.getenv("GITHUB_TOKEN"))?.toString() } extensions.create("directories",project) From 9224b7986a6cae66e64f9471f963acd8346addb4 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sat, 28 Sep 2024 23:15:11 +0200 Subject: [PATCH 27/33] rename some configurations and tasks to avoid redefinitions --- .../kotlin/de/itemis/mps/gradle/common.gradle.kts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 605fa7c..31104d9 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -94,15 +94,15 @@ abstract class Itemis(val bs: ScriptHandler) { fun itemisNexus() = "https://artifacts.itemis.cloud/repository/maven-mps/" } -project.configurations.create("mps") { +project.configurations.create("common_mps") { description = "The MPS dependencies configuration" } -project.configurations.create("languageLibs") { +project.configurations.create("common_languageLibs") { description = "The language dependencies configuration" } -project.configurations.create("antLib") { +project.configurations.create("common_antLib") { description = "The JUnit dependencies configuration" } @@ -110,21 +110,23 @@ project.extra["skipResolveMps"] = project.hasProperty("mpsHomeDir") project.extra["mpsHomeDir"] = rootProject.file(project.findProperty("mpsHomeDir") ?: "${layout.buildDirectory.toString()}/mps") if (project.extra["skipResolveMps"].toString().toBoolean()) { - tasks.register("resolveMps") { + tasks.register("commonResolveMps") { doLast { logger.info("MPS resolution skipped") logger.info("MPS home: " + (project.extra["mpsHomeDir"] as File).absolutePath) } } } else { - tasks.register("resolveMps") { + tasks.register("commonResolveMps") { dependsOn(configurations.getByName("mps")) + dependsOn(configurations.getByName("common_mps")) from(configurations.getByName("mps").resolve().map { zipTree(it) }) + from(configurations.getByName("common_mps").resolve().map { zipTree(it) }) project.extra["mpsHomeDir"]?.let { into(it) } } } -tasks.register("cleanMps") { +tasks.register("commonCleanMps") { delete(fileTree(mapOf( "dir" to projectDir, "include" to listOf("**/classes_gen/**", "**/source_gen/**", "**/source_gen.caches/**", "tmp/**") From 4f9f1391fcb8aa9cb2ff83cf78b56ee58108c897 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sun, 29 Sep 2024 01:00:29 +0200 Subject: [PATCH 28/33] use SemVersion as the internal structure for MPSVersion --- .../kotlin/de/itemis/mps/gradle/Common.kt | 131 ++---------------- 1 file changed, 14 insertions(+), 117 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/Common.kt b/src/main/kotlin/de/itemis/mps/gradle/Common.kt index 2df0418..218f812 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/Common.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/Common.kt @@ -1,5 +1,6 @@ package de.itemis.mps.gradle +import net.swiftzer.semver.SemVer import org.apache.log4j.Logger import org.gradle.api.GradleException import org.gradle.api.JavaVersion @@ -113,118 +114,19 @@ fun BasePluginExtensions.getMPSVersion(extensionName: String): String { throw GradleException(ErrorMessages.mustSetVersionWhenNoMpsConfiguration(extensionName)) } -class MPSVersion( - var major: String, - var minor: String, - var releaseType: String? = null) { +class MPSVersion private constructor(val version: SemVer) { companion object { - val MPS_2017_1 = MPSVersion("2017","1") - val MPS_2017_1_1 = MPSVersion("2017","1.1") - val MPS_2017_1_2 = MPSVersion("2017","1.2") - val MPS_2017_1_3 = MPSVersion("2017","1.3") - val MPS_2017_2 = MPSVersion("2017","2") - val MPS_2017_2_1 = MPSVersion("2017","2.1") - val MPS_2017_2_2 = MPSVersion("2017","2.2") - val MPS_2017_2_3 = MPSVersion("2017","2.3") - val MPS_2017_3_ = MPSVersion("2017","3") - val MPS_2017_3_1 = MPSVersion("2017","3.1") - val MPS_2017_3_2 = MPSVersion("2017","3.2") - val MPS_2017_3_3 = MPSVersion("2017","3.3") - val MPS_2017_3_4 = MPSVersion("2017","3.4") - val MPS_2017_3_5 = MPSVersion("2017","3.5") - val MPS_2017_3_6 = MPSVersion("2017","3.6") - - val MPS_2018_1_ = MPSVersion("2018","1") - val MPS_2018_1_1 = MPSVersion("2018","1.1") - val MPS_2018_1_2 = MPSVersion("2018","1.2") - val MPS_2018_1_3 = MPSVersion("2018","1.3") - val MPS_2018_1_4 = MPSVersion("2018","1.4") - val MPS_2018_1_5 = MPSVersion("2018","1.5") - val MPS_2018_1_6 = MPSVersion("2018","1.6") - val MPS_2018_2_ = MPSVersion("2018","2") - val MPS_2018_2_1 = MPSVersion("2018","2.1") - val MPS_2018_2_2 = MPSVersion("2018","2.2") - val MPS_2018_2_3 = MPSVersion("2018","2.3") - val MPS_2018_2_4 = MPSVersion("2018","2.4") - val MPS_2018_2_5 = MPSVersion("2018","2.5") - val MPS_2018_2_6 = MPSVersion("2018","2.6") - val MPS_2018_3_ = MPSVersion("2018","3") - val MPS_2018_3_1 = MPSVersion("2018","3.1") - val MPS_2018_3_2 = MPSVersion("2018","3.2") - val MPS_2018_3_3 = MPSVersion("2018","3.3") - val MPS_2018_3_4 = MPSVersion("2018","3.4") - val MPS_2018_3_5 = MPSVersion("2018","3.5") - val MPS_2018_3_6 = MPSVersion("2018","3.6") - val MPS_2018_3_7 = MPSVersion("2018","3.7") - - val MPS_2019_1_ = MPSVersion("2019","1") - val MPS_2019_1_1 = MPSVersion("2019","1.1") - val MPS_2019_1_2 = MPSVersion("2019","1.2") - val MPS_2019_1_3 = MPSVersion("2019","1.3") - val MPS_2019_1_4 = MPSVersion("2019","1.4") - val MPS_2019_1_5 = MPSVersion("2019","1.5") - val MPS_2019_1_6 = MPSVersion("2019","1.6") - val MPS_2019_2_ = MPSVersion("2019","2") - val MPS_2019_2_1 = MPSVersion("2019","2.1") - val MPS_2019_2_2 = MPSVersion("2019","2.2") - val MPS_2019_2_3 = MPSVersion("2019","2.3") - val MPS_2019_2_4 = MPSVersion("2019","2.4") - - val MPS_2020_1 = MPSVersion("2020","1") - val MPS_2020_1_1 = MPSVersion("2020","1.1") - val MPS_2020_1_2 = MPSVersion("2020","1.2") - val MPS_2020_1_3 = MPSVersion("2020","1.3") - val MPS_2020_1_4 = MPSVersion("2020","1.4") - val MPS_2020_1_5 = MPSVersion("2020","1.5") - val MPS_2020_1_6 = MPSVersion("2020","1.6") - val MPS_2020_1_7 = MPSVersion("2020","1.7") - val MPS_2020_2 = MPSVersion("2020","2") - val MPS_2020_2_1 = MPSVersion("2020","2.1") - val MPS_2020_2_2 = MPSVersion("2020","2.2") - val MPS_2020_2_3 = MPSVersion("2020","2.3") - val MPS_2020_3 = MPSVersion("2020","3") - val MPS_2020_3_1 = MPSVersion("2020","3.1") - val MPS_2020_3_2 = MPSVersion("2020","3.2") - val MPS_2020_3_3 = MPSVersion("2020","3.3") - val MPS_2020_3_4 = MPSVersion("2020","3.4") - val MPS_2020_3_5 = MPSVersion("2020","3.5") - val MPS_2020_3_6 = MPSVersion("2020","3.6") - - val MPS_2021_1 = MPSVersion("2021","1") - val MPS_2021_1_1 = MPSVersion("2021","1.1") - val MPS_2021_1_2 = MPSVersion("2021","1.2") - val MPS_2021_1_3 = MPSVersion("2021","1.3") - val MPS_2021_1_4 = MPSVersion("2021","1.4") - val MPS_2021_2 = MPSVersion("2021","2") - val MPS_2021_2_1 = MPSVersion("2021","2.1") - val MPS_2021_2_2 = MPSVersion("2021","2.2") - val MPS_2021_2_3 = MPSVersion("2021","2.3") - val MPS_2021_2_4 = MPSVersion("2021","2.4") - val MPS_2021_2_5 = MPSVersion("2021","2.5") - val MPS_2021_2_6 = MPSVersion("2021","2.6") - val MPS_2021_3 = MPSVersion("2021","3") - val MPS_2021_3_1 = MPSVersion("2021","3.1") - val MPS_2021_3_2 = MPSVersion("2021","3.2") - val MPS_2021_3_3 = MPSVersion("2021","3.3") - val MPS_2021_3_4 = MPSVersion("2021","3.4") - val MPS_2021_3_5 = MPSVersion("2021","3.5") - - val MPS_2022_2 = MPSVersion("2022","2") - val MPS_2022_2_1 = MPSVersion("2022","2.1") - val MPS_2022_2_2 = MPSVersion("2022","2.2") - val MPS_2022_2_3 = MPSVersion("2022","2.3") - val MPS_2022_3 = MPSVersion("2022","3") - val MPS_2022_3_1 = MPSVersion("2022","3.1") - val MPS_2022_3_2 = MPSVersion("2022","3.2") - - val MPS_2023_2 = MPSVersion("2023","2") - val MPS_2023_2_1 = MPSVersion("2023","2.1") - val MPS_2023_2_2 = MPSVersion("2023","2.2") - val MPS_2023_3 = MPSVersion("2023","3") - val MPS_2023_3_1 = MPSVersion("2023","3.1") - - val MPS_2024_1 = MPSVersion("2024","1") + + fun parse(str: String):MPSVersion { + var semVersion = SemVer.parseOrNull(str) + if (semVersion == null) { + val insertIndex = str.indexOf("-") + val newStr = if(insertIndex != -1) str.substring(0,insertIndex)+ ".0" + str.substring(insertIndex) else "$str.0" + semVersion = SemVer.parse(newStr) + } + return MPSVersion(semVersion) + } } private fun appendOpt(str: String?, pre: String): String { @@ -236,15 +138,10 @@ class MPSVersion( if (i == -1) return null return text.substring(0, i) } - - fun minorMainPart(): String { - val value = substringBefore(minor, ".") - return value ?: minor - } override fun toString(): String { - return major + appendOpt(minor, ".") + appendOpt(releaseType, "-") + return version.toString() } - fun toMavenSnapshot() = "$major.${minorMainPart()}-SNAPSHOT" + fun toMavenSnapshot() = "${version.major}.${version.minor}-SNAPSHOT" } From 44e99f13c835daff0a5483910b005ec47c6c1149 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sun, 29 Sep 2024 01:44:41 +0200 Subject: [PATCH 29/33] fix the GetMpsInBrowser task --- .../de/itemis/mps/gradle/GetMpsInBrowser.kt | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt b/src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt index aed3646..e1f58d5 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/GetMpsInBrowser.kt @@ -12,25 +12,24 @@ open class GetMpsInBrowser : DefaultTask() { @Input var version: String? = null - - private fun getMajorPart(): String { - val split = version?.split(".") - return if (split?.size == 2) { - version!! - } else { - split?.take(2)?.joinToString(".") ?: "" - } + + private fun getMajorMinorPart(): String { + val mpsVersion = MPSVersion.parse(version!!) + return "${mpsVersion.version.major}.${mpsVersion.version.minor}" } private fun getDownloadUrl(): URI { - val major = getMajorPart() + val majorMinor = getMajorMinorPart() return when { - Os.isFamily(Os.FAMILY_WINDOWS) -> URI("https://download.jetbrains.com/mps/$major/MPS-$version.exe") - Os.isFamily(Os.FAMILY_MAC) -> URI("https://download.jetbrains.com/mps/$major/MPS-$version-macos-jdk-bundled.dmg") - Os.isFamily(Os.FAMILY_UNIX) -> URI("https://download.jetbrains.com/mps/$major/MPS-$version.tar.gz") + Os.isFamily(Os.FAMILY_WINDOWS) -> URI("https://download.jetbrains.com/mps/$majorMinor/MPS-$version.exe") + Os.isFamily(Os.FAMILY_MAC) -> { + val suffix = if(Os.isArch("aarch64")) "-aarch64" else "" + URI("https://download.jetbrains.com/mps/$majorMinor/MPS-$version-macos${suffix}.dmg") + } + Os.isFamily(Os.FAMILY_UNIX) -> URI("https://download.jetbrains.com/mps/$majorMinor/MPS-$version.tar.gz") else -> { println("Warning: could not determine OS, downloading generic distribution") - URI("http://download.jetbrains.com/mps/$major/MPS-$version.zip") + URI("http://download.jetbrains.com/mps/$majorMinor/MPS-$version.zip") } } } From e4d868c1f240a8fcc58b1da7903485036a768726 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sun, 29 Sep 2024 02:03:33 +0200 Subject: [PATCH 30/33] runmigrations: use the MPSVersion wrapper class --- .../de/itemis/mps/gradle/runmigrations/Plugin.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/runmigrations/Plugin.kt b/src/main/kotlin/de/itemis/mps/gradle/runmigrations/Plugin.kt index fa76f9c..b277365 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/runmigrations/Plugin.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/runmigrations/Plugin.kt @@ -1,8 +1,7 @@ package de.itemis.mps.gradle.runmigrations -import de.itemis.mps.gradle.BasePluginExtensions +import de.itemis.mps.gradle.* import de.itemis.mps.gradle.ErrorMessages -import de.itemis.mps.gradle.getMPSVersion import de.itemis.mps.gradle.runAnt import groovy.xml.MarkupBuilder import net.swiftzer.semver.SemVer @@ -56,17 +55,17 @@ open class RunMigrationsMpsProjectPlugin : Plugin { } val mpsVersion = extension.getMPSVersion(extensionName) - val parsedMPSVersion = SemVer.parse(mpsVersion) + val parsedMPSVersion:MPSVersion = MPSVersion.parse(mpsVersion) - if (extension.force != null && parsedMPSVersion < MIN_VERSION_FOR_FORCE) { + if (extension.force != null && parsedMPSVersion.version < MIN_VERSION_FOR_FORCE) { throw GradleException("The force migration flag is only supported for MPS version $MIN_VERSION_FOR_FORCE and higher.") } - if (extension.haltOnPrecheckFailure != null && parsedMPSVersion < MIN_VERSION_FOR_HALT_ON_PRECHECK_FAILURE) { + if (extension.haltOnPrecheckFailure != null && parsedMPSVersion.version < MIN_VERSION_FOR_HALT_ON_PRECHECK_FAILURE) { throw GradleException("The 'do not halt on pre-check failure' option is only supported for MPS version $MIN_VERSION_FOR_HALT_ON_PRECHECK_FAILURE and higher.") } - if (extension.haltOnDependencyError != null && parsedMPSVersion < MIN_VERSION_FOR_HALT_ON_DEPENDENCY_ERROR) { + if (extension.haltOnDependencyError != null && parsedMPSVersion.version < MIN_VERSION_FOR_HALT_ON_DEPENDENCY_ERROR) { throw GradleException("The 'do not halt on dependency error' option is only supported for MPS version $MIN_VERSION_FOR_HALT_ON_DEPENDENCY_ERROR and higher.") } From fb3b5d4f13d6073dc1cdaa96387fb30194dd5b68 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sun, 29 Sep 2024 08:49:55 +0200 Subject: [PATCH 31/33] update documentation/changelog + fix a wrong task name --- CHANGELOG.md | 21 +++++++++++++++++++ docs/plugins/download-jbr.md | 3 +++ .../de/itemis/mps/gradle/common.gradle.kts | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14bbaee..0f0772c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 1.29.0 + +### Changed + +- Upgraded to Gradle 8.10.2 and Kotlin to 1.9.24. + +### Added + +- A few new helper functions are now available through extensions when applying `de.itemis.mps.gradle.common`: + - `ci` (determineCI(), isCI(), buildNumber(), registerDependencyRepositories()) + - `jdk` (determine(JavaVersion)) + - `itemis` (mbeddrGitHub(), itemisNexus()) + - `githubAuth` (user, token) + - `directories` (artifactsDir(), scriptFile(String), jnLibraryPath()) +- `de.itemis.mps.gradle.common` creates configurations for MPS (`common_mps`), language dependencies (`common_languageLibs`) and the ant lib (common_antLib) automatically. Tasks `commonCleanMps` and `commonResolveMps` are also created when you apply `de.itemis.mps.gradle.common`. +- The plugin `downloadJbr` has a new flag `defaultJavaExecutable` to set the downloaded JBR as the default Java executable. + +### Fixed + +- The `GetMpsInBrowser` task works again for all platforms including Mac Apple Silicon. + ## 1.28.0 ### Added diff --git a/docs/plugins/download-jbr.md b/docs/plugins/download-jbr.md index ea295d7..19adbff 100644 --- a/docs/plugins/download-jbr.md +++ b/docs/plugins/download-jbr.md @@ -30,6 +30,7 @@ repositories { downloadJbr { jbrVersion = "11_0_6-b520.66" + defaultJavaExecutable.set(true) // optional } ``` @@ -45,6 +46,7 @@ repositories { downloadJbr { jbrVersion = '11_0_6-b520.66' + defaultJavaExecutable.set(true) // optional } ``` @@ -52,6 +54,7 @@ downloadJbr { * `jbrVersion` - version of the JBR to download. While this supports maven version selectors we highly recommend not using wildcards like `*` or `+` in there for reproducible builds. +* `defaultJavaExecutable` - set the downloaded JBR as the default Java executable * `distributionType` - optional distribution type for the JBR to use. Will default to `jbr_jcef` if omitted. * `downloadDir` - optional directory where the downloaded JBR is downloaded and extracted to. The plugin defaults to `build/jbrDownload`. diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 31104d9..bd29dd7 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -134,7 +134,7 @@ tasks.register("commonCleanMps") { } tasks.named("clean") { - dependsOn("cleanMPS") + dependsOn("commonCleanMPS") } extensions.create("githubAuth", project) From f1d5f21590d240fccf838cebe5f19a63de9c9232 Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sun, 29 Sep 2024 09:02:19 +0200 Subject: [PATCH 32/33] fix warnings --- .../de/itemis/mps/gradle/common.gradle.kts | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index bd29dd7..5c4a989 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -35,6 +35,7 @@ configurations.create(BackendConfigurations.REMIGRATE_BACKEND_CONFIGURATION_NAME extensions.create("ci", project) abstract class CI(val _project: Project) { + @Suppress("unused") fun determineCI() { if(System.getenv("CI").toBoolean()) { _project.extra["ciBuild"] = true @@ -42,11 +43,14 @@ abstract class CI(val _project: Project) { _project.extra["ciBuild"] = _project.hasProperty("teamcity") } } - + + @Suppress("unused") fun isCI() = _project.extra["ciBuild"] - + + @Suppress("unused") fun buildNumber() = System.getenv("GITHUB_RUN_NUMBER").toIntOrNull() ?: System.getenv("BUILD_NUMBER").toInt() - + + @Suppress("unused") fun registerDependencyRepositories(repositories: ArrayList) { for (repoUrl in repositories) { _project.repositories.maven { @@ -63,6 +67,7 @@ abstract class CI(val _project: Project) { extensions.create("jdk", project) abstract class JDK(val _project: Project) { + @Suppress("unused") fun determine(javaVersion: JavaVersion) { if (_project.extra.has("java${javaVersion}_home")) { _project.extra["jdk_home"] = _project.extra.get("java${javaVersion}_home") @@ -87,10 +92,13 @@ abstract class JDK(val _project: Project) { } } -extensions.create("itemis",buildscript) +extensions.create("itemis") -abstract class Itemis(val bs: ScriptHandler) { +abstract class Itemis() { + @Suppress("unused") fun mbeddrGitHub() = "https://maven.pkg.github.com/mbeddr/*" + + @Suppress("unused") fun itemisNexus() = "https://artifacts.itemis.cloud/repository/maven-mps/" } @@ -139,7 +147,7 @@ tasks.named("clean") { extensions.create("githubAuth", project) -abstract class GitHubAuth(val _project: Project) { +abstract class GitHubAuth(_project: Project) { val user:String? = (_project.findProperty("github_username") ?: System.getenv("GITHUB_ACTOR"))?.toString() val token:String? = (_project.findProperty("github_token") ?: System.getenv("GITHUB_TOKEN"))?.toString() } @@ -147,9 +155,12 @@ abstract class GitHubAuth(val _project: Project) { extensions.create("directories",project) abstract class Directories(val _project: Project) { + @Suppress("unused") fun artifactsDir() :File = _project.file("${_project.layout.projectDirectory}/artifacts") - + + @Suppress("unused") fun scriptFile(name:String):File = _project.file("${_project.layout.projectDirectory}/scripts/$name") - + + @Suppress("unused") fun jnLibraryPath():File = File(_project.extra["mpsHomeDir"].toString(), "lib/jna/${System.getProperty("os.arch")}") } \ No newline at end of file From a78e9e937972a220131f95a35b0f043f8be9f9ee Mon Sep 17 00:00:00 2001 From: Alexander Pann Date: Sun, 29 Sep 2024 09:24:09 +0200 Subject: [PATCH 33/33] fix some small issues --- api/mps-gradle-plugin.api | 168 ++++++++++++------ .../de/itemis/mps/gradle/common.gradle.kts | 13 +- .../itemis/mps/gradle/downloadJBR/Plugin.kt | 5 +- 3 files changed, 123 insertions(+), 63 deletions(-) diff --git a/api/mps-gradle-plugin.api b/api/mps-gradle-plugin.api index f5f9d1b..891f09b 100644 --- a/api/mps-gradle-plugin.api +++ b/api/mps-gradle-plugin.api @@ -30,31 +30,32 @@ public class de/itemis/mps/gradle/BuildLanguages : de/itemis/mps/gradle/RunAntSc public fun ()V } -public class de/itemis/mps/gradle/BundleMacosJdk : org/gradle/api/DefaultTask, groovy/lang/GroovyObject { - public static synthetic field __$stMC Z - protected synthetic fun $getStaticMetaClass ()Lgroovy/lang/MetaClass; +public class de/itemis/mps/gradle/BundleMacosJdk : org/gradle/api/DefaultTask { + public field jdk Ljava/io/File; + public field outputFile Ljava/io/File; + public field rcpArtifact Ljava/io/File; public fun ()V - public fun build ()Ljava/lang/Object; - public fun getJdk ()Ljava/io/File; - public fun getJdkDirname ()Ljava/lang/String; - public fun getMetaClass ()Lgroovy/lang/MetaClass; - public fun getOutputFile ()Ljava/io/File; - public fun getRcpArtifact ()Ljava/io/File; - public fun setJdk (Ljava/lang/Object;)Ljava/lang/Object; - public fun setJdkDependency (Ljava/lang/Object;)Ljava/lang/Object; - public fun setJdkDirname (Ljava/lang/String;)Ljava/lang/Object; - public fun setMetaClass (Lgroovy/lang/MetaClass;)V - public fun setOutputFile (Ljava/lang/Object;)Ljava/lang/Object; - public fun setRcpArtifact (Ljava/lang/Object;)Ljava/lang/Object; + public final fun build ()V + public final fun getJdk ()Ljava/io/File; + public final fun getJdkDirname ()Ljava/lang/String; + public final fun getOutputFile ()Ljava/io/File; + public final fun getRcpArtifact ()Ljava/io/File; + public final fun setJdk (Ljava/io/File;)V + public final fun setJdkDependency (Ljava/lang/Object;)V + public final fun setJdkDirname (Ljava/lang/String;)V + public final fun setOutputFile (Ljava/io/File;)V + public final fun setOutputFile (Ljava/lang/Object;)V + public final fun setRcpArtifact (Ljava/io/File;)V +} + +public final class de/itemis/mps/gradle/BundledScripts { + public static final field Companion Lde/itemis/mps/gradle/BundledScripts$Companion; + public fun ()V + public static final fun extractScriptsToDir (Ljava/io/File;[Ljava/lang/String;)V } -public class de/itemis/mps/gradle/BundledScripts : groovy/lang/GroovyObject { - public static synthetic field __$stMC Z - protected synthetic fun $getStaticMetaClass ()Lgroovy/lang/MetaClass; - public fun ()V - public static fun extractScriptsToDir (Ljava/io/File;[Ljava/lang/String;)V - public fun getMetaClass ()Lgroovy/lang/MetaClass; - public fun setMetaClass (Lgroovy/lang/MetaClass;)V +public final class de/itemis/mps/gradle/BundledScripts$Companion { + public final fun extractScriptsToDir (Ljava/io/File;[Ljava/lang/String;)V } public final class de/itemis/mps/gradle/CommonKt { @@ -72,28 +73,44 @@ public final class de/itemis/mps/gradle/CommonPlugin : org/gradle/api/Plugin { public fun apply (Lorg/gradle/api/Project;)V } -public class de/itemis/mps/gradle/CreateDmg : org/gradle/api/DefaultTask, groovy/lang/GroovyObject { - public static synthetic field __$stMC Z - protected synthetic fun $getStaticMetaClass ()Lgroovy/lang/MetaClass; +public abstract class de/itemis/mps/gradle/Common_gradle$CI { + public fun (Lorg/gradle/api/Project;)V + public final fun buildNumber ()I + public final fun determineCI ()V + public final fun get_project ()Lorg/gradle/api/Project; + public final fun isCI ()Ljava/lang/Object; + public final fun registerDependencyRepositories (Ljava/util/ArrayList;)V +} + +public abstract class de/itemis/mps/gradle/Common_gradle$Directories { + public fun (Lorg/gradle/api/Project;)V + public final fun artifactsDir ()Ljava/io/File; + public final fun get_project ()Lorg/gradle/api/Project; + public final fun jnLibraryPath ()Ljava/io/File; + public final fun scriptFile (Ljava/lang/String;)Ljava/io/File; +} + +public abstract class de/itemis/mps/gradle/Common_gradle$GitHubAuth { + public fun (Lorg/gradle/api/Project;)V + public final fun getToken ()Ljava/lang/String; + public final fun getUser ()Ljava/lang/String; +} + +public abstract class de/itemis/mps/gradle/Common_gradle$Itemis { public fun ()V - public fun build ()Ljava/lang/Object; - public fun getBackgroundImage ()Ljava/io/File; - public fun getDmgFile ()Ljava/io/File; - public fun getJdk ()Ljava/io/File; - public fun getMetaClass ()Lgroovy/lang/MetaClass; - public fun getRcpArtifact ()Ljava/io/File; - public fun getSignIdentity ()Ljava/lang/String; - public fun getSignKeyChain ()Ljava/io/File; - public fun getSignKeyChainPassword ()Ljava/lang/String; - public fun setBackgroundImage (Ljava/lang/Object;)Ljava/lang/Object; - public fun setDmgFile (Ljava/lang/Object;)Ljava/lang/Object; - public fun setJdk (Ljava/lang/Object;)Ljava/lang/Object; - public fun setJdkDependency (Ljava/lang/Object;)Ljava/lang/Object; - public fun setMetaClass (Lgroovy/lang/MetaClass;)V - public fun setRcpArtifact (Ljava/lang/Object;)Ljava/lang/Object; - public fun setSignIdentity (Ljava/lang/String;)V - public fun setSignKeyChain (Ljava/lang/Object;)Ljava/lang/Object; - public fun setSignKeyChainPassword (Ljava/lang/String;)V + public final fun itemisNexus ()Ljava/lang/String; + public final fun mbeddrGitHub ()Ljava/lang/String; +} + +public abstract class de/itemis/mps/gradle/Common_gradle$JDK { + public fun (Lorg/gradle/api/Project;)V + public final fun determine (Lorg/gradle/api/JavaVersion;)V + public final fun get_project ()Lorg/gradle/api/Project; +} + +public final class de/itemis/mps/gradle/Common_gradle$inlined$sam$i$org_gradle_api_Action$0 : org/gradle/api/Action { + public fun (Lkotlin/jvm/functions/Function1;)V + public final synthetic fun execute (Ljava/lang/Object;)V } public final class de/itemis/mps/gradle/EnvironmentKind : java/lang/Enum { @@ -118,15 +135,23 @@ public class de/itemis/mps/gradle/GenerateLibrariesXml : org/gradle/api/DefaultT public fun setOverrides (Ljava/lang/Object;)V } -public class de/itemis/mps/gradle/GetMpsInBrowser : org/gradle/api/DefaultTask, groovy/lang/GroovyObject { - public static synthetic field __$stMC Z - protected synthetic fun $getStaticMetaClass ()Lgroovy/lang/MetaClass; +public class de/itemis/mps/gradle/GetMpsInBrowser : org/gradle/api/DefaultTask { public fun ()V - public fun build ()Ljava/lang/Object; - public fun getMetaClass ()Lgroovy/lang/MetaClass; - public fun getVersion ()Ljava/lang/String; - public fun setMetaClass (Lgroovy/lang/MetaClass;)V - public fun setVersion (Ljava/lang/String;)Ljava/lang/Object; + public final fun build ()V + public final fun getVersion ()Ljava/lang/String; + public final fun setVersion (Ljava/lang/String;)V +} + +public final class de/itemis/mps/gradle/MPSVersion { + public static final field Companion Lde/itemis/mps/gradle/MPSVersion$Companion; + public synthetic fun (Lnet/swiftzer/semver/SemVer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getVersion ()Lnet/swiftzer/semver/SemVer; + public final fun toMavenSnapshot ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; +} + +public final class de/itemis/mps/gradle/MPSVersion$Companion { + public final fun parse (Ljava/lang/String;)Lde/itemis/mps/gradle/MPSVersion; } public final class de/itemis/mps/gradle/Macro { @@ -159,14 +184,10 @@ public final class de/itemis/mps/gradle/Plugin { public fun toString ()Ljava/lang/String; } -public class de/itemis/mps/gradle/Pom : groovy/lang/GroovyObject { - public static synthetic field __$stMC Z - protected synthetic fun $getStaticMetaClass ()Lgroovy/lang/MetaClass; +public final class de/itemis/mps/gradle/Pom { public fun ()V - public fun getMetaClass ()Lgroovy/lang/MetaClass; - public fun setMetaClass (Lgroovy/lang/MetaClass;)V - public fun withDep (Lorg/gradle/api/publish/maven/MavenPom;Lorg/gradle/api/artifacts/Configuration;)Ljava/lang/Object; - public fun withProvidedDep (Lorg/gradle/api/publish/maven/MavenPom;Lorg/gradle/api/artifacts/Configuration;)Ljava/lang/Object; + public final fun withDep (Lorg/gradle/api/publish/maven/MavenPom;Lorg/gradle/api/artifacts/Configuration;)V + public final fun withProvidedDep (Lorg/gradle/api/publish/maven/MavenPom;Lorg/gradle/api/artifacts/Configuration;)V } public class de/itemis/mps/gradle/RunAntScript : org/gradle/api/DefaultTask { @@ -197,12 +218,43 @@ public class de/itemis/mps/gradle/TestLanguages : de/itemis/mps/gradle/RunAntScr public fun ()V } +public class de/itemis/mps/gradle/de/itemis/mps/gradle/CreateDmg : org/gradle/api/DefaultTask { + public field backgroundImage Ljava/io/File; + public field dmgFile Ljava/io/File; + public field jdk Ljava/io/File; + public field rcpArtifact Ljava/io/File; + public fun ()V + public final fun build ()V + public final fun getBackgroundImage ()Ljava/io/File; + public final fun getDmgFile ()Ljava/io/File; + public final fun getJdk ()Ljava/io/File; + public final fun getRcpArtifact ()Ljava/io/File; + public final fun getSignIdentity ()Ljava/lang/String; + public final fun getSignKeyChain ()Ljava/io/File; + public final fun getSignKeyChainPassword ()Ljava/lang/String; + public final fun setBackgroundImage (Ljava/io/File;)V + public final fun setBackgroundImage (Ljava/lang/Object;)V + public final fun setDmgFile (Ljava/io/File;)V + public final fun setDmgFile (Ljava/lang/Object;)V + public final fun setJdk (Ljava/io/File;)V + public final fun setJdk (Ljava/lang/Object;)V + public final fun setJdkDependency (Ljava/lang/Object;)V + public final fun setRcpArtifact (Ljava/io/File;)V + public final fun setRcpArtifact (Ljava/lang/Object;)V + public final fun setSignIdentity (Ljava/lang/String;)V + public final fun setSignKeyChain (Ljava/io/File;)V + public final fun setSignKeyChain (Ljava/lang/Object;)V + public final fun setSignKeyChainPassword (Ljava/lang/String;)V +} + public class de/itemis/mps/gradle/downloadJBR/DownloadJbrConfiguration { public field jbrVersion Ljava/lang/String; public fun (Lorg/gradle/api/model/ObjectFactory;)V + public final fun getDefaultJavaExecutable ()Z public final fun getDistributionType ()Ljava/lang/String; public final fun getDownloadDir ()Ljava/io/File; public final fun getJbrVersion ()Ljava/lang/String; + public final fun setDefaultJavaExecutable (Z)V public final fun setDistributionType (Ljava/lang/String;)V public final fun setDownloadDir (Ljava/io/File;)V public final fun setJbrVersion (Ljava/lang/String;)V diff --git a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts index 5c4a989..7a6f38e 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts +++ b/src/main/kotlin/de/itemis/mps/gradle/common.gradle.kts @@ -126,10 +126,15 @@ if (project.extra["skipResolveMps"].toString().toBoolean()) { } } else { tasks.register("commonResolveMps") { - dependsOn(configurations.getByName("mps")) - dependsOn(configurations.getByName("common_mps")) - from(configurations.getByName("mps").resolve().map { zipTree(it) }) - from(configurations.getByName("common_mps").resolve().map { zipTree(it) }) + if(configurations.findByName("mps")!= null) { + dependsOn(configurations.getByName("mps")) + from(configurations.getByName("mps").resolve().map { zipTree(it) }) + } + if(configurations.findByName("common_mps")!= null) { + dependsOn(configurations.getByName("common_mps")) + from(configurations.getByName("common_mps").resolve().map { zipTree(it) }) + } + project.extra["mpsHomeDir"]?.let { into(it) } } } diff --git a/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt b/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt index 16a770a..cb49e01 100644 --- a/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt +++ b/src/main/kotlin/de/itemis/mps/gradle/downloadJBR/Plugin.kt @@ -6,6 +6,7 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.file.DirectoryProperty import org.gradle.api.model.ObjectFactory +import org.gradle.kotlin.dsl.extra import java.io.File import javax.inject.Inject @@ -15,6 +16,7 @@ open class DownloadJbrConfiguration @Inject constructor(objects: ObjectFactory) var distributionType : String? = null internal val downloadDirProperty: DirectoryProperty = objects.directoryProperty() + @Suppress("unused") var downloadDir: File? get() = downloadDirProperty.get().asFile set(value) { @@ -22,6 +24,7 @@ open class DownloadJbrConfiguration @Inject constructor(objects: ObjectFactory) } } +@Suppress("unused") open class DownloadJbrProjectPlugin : Plugin { override fun apply(project: Project) { project.run { @@ -86,7 +89,7 @@ open class DownloadJbrProjectPlugin : Plugin { )) javaExecutableProperty.set(jbrDirProperty.file(if (Os.isFamily(Os.FAMILY_WINDOWS)) "bin/java.exe" else "bin/java")) if(extension.defaultJavaExecutable) { - project.setProperty("itemis.mps.gradle.ant.defaultJavaExecutable",javaExecutableProperty.asFile) + project.extra["itemis.mps.gradle.ant.defaultJavaExecutable"] = javaExecutableProperty.asFile } } }