diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml index f3053bc..e56d094 100644 --- a/.github/workflows/github-release.yml +++ b/.github/workflows/github-release.yml @@ -44,7 +44,7 @@ jobs: distribution: 'graalvm-community' - name: Publish Release to Github - run: ./gradlew jreleaserRelease --stacktrace --no-daemon + run: ./gradlew jreleaserRelease -Prelease --stacktrace --no-daemon env: JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }} JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }} diff --git a/.github/workflows/module-release-graalvm.yml b/.github/workflows/module-release-graalvm.yml index 97e903c..f31d5f7 100644 --- a/.github/workflows/module-release-graalvm.yml +++ b/.github/workflows/module-release-graalvm.yml @@ -60,16 +60,16 @@ jobs: - name: Prepare maven publish run: | if [ -n "${{ inputs.module }}" ]; then - ./gradlew publish -Pmodule=${{ inputs.module }} + ./gradlew publish -Prelease -Pmodule=${{ inputs.module }} else - ./gradlew publish + ./gradlew publish -Prelease fi env: JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }} JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }} - name: Release to Maven Central portal - run: ./infra/module-release-with-retry.sh ${{ inputs.module }} 5 20 + run: ./infra/module-release-with-retry.sh "${{ inputs.module }}" 5 20 -Prelease env: JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }} JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }} diff --git a/.gitignore b/.gitignore index 2adfe15..dc0ec1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # Gradle .gradle/ -build/ +/build/ !gradle/wrapper/gradle-wrapper.jar # IDE diff --git a/build.gradle.kts b/build.gradle.kts index 7baaa39..354e03c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,6 @@ +import io.flamingock.build.PrintVersionTask +import io.flamingock.build.VersionManager + plugins { `java-library` `maven-publish` @@ -7,11 +10,12 @@ plugins { group = "io.flamingock" -version = "1.3.1" +val declaredVersion = "1.3.2-SNAPSHOT" +version = VersionManager.resolveVersion(declaredVersion, project.hasProperty("release")) val flamingockVersion = "1.2.1"//only for test -val templateApiVersion = "1.3.3" -val coreApiVersion = "1.3.2" +val templateApiVersion = "1.3.4" +val coreApiVersion = "1.3.3" repositories { mavenLocal() @@ -260,3 +264,5 @@ tasks.register("createStagingDeployFolder") { tasks.matching { it.name == "publish" }.configureEach { finalizedBy("createStagingDeployFolder") } + +tasks.register("printVersion") diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..876c922 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() +} diff --git a/buildSrc/src/main/kotlin/io/flamingock/build/PrintVersionTask.kt b/buildSrc/src/main/kotlin/io/flamingock/build/PrintVersionTask.kt new file mode 100644 index 0000000..0898fe0 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/flamingock/build/PrintVersionTask.kt @@ -0,0 +1,12 @@ +package io.flamingock.build + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction + +abstract class PrintVersionTask : DefaultTask() { + + @TaskAction + fun print() { + println(project.version) + } +} diff --git a/buildSrc/src/main/kotlin/io/flamingock/build/VersionManager.kt b/buildSrc/src/main/kotlin/io/flamingock/build/VersionManager.kt new file mode 100644 index 0000000..d432e26 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/flamingock/build/VersionManager.kt @@ -0,0 +1,17 @@ +package io.flamingock.build + +object VersionManager { + + private const val SNAPSHOT_SUFFIX = "-SNAPSHOT" + + fun resolveVersion(declaredVersion: String, isRelease: Boolean): String { + if (!isRelease) return declaredVersion + require(declaredVersion.endsWith(SNAPSHOT_SUFFIX)) { + "Cannot release: version '$declaredVersion' does not end with $SNAPSHOT_SUFFIX. " + + "This prevents accidental double-releases." + } + return declaredVersion.removeSuffix(SNAPSHOT_SUFFIX) + } + + fun isSnapshot(version: String): Boolean = version.endsWith(SNAPSHOT_SUFFIX) +} diff --git a/infra/module-release-with-retry.sh b/infra/module-release-with-retry.sh index cc04dbd..87646ea 100755 --- a/infra/module-release-with-retry.sh +++ b/infra/module-release-with-retry.sh @@ -3,6 +3,8 @@ module=$1 maxAttempts=${2:-3} waitingSeconds=${3:-20} +shift 3 2>/dev/null || true +extraFlags="$*" if [ -n "$module" ]; then MODULE_FLAG="-Pmodule=$module" @@ -12,7 +14,7 @@ else echo "Releasing bundle to Central Portal with max attempts[$maxAttempts] and $waitingSeconds seconds delay" fi for (( i=1; i<=maxAttempts; i++ )); do - if ./gradlew jreleaserDeploy $MODULE_FLAG --no-daemon --stacktrace; then + if ./gradlew jreleaserDeploy $MODULE_FLAG $extraFlags --no-daemon --stacktrace; then exit 0 fi if [ "$i" -eq "$maxAttempts" ]; then diff --git a/src/main/java/io/flamingock/template/mongodb/MongoChangeTemplate.java b/src/main/java/io/flamingock/template/mongodb/MongoChangeTemplate.java index eea8d46..4129620 100644 --- a/src/main/java/io/flamingock/template/mongodb/MongoChangeTemplate.java +++ b/src/main/java/io/flamingock/template/mongodb/MongoChangeTemplate.java @@ -74,14 +74,11 @@ * * @see MongoOperation */ -@ChangeTemplate( name = "mongodb-sync-template", multiStep = true) +@ChangeTemplate( name = "mongodb-sync-template", multiStep = true, reflectiveClasses = {MongoOperation.class}) public class MongoChangeTemplate extends AbstractChangeTemplate { private static final Logger log = LoggerFactory.getLogger(MongoChangeTemplate.class); - public MongoChangeTemplate() { - super(MongoOperation.class); - } /** * Executes the apply operation for the current step.