name: Release GA run-name: ${{ format('{0} ({1})', github.workflow, github.ref_name) }} 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.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-21x-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-21x-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 central: runs-on: ubuntu-latest needs: ghrelease environment: central 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: | echo JFROG_CLI_BUILD_NAME=spring-shell-21x-release >> $GITHUB_ENV echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV - name: Download Release Files run: | jfrog rt download \ --spec .github/release-files-spec.json \ --spec-vars "buildname=$JFROG_CLI_BUILD_NAME;buildnumber=$JFROG_CLI_BUILD_NUMBER" - uses: jvalkeal/nexus-sync@v0 with: url: ${{ secrets.OSSRH_URL }} username: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }} password: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }} staging-profile-name: ${{ secrets.OSSRH_STAGING_PROFILE_NAME }} create: true upload: true close: true close-timeout: 5400 release: true release-timeout: 5400 generate-checksums: true pgp-sign: true pgp-sign-passphrase: ${{ secrets.GPG_PASSPHRASE }} pgp-sign-private-key: ${{ secrets.GPG_PRIVATE_KEY }}