From b4d95fbdd396344cd510a0d1b9201a6eeaeb2f88 Mon Sep 17 00:00:00 2001 From: Victor Garcia Date: Mon, 5 Feb 2024 13:22:04 +0100 Subject: [PATCH 1/5] feat: add semanatic release setup --- .github/workflows/beta.yml | 20 ++++++++++ .github/workflows/check-new-version.sh | 8 ++++ .github/workflows/job-check-new-version.yml | 28 ++++++++++++++ .github/workflows/job-publish.yml | 37 ++++++++++++++++++ .github/workflows/job-test.yml | 19 +++++++++ .github/workflows/main.yml | 43 ++++++--------------- .github/workflows/publish-maven.sh | 9 +++++ .github/workflows/publish-npm.sh | 15 +++++++ .github/workflows/pull_request.yml | 14 +------ build.gradle.kts | 20 ++++++++-- settings.gradle.kts | 5 +++ 11 files changed, 169 insertions(+), 49 deletions(-) create mode 100644 .github/workflows/beta.yml create mode 100755 .github/workflows/check-new-version.sh create mode 100644 .github/workflows/job-check-new-version.yml create mode 100644 .github/workflows/job-publish.yml create mode 100644 .github/workflows/job-test.yml create mode 100755 .github/workflows/publish-maven.sh create mode 100755 .github/workflows/publish-npm.sh diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml new file mode 100644 index 0000000..8a39b48 --- /dev/null +++ b/.github/workflows/beta.yml @@ -0,0 +1,20 @@ +name: Beta branch + +on: + push: + branches: + - 'beta' + +jobs: + unit-test: + uses: ./.github/workflows/job-test.yml + + check-new-version: + needs: unit-test + uses: ./.github/workflows/job-check-new-version.yml + + publish: + needs: check-new-version + if: ${{ needs.check-new-version.outputs.isNewVersion == 'true' }} + uses: ./.github/workflows/job-publish.yml + secrets: inherit diff --git a/.github/workflows/check-new-version.sh b/.github/workflows/check-new-version.sh new file mode 100755 index 0000000..1d80e58 --- /dev/null +++ b/.github/workflows/check-new-version.sh @@ -0,0 +1,8 @@ +# Check if new version +./gradlew checkIsNewVersion -q; newVersion=$? + +if [ $newVersion -ne 0 ]; then + echo "isNewVersion=false" >> "$GITHUB_OUTPUT" +else + echo "isNewVersion=true" >> "$GITHUB_OUTPUT" +fi \ No newline at end of file diff --git a/.github/workflows/job-check-new-version.yml b/.github/workflows/job-check-new-version.yml new file mode 100644 index 0000000..66d2a72 --- /dev/null +++ b/.github/workflows/job-check-new-version.yml @@ -0,0 +1,28 @@ +on: + workflow_call: + outputs: + isNewVersion: + description: "Indicates if this build generates a new version" + value: ${{ jobs.check-new-version.outputs.isNewVersion }} + +jobs: + check-new-version: + name: Check new version + runs-on: ubuntu-latest + outputs: + isNewVersion: ${{ steps.newVersion.outputs.isNewVersion }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: 'gradle' + - name: Change wrapper permission + run: chmod +x ./gradlew + - id: newVersion + name: Check new version + run: ./.github/workflows/check-new-version.sh \ No newline at end of file diff --git a/.github/workflows/job-publish.yml b/.github/workflows/job-publish.yml new file mode 100644 index 0000000..e13c4ae --- /dev/null +++ b/.github/workflows/job-publish.yml @@ -0,0 +1,37 @@ +on: + workflow_call + +jobs: + publish: + name: Publish + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: 'gradle' + - name: Change wrapper permission + run: chmod +x ./gradlew + + - uses: actions/setup-node@v1 + with: + node-version: 14.x + + - name: Create version tag + run: ./gradlew :nyxMark + + - name: Publish Maven + run: ./.github/workflows/publish-maven.sh + env: + OSSRH_USERNAME: ${{ secrets.SONATYPE_OSSRH_USERNAME }} + OSSRH_PASSWORD: ${{ secrets.SONATYPE_OSSRH_PASSWORD }} + + - name: Publish NPMJS + run: ./.github/workflows/publish-npm.sh + env: + NPMJS_TOKEN: ${{ secrets.DHIS2_BOT_NPM_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/job-test.yml b/.github/workflows/job-test.yml new file mode 100644 index 0000000..2c719cf --- /dev/null +++ b/.github/workflows/job-test.yml @@ -0,0 +1,19 @@ +on: + workflow_call + +jobs: + unit-test: + name: Run tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: 'gradle' + - name: Change wrapper permission + run: chmod +x ./gradlew + - name: Test + run: ./gradlew clean allTests \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7d0369b..fae97eb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: Run tests +name: Main branch on: push: @@ -7,35 +7,14 @@ on: jobs: unit-test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: 17 - distribution: temurin - cache: 'gradle' - - name: Change wrapper permission - run: chmod +x ./gradlew - - name: Test - run: ./gradlew clean allTests - publish: - name: Publish - Nexus - runs-on: ubuntu-latest + uses: ./.github/workflows/job-test.yml + + check-new-version: needs: unit-test - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: 17 - distribution: temurin - cache: 'gradle' - - name: Change wrapper permission - run: chmod +x ./gradlew - - name: Release Maven package - run: ./gradlew publishAllPublicationsToSonatypeRepository - env: - OSSRH_USERNAME: ${{ secrets.SONATYPE_OSSRH_USERNAME }} - OSSRH_PASSWORD: ${{ secrets.SONATYPE_OSSRH_PASSWORD }} + uses: ./.github/workflows/job-check-new-version.yml + + publish: + needs: check-new-version + if: ${{ needs.check-new-version.outputs.isNewVersion == 'true' }} + uses: ./.github/workflows/job-publish.yml + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/publish-maven.sh b/.github/workflows/publish-maven.sh new file mode 100755 index 0000000..944f3c6 --- /dev/null +++ b/.github/workflows/publish-maven.sh @@ -0,0 +1,9 @@ +set -x + +branch=$(git rev-parse --abbrev-ref HEAD) + +if [ "$branch" = "main" ]; then + ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository +elif [ "$branch" = "beta" ]; then + ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository -PbetaToSnapshot +fi diff --git a/.github/workflows/publish-npm.sh b/.github/workflows/publish-npm.sh new file mode 100755 index 0000000..8d00b6f --- /dev/null +++ b/.github/workflows/publish-npm.sh @@ -0,0 +1,15 @@ +set -x + +branch=$(git rev-parse --abbrev-ref HEAD) + +./gradlew packJsPackage +cd build/packages/js || exit + +# Set authentication token for npmjs registry +npm set //registry.npmjs.org/:_authToken="$NPMJS_TOKEN" + +if [ "$branch" = "main" ]; then + npm publish +elif [ "$branch" = "beta" ]; then + npm publish --tag beta +fi diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index ea4e450..424092b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -4,16 +4,4 @@ on: [pull_request] jobs: unit-test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: 17 - distribution: temurin - cache: 'gradle' - - name: Change wrapper permission - run: chmod +x ./gradlew - - name: Test - run: ./gradlew clean allTests + uses: ./.github/workflows/job-test.yml diff --git a/build.gradle.kts b/build.gradle.kts index b44ebe4..80fa79a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,5 @@ +import com.mooltiverse.oss.nyx.gradle.CoreTask + plugins { kotlin("multiplatform") id("maven-publish-conventions") @@ -9,11 +11,21 @@ repositories { } group = "org.hisp.dhis.lib.expression" -version = "1.1.0-SNAPSHOT" -val isReleaseVersion = project.hasProperty("removeSnapshot") -if (isReleaseVersion) { - version = (version as String).replace("-SNAPSHOT", "") +if (project.hasProperty("betaToSnapshot")) { + val mainVersion = (version as String).split("-beta")[0] + version = "$mainVersion-SNAPSHOT" +} + +tasks.register("checkIsNewVersion") { + val state = project.properties[CoreTask.NYX_STATE_PROPERTY] as com.mooltiverse.oss.nyx.state.State + + if (state.newVersion) { + println("This build generates a new version ${state.version}") + } else { + println("This build does not generate a new version ${state.version}") + throw StopExecutionException("There is no new version") + } } kotlin { diff --git a/settings.gradle.kts b/settings.gradle.kts index c82b298..5c27c43 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,6 +7,11 @@ pluginManagement { plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" + id("com.mooltiverse.oss.nyx") version "2.5.2" +} + +configure { + preset.set("extended") } rootProject.name = "expression-parser" From 3e2fc4530c240954b7c01160c4c7ce9a72bf077a Mon Sep 17 00:00:00 2001 From: Victor Garcia Date: Tue, 6 Feb 2024 10:54:42 +0100 Subject: [PATCH 2/5] refactor: consolidate github flows --- .github/workflows/beta.yml | 20 ------------------- .github/workflows/job-check-new-version.yml | 2 +- .github/workflows/job-publish.yml | 4 ++-- .github/workflows/main.yml | 1 + .../{ => scripts}/check-new-version.sh | 0 .../workflows/{ => scripts}/publish-maven.sh | 0 .../workflows/{ => scripts}/publish-npm.sh | 0 7 files changed, 4 insertions(+), 23 deletions(-) delete mode 100644 .github/workflows/beta.yml rename .github/workflows/{ => scripts}/check-new-version.sh (100%) rename .github/workflows/{ => scripts}/publish-maven.sh (100%) rename .github/workflows/{ => scripts}/publish-npm.sh (100%) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml deleted file mode 100644 index 8a39b48..0000000 --- a/.github/workflows/beta.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Beta branch - -on: - push: - branches: - - 'beta' - -jobs: - unit-test: - uses: ./.github/workflows/job-test.yml - - check-new-version: - needs: unit-test - uses: ./.github/workflows/job-check-new-version.yml - - publish: - needs: check-new-version - if: ${{ needs.check-new-version.outputs.isNewVersion == 'true' }} - uses: ./.github/workflows/job-publish.yml - secrets: inherit diff --git a/.github/workflows/job-check-new-version.yml b/.github/workflows/job-check-new-version.yml index 66d2a72..f49a522 100644 --- a/.github/workflows/job-check-new-version.yml +++ b/.github/workflows/job-check-new-version.yml @@ -25,4 +25,4 @@ jobs: run: chmod +x ./gradlew - id: newVersion name: Check new version - run: ./.github/workflows/check-new-version.sh \ No newline at end of file + run: ./.github/workflows/scripts/check-new-version.sh \ No newline at end of file diff --git a/.github/workflows/job-publish.yml b/.github/workflows/job-publish.yml index e13c4ae..abc01e4 100644 --- a/.github/workflows/job-publish.yml +++ b/.github/workflows/job-publish.yml @@ -26,12 +26,12 @@ jobs: run: ./gradlew :nyxMark - name: Publish Maven - run: ./.github/workflows/publish-maven.sh + run: ./.github/workflows/scripts/publish-maven.sh env: OSSRH_USERNAME: ${{ secrets.SONATYPE_OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.SONATYPE_OSSRH_PASSWORD }} - name: Publish NPMJS - run: ./.github/workflows/publish-npm.sh + run: ./.github/workflows/scripts/publish-npm.sh env: NPMJS_TOKEN: ${{ secrets.DHIS2_BOT_NPM_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fae97eb..6d13d08 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,6 +4,7 @@ on: push: branches: - 'main' + - 'beta' jobs: unit-test: diff --git a/.github/workflows/check-new-version.sh b/.github/workflows/scripts/check-new-version.sh similarity index 100% rename from .github/workflows/check-new-version.sh rename to .github/workflows/scripts/check-new-version.sh diff --git a/.github/workflows/publish-maven.sh b/.github/workflows/scripts/publish-maven.sh similarity index 100% rename from .github/workflows/publish-maven.sh rename to .github/workflows/scripts/publish-maven.sh diff --git a/.github/workflows/publish-npm.sh b/.github/workflows/scripts/publish-npm.sh similarity index 100% rename from .github/workflows/publish-npm.sh rename to .github/workflows/scripts/publish-npm.sh From 1f247d9077b564e547a9fb31e2ba9d27812646e8 Mon Sep 17 00:00:00 2001 From: Victor Garcia Date: Wed, 7 Feb 2024 08:32:06 +0100 Subject: [PATCH 3/5] update github action versions --- .github/workflows/job-check-new-version.yml | 4 ++-- .github/workflows/job-publish.yml | 6 +++--- .github/workflows/job-test.yml | 4 ++-- .github/workflows/scripts/publish-maven.sh | 2 +- .../src/main/kotlin/maven-publish-conventions.gradle.kts | 4 +--- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.github/workflows/job-check-new-version.yml b/.github/workflows/job-check-new-version.yml index f49a522..e48e41a 100644 --- a/.github/workflows/job-check-new-version.yml +++ b/.github/workflows/job-check-new-version.yml @@ -12,11 +12,11 @@ jobs: outputs: isNewVersion: ${{ steps.newVersion.outputs.isNewVersion }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: temurin diff --git a/.github/workflows/job-publish.yml b/.github/workflows/job-publish.yml index abc01e4..a60f7c1 100644 --- a/.github/workflows/job-publish.yml +++ b/.github/workflows/job-publish.yml @@ -6,11 +6,11 @@ jobs: name: Publish runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: temurin @@ -18,7 +18,7 @@ jobs: - name: Change wrapper permission run: chmod +x ./gradlew - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v4 with: node-version: 14.x diff --git a/.github/workflows/job-test.yml b/.github/workflows/job-test.yml index 2c719cf..4d6e58a 100644 --- a/.github/workflows/job-test.yml +++ b/.github/workflows/job-test.yml @@ -6,9 +6,9 @@ jobs: name: Run tests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: temurin diff --git a/.github/workflows/scripts/publish-maven.sh b/.github/workflows/scripts/publish-maven.sh index 944f3c6..aecb3a5 100755 --- a/.github/workflows/scripts/publish-maven.sh +++ b/.github/workflows/scripts/publish-maven.sh @@ -5,5 +5,5 @@ branch=$(git rev-parse --abbrev-ref HEAD) if [ "$branch" = "main" ]; then ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository elif [ "$branch" = "beta" ]; then - ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository -PbetaToSnapshot + ./gradlew publishToSonatype -PbetaToSnapshot fi diff --git a/buildSrc/src/main/kotlin/maven-publish-conventions.gradle.kts b/buildSrc/src/main/kotlin/maven-publish-conventions.gradle.kts index 3914aeb..1c62a20 100644 --- a/buildSrc/src/main/kotlin/maven-publish-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/maven-publish-conventions.gradle.kts @@ -10,8 +10,6 @@ val ossrhPassword: String? = System.getenv("OSSRH_PASSWORD") val signingPrivateKey: String? = System.getenv("SIGNING_PRIVATE_KEY") val signingPassword: String? = System.getenv("SIGNING_PASSWORD") -val isReleaseVersion = (version as String).contains("SNAPSHOT") - val dokkaHtml = tasks.findByName("dokkaHtml")!! val dokkaHtmlJar = tasks.register("dokkaHtmlJar") { @@ -68,7 +66,7 @@ nexusPublishing { } signing { - isRequired = isReleaseVersion + setRequired({ !version.toString().endsWith("-SNAPSHOT") }) useInMemoryPgpKeys(signingPrivateKey, signingPassword) sign(publishing.publications) } From 63d5e66b1bb3bdec4b120612ebf57a727ade1626 Mon Sep 17 00:00:00 2001 From: Victor Garcia Date: Thu, 8 Feb 2024 08:54:50 +0100 Subject: [PATCH 4/5] refactor: add private=false to package.json --- .github/workflows/main.yml | 2 +- buildSrc/src/main/kotlin/npm-publish-conventions.gradle.kts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6d13d08..745cb6a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: Main branch +name: Main on: push: diff --git a/buildSrc/src/main/kotlin/npm-publish-conventions.gradle.kts b/buildSrc/src/main/kotlin/npm-publish-conventions.gradle.kts index 68aeb3a..26069c6 100644 --- a/buildSrc/src/main/kotlin/npm-publish-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/npm-publish-conventions.gradle.kts @@ -29,6 +29,7 @@ project.afterEvaluate { "publishConfig" by { "access" by "public" } + "private" by false } } } From 8b426921c91ce655c5accea222254d5611de8af4 Mon Sep 17 00:00:00 2001 From: Victor Garcia Date: Wed, 14 Feb 2024 11:11:33 +0100 Subject: [PATCH 5/5] fix: use separate config file --- .github/workflows/job-publish.yml | 8 +++- .nyx.yaml | 63 +++++++++++++++++++++++++++++++ settings.gradle.kts | 4 -- 3 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 .nyx.yaml diff --git a/.github/workflows/job-publish.yml b/.github/workflows/job-publish.yml index a60f7c1..403a4d4 100644 --- a/.github/workflows/job-publish.yml +++ b/.github/workflows/job-publish.yml @@ -22,16 +22,20 @@ jobs: with: node-version: 14.x - - name: Create version tag - run: ./gradlew :nyxMark + - name: Publish to github + run: ./gradlew :nyxPublish + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Publish Maven + if: ${{ false }} run: ./.github/workflows/scripts/publish-maven.sh env: OSSRH_USERNAME: ${{ secrets.SONATYPE_OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.SONATYPE_OSSRH_PASSWORD }} - name: Publish NPMJS + if: ${{ false }} run: ./.github/workflows/scripts/publish-npm.sh env: NPMJS_TOKEN: ${{ secrets.DHIS2_BOT_NPM_TOKEN }} \ No newline at end of file diff --git a/.nyx.yaml b/.nyx.yaml new file mode 100644 index 0000000..9782a25 --- /dev/null +++ b/.nyx.yaml @@ -0,0 +1,63 @@ +--- +# starting from the "simple" preset gives us: +# - the Conventional Commits convention +preset: "simple" +changelog: + path: "CHANGELOG.md" + sections: + "Added": "^feat$" + "Fixed": "^fix$" +releaseTypes: + enabled: + - mainline + - maturity + - internal + publicationServices: + - github + items: + mainline: + description: "{{#fileContent}}CHANGELOG.md{{/fileContent}}" + filterTags: "^({{configuration.releasePrefix}})?([0-9]\\d*)\\.([0-9]\\d*)\\.([0-9]\\d*)$" + gitPush: "true" + gitTag: "true" + matchBranches: "^(master|main)$" + matchEnvironmentVariables: + CI: "^true$" # only match this release type when running on CI servers + matchWorkspaceStatus: "CLEAN" # only match this release type when the repository is clean + publish: "true" + maturity: + description: "{{#fileContent}}CHANGELOG.md{{/fileContent}}" + collapseVersions: true + collapsedVersionQualifier: "{{#sanitizeLower}}{{branch}}{{/sanitizeLower}}" + filterTags: "^({{configuration.releasePrefix}})?([0-9]\\d*)\\.([0-9]\\d*)\\.([0-9]\\d*)(-(alpha|beta)(\\.([0-9]\\d*))?)?$" + gitPush: "true" + gitTag: "true" + matchBranches: "^(alpha|beta)$" + matchWorkspaceStatus: "CLEAN" # only match this release type when the repository is clean + publish: "true" + publishPreRelease: "true" + # "internal" overrides the release type with the same name from the preset adding some qualifiers and is the global fallback for all release types + internal: + collapseVersions: true + collapsedVersionQualifier: "internal" + gitPush: "false" + gitTag: "false" + identifiers: + - + qualifier: "{{#sanitizeLower}}{{branch}}{{/sanitizeLower}}" + position: "BUILD" + - + qualifier: "{{#short5}}{{releaseScope.finalCommit}}{{/short5}}" + position: "BUILD" + - + qualifier: "{{#timestampYYYYMMDDHHMMSS}}{{timestamp}}{{/timestampYYYYMMDDHHMMSS}}" + position: "BUILD" + publish: "false" + publishPreRelease: "false" +services: + github: + type: "GITHUB" + options: + AUTHENTICATION_TOKEN: "{{#environmentVariable}}GH_TOKEN{{/environmentVariable}}" + REPOSITORY_NAME: "expression-parser" + REPOSITORY_OWNER: "vgarciabnz" \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 5c27c43..31a0554 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,8 +10,4 @@ plugins { id("com.mooltiverse.oss.nyx") version "2.5.2" } -configure { - preset.set("extended") -} - rootProject.name = "expression-parser"