From c9cea37cf0f83d52b3741891a7f37afbaa6221ae Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Thu, 14 Jul 2022 17:27:07 +0100 Subject: [PATCH] Add ga release workflow - Fixes #454 --- .github/workflows/release-ga.yml | 149 +++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 .github/workflows/release-ga.yml diff --git a/.github/workflows/release-ga.yml b/.github/workflows/release-ga.yml new file mode 100644 index 00000000..d51d4396 --- /dev/null +++ b/.github/workflows/release-ga.yml @@ -0,0 +1,149 @@ +name: Release GA + +on: + workflow_dispatch: + +jobs: + staging: + runs-on: ubuntu-latest + outputs: + project-version: ${{ steps.output.outputs.project-version }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: 1.8 + - uses: jvalkeal/setup-maven@v1 + with: + maven-version: 3.8.4 + - uses: jfrog/setup-jfrog-cli@v1 + with: + version: 1.46.4 + env: + JF_ARTIFACTORY_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} + - name: Configure JFrog Cli + run: | + jfrog rt mvnc \ + --server-id-deploy=repo.spring.io \ + --repo-deploy-releases=libs-staging-local \ + --repo-deploy-snapshots=libs-staging-local + echo JFROG_CLI_BUILD_NAME=spring-shell-main-release >> $GITHUB_ENV + echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV + - name: Configure GA Version + run: | + jfrog rt mvn build-helper:parse-version versions:set \ + -DprocessAllModules=true \ + -DgenerateBackupPoms=false \ + -Dartifactory.publish.artifacts=false \ + -DnewVersion='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}' \ + -B + echo PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_ENV + - name: Tag Release + env: + PROJECT_VERSION: ${{ env.PROJECT_VERSION }} + run: | + git config --global user.name github-actions[bot] + git config --global user.email 41898282+github-actions[bot]@users.noreply.github.com + git checkout -b $PROJECT_VERSION + git commit -a -m "Release $PROJECT_VERSION" + git tag "v$PROJECT_VERSION" + - name: Build and Publish + env: + DISABLE_SAMPLES: true + run: | + jfrog rt build-clean + jfrog rt mvn clean install \ + -DskipTests -U -B + jfrog rt build-publish + - name: Push Release + env: + PROJECT_VERSION: ${{ env.PROJECT_VERSION }} + run: | + git push origin $PROJECT_VERSION + git push --tags origin + - name: Output + id: output + env: + PROJECT_VERSION: ${{ env.PROJECT_VERSION }} + run: | + echo "::set-output name=project-version::$PROJECT_VERSION" + + promote: + runs-on: ubuntu-latest + needs: staging + environment: promote + steps: + - uses: actions/checkout@v2 + - uses: jfrog/setup-jfrog-cli@v1 + with: + version: 1.50.0 + env: + JF_ARTIFACTORY_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} + - name: Configure JFrog Cli + run: | + jfrog rt mvnc \ + --server-id-deploy=repo.spring.io \ + --repo-deploy-releases=libs-staging-local \ + --repo-deploy-snapshots=libs-staging-local + echo JFROG_CLI_BUILD_NAME=spring-shell-main-release >> $GITHUB_ENV + echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV + - name: Promote Build + run: | + jfrog rt build-promote libs-release-local + + ghrelease: + runs-on: ubuntu-latest + needs: [staging, promote] + steps: + - uses: actions/checkout@v2 + - name: Install Tooling + run: | + curl -sSL https://github.com/cbroglie/mustache/releases/download/v1.2.2/mustache_1.2.2_linux_amd64.tar.gz | sudo tar -C /usr/local/bin/ --no-same-owner -xzv mustache + - name: GitHub Release + env: + PROJECT_VERSION: ${{needs.staging.outputs.project-version}} + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + RELEASE_NOTES_FILE: ${{runner.temp}}/release_notes.md5 + RELEASE_NOTES_DATA: ${{runner.temp}}/release_notes_data.json + RELEASE_NOTES_HEADERS: ${{runner.temp}}/release_notes_headers.json + RELEASE_NOTES_FOOTERS: ${{runner.temp}}/release_notes_footers.json + RELEASE_NOTES_ISSUES: ${{runner.temp}}/release_notes_issues.json + RELEASE_NOTES_PRS: ${{runner.temp}}/release_notes_prs.json + run: | + gh issue list \ + --repo spring-projects/spring-shell \ + --search milestone:$PROJECT_VERSION \ + --label automation/rlnotes-header \ + --state all --json title,body \ + --jq '{headers:map(.),headerslength:(length)}' \ + > $RELEASE_NOTES_HEADERS + gh issue list \ + --repo spring-projects/spring-shell \ + --search milestone:$PROJECT_VERSION \ + --label automation/rlnotes-footer \ + --state all --json title,body \ + --jq '{footers:map(.),footerslength:(length)}' \ + > $RELEASE_NOTES_FOOTERS + gh issue list \ + --repo spring-projects/spring-shell \ + --search milestone:$PROJECT_VERSION \ + --state all --json number,title,labels \ + --jq '{issues:map(select((.labels | length == 0) or (any(.labels[].name; startswith("automation/rlnotes")|not))))}' \ + > $RELEASE_NOTES_ISSUES + gh pr list \ + --repo spring-projects/spring-shell \ + --search milestone:$PROJECT_VERSION \ + --state all --json number,title,labels \ + --jq '{prs:map(.),prslength:(length)}' \ + > $RELEASE_NOTES_PRS + jq -s '{issues:(.[0].issues),prs:(.[1].prs),prslength:(.[1].prslength),headers:(.[2].headers),headerslength:(.[2].headerslength),footers:(.[3].footers), footerslength:(.[3].footerslength)}' \ + $RELEASE_NOTES_ISSUES \ + $RELEASE_NOTES_PRS \ + $RELEASE_NOTES_HEADERS \ + $RELEASE_NOTES_FOOTERS \ + > $RELEASE_NOTES_DATA + mustache $RELEASE_NOTES_DATA .github/rlnotes.mustache > $RELEASE_NOTES_FILE + gh release create v$PROJECT_VERSION \ + --draft \ + --title "$PROJECT_VERSION" \ + --notes-file $RELEASE_NOTES_FILE