From 72b4bdfedf978d20256ec42549377ddffc67ec3f Mon Sep 17 00:00:00 2001 From: Allain Magyar Date: Thu, 15 Aug 2024 15:23:33 -0300 Subject: [PATCH] ci: add new release process for DEV Signed-off-by: Allain Magyar --- .github/workflows/build.yml | 80 +++++++++++++++++++++++++++ .github/workflows/release.yml | 33 ++--------- package.json | 100 ---------------------------------- release.config.mjs | 45 +++++++++++++++ 4 files changed, 130 insertions(+), 128 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 release.config.mjs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..8f2737f8 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,80 @@ +name: Build and Publish Revision + +concurrency: + group: release + +on: + workflow_dispatch: + push: + branches: + - "main" + +jobs: + build: + if: ${{ !contains(github.event.head_commit.message, 'chore(release)') }} + runs-on: ubuntu-latest + env: + GITHUB_ACTOR: "hyperledger-bot" + GITHUB_ACTOR_EMAIL: "hyperledger-bot@hyperledger.org" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true + SBT_OPTS: -Xmx2G + + permissions: + contents: write + packages: write + + steps: + - uses: actions/checkout@v4 + + - name: Setup Java and Scala + uses: olafurpg/setup-scala@v14 + with: + java-version: openjdk@1.11 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "lts/*" + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ env.GITHUB_ACTOR }} + password: ${{ env.GITHUB_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Get short commit hash + run: echo "COMMIT_HASH=${GITHUB_SHA::7}" >> $GITHUB_ENV + + - name: Set build number + run: echo "BUILD_NUMBER=${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + + - name: Extract version from version.sbt + id: get_version + run: | + VERSION=$(grep -Eo 'version := "[^"]+"' version.sbt | sed 's/version := "//; s/"//; s/-SNAPSHOT//') + echo "VERSION=${VERSION}" >> $GITHUB_ENV + + - name: Set build version + run: echo "BUILD_VERSION=${{ env.VERSION }}-${{ env.COMMIT_HASH }}-${{ env.BUILD_NUMBER }}" >> $GITHUB_ENV + + - name: Build and push Docker image + run: | + sbt "set version := \"${{ env.BUILD_VERSION }}\"" "docker:stage" + docker buildx build --platform=linux/arm64,linux/amd64 --push -t ghcr.io/hyperledger/identus-mediator:${{ env.BUILD_VERSION}} ./mediator/target/docker/stage + + - name: Trigger helm chart update + uses: peter-evans/repository-dispatch@v3 + with: + token: ${{ secrets.ATALA_GITHUB_TOKEN }} + repository: input-output-hk/atala-prism-helm-charts + event-type: build-chart-package + client-payload: '{"version": "${{ env.BUILD_VERSION }}", "chart": "mediator"}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 14f0d427..5fba7a7b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,38 +4,25 @@ concurrency: group: release on: - workflow_call: - inputs: - release-branch: - required: false - type: string - default: "main" workflow_dispatch: - inputs: - release-branch: - description: "Branch to release from" - required: false - default: "main" - -permissions: - contents: write - packages: write jobs: release: + runs-on: ubuntu-latest env: GITHUB_ACTOR: "hyperledger-bot" GITHUB_ACTOR_EMAIL: "hyperledger-bot@hyperledger.org" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} - runs-on: ubuntu-latest + permissions: + contents: write + packages: write + steps: - uses: actions/checkout@v4 with: token: ${{ secrets.IDENTUS_CI }} - ref: ${{ github.event.inputs.release-branch }} - fetch-depth: 0 - name: Setup Java and Scala uses: olafurpg/setup-scala@v14 @@ -47,14 +34,6 @@ jobs: with: node-version: "lts/*" - - name: Setup Helm - uses: azure/setup-helm@v3 - with: - version: "3.12.2" # default is latest (stable) - - - name: Setup yq - portable yaml processor - uses: mikefarah/yq@v4.34.2 - - name: Setup Scala.JS uses: japgolly/setup-scalajs@v1 @@ -93,6 +72,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.IDENTUS_CI }} run: | npm install - sed -i 's/\( FIRST_RELEASE\) = "1.0.0"/\1 = "0.15.0"/' node_modules/semantic-release/lib/definitions/constants.js - sed -i 's/\( FIRSTPRERELEASE\) = "1"/\1 = "0"/' node_modules/semantic-release/lib/definitions/constants.js npx semantic-release diff --git a/package.json b/package.json index 69224185..c66969c4 100644 --- a/package.json +++ b/package.json @@ -17,105 +17,5 @@ "prettier": "^3.3.2", "semantic-release": "^24.0.0", "semantic-release-slack-bot": "^4.0.2" - }, - "release": { - "branches": [ - { - "name": "main" - }, - { - "name": "prerelease/*", - "prerelease": "snapshot" - }, - { - "name": "beta", - "prerelease": true - } - ], - "tagFormat": "v${version}", - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - [ - "@semantic-release/exec", - { - "prepareCmd": "npm version ${nextRelease.version} --git-tag-version false" - } - ], - [ - "@semantic-release/exec", - { - "prepareCmd": "NODE_OPTIONS=--openssl-legacy-provider sbt -J-Xmx5120m \"release release-version ${nextRelease.version} next-version ${nextRelease.version}-SNAPSHOT with-defaults\"" - } - ], - [ - "@semantic-release/exec", - { - "prepareCmd": "yq eval -i '.appVersion = \"${nextRelease.version}\" | .version = \"${nextRelease.version}\"' ./infrastructure/charts/mediator/Chart.yaml" - } - ], - [ - "@semantic-release/exec", - { - "prepareCmd": "helm package -d infrastructure/charts -u infrastructure/charts/mediator" - } - ], - [ - "@semantic-release/exec", - { - "prepareCmd": "helm repo index --url \"https://raw.githubusercontent.com/hyperledger/identus-mediator/main/infrastructure/charts\" --merge index.yaml infrastructure/charts" - } - ], - [ - "@semantic-release/exec", - { - "prepareCmd": "yq -i -P infrastructure/charts/index.yaml" - } - ], - [ - "@semantic-release/exec", - { - "prepareCmd": "yq -i '.appVersion = \"${nextRelease.version}\"' ./infrastructure/charts/mediator/Chart.yaml" - } - ], - [ - "@semantic-release/exec", - { - "prepareCmd": "docker buildx build --platform=linux/arm64,linux/amd64 --push -t ghcr.io/hyperledger/identus-mediator:${nextRelease.version} ./mediator/target/docker/stage" - } - ], - [ - "@semantic-release/changelog", - { - "changelogFile": "CHANGELOG.md" - } - ], - [ - "@semantic-release/git", - { - "assets": [ - "version.sbt", - "CHANGELOG.md", - "package.json", - "package-lock.json", - "infrastructure/charts/mediator/Chart.yaml", - "infrastructure/charts/index.yaml", - "infrastructure/charts/*.tgz" - ], - "message": "chore(release): cut mediator ${nextRelease.version} release\n\n${nextRelease.notes}\n\nSigned-off-by: Hyperledger Bot " - } - ], - [ - "semantic-release-slack-bot", - { - "notifyOnSuccess": true, - "notifyOnFail": true, - "markdownReleaseNotes": true, - "onSuccessTemplate": { - "text": "A new version of Identus Mediator successfully released!\nVersion: `$npm_package_version`\nTag: $repo_url/releases/tag/v$npm_package_version\n\nRelease notes:\n$release_notes" - } - } - ] - ] } } diff --git a/release.config.mjs b/release.config.mjs new file mode 100644 index 00000000..5f00834b --- /dev/null +++ b/release.config.mjs @@ -0,0 +1,45 @@ +export default { + branches: [ + 'main', + '+([0-9])?(.{+([0-9]),x}).x', + { name: 'beta/*', prerelease: 'rc' } + ], + plugins: [ + '@semantic-release/commit-analyzer', + '@semantic-release/release-notes-generator', + ["@semantic-release/changelog", { + "changelogFile": "CHANGELOG.md" + }], + ["@semantic-release/exec", { + "prepareCmd": "echo ${nextRelease.version} > .release-version" + }], + ["@semantic-release/exec", { + "prepareCmd": "npm version ${nextRelease.version} --git-tag-version false" + }], + ["@semantic-release/exec", { + "prepareCmd": "NODE_OPTIONS=--openssl-legacy-provider sbt -J-Xmx5120m \"release release-version ${nextRelease.version} next-version ${nextRelease.version}-SNAPSHOT with-defaults\"" + }], + ["@semantic-release/exec", { + "prepareCmd": "docker buildx build --platform=linux/arm64,linux/amd64 --push -t ghcr.io/hyperledger/identus-mediator:${nextRelease.version} ./mediator/target/docker/stage" + }], + ["@semantic-release/git", { + "assets": [ + "version.sbt", + "CHANGELOG.md", + "DEPENDENCIES.md", + "package.json", + "package-lock.json", + ], + "message": "chore(release): cut mediator ${nextRelease.version} release\n\n${nextRelease.notes}\n\nSigned-off-by: Hyperledger Bot " + }], + ["semantic-release-slack-bot", { + "notifyOnSuccess": true, + "notifyOnFail": true, + "markdownReleaseNotes": true, + "onSuccessTemplate": { + "text": "A new version of Identus Mediator successfully released!\nVersion: `$npm_package_version`\nTag: $repo_url/releases/tag/v$npm_package_version\n\nRelease notes:\n$release_notes" + } + }] + ], + tagFormat: "v${version}" +}