Perform Release #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Perform Release" | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release_pr_number: | |
| description: "The PR number of the release PR" | |
| required: true | |
| skip-pr-merge: | |
| description: "Whether to skip merging the PRs" | |
| required: false | |
| default: false | |
| type: boolean | |
| env: | |
| MVN_CLI_ARGS: --batch-mode --no-transfer-progress --fail-at-end --show-version -DskipTests | |
| JAVA_VERSION: 17 | |
| DOCS_REPO: SAP/ai-sdk | |
| jobs: | |
| prerequisites: | |
| name: "Prerequisites" | |
| outputs: | |
| code-branch: ${{ steps.determine-branch-names.outputs.CODE_BRANCH_NAME }} | |
| release-notes-branch: ${{ steps.determine-branch-names.outputs.RELEASE_NOTES_BRANCH_NAME }} | |
| release-tag: ${{ steps.determine-branch-names.outputs.RELEASE_TAG }} | |
| release-commit: ${{ steps.determine-branch-names.outputs.RELEASE_COMMIT }} | |
| permissions: write-all # contents and push are needed to see the draft release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: "Determine Branch Names" | |
| id: determine-branch-names | |
| run: | | |
| CODE_BRANCH_NAME=$(gh pr view ${{github.event.inputs.release_pr_number}} --repo ${{github.repository}} --json headRefName --jq '.headRefName') | |
| RELEASE_VERSION=$(echo $CODE_BRANCH_NAME | cut -d '-' -f2) | |
| RELEASE_TAG=rel/$RELEASE_VERSION | |
| RELEASE_COMMIT=$(gh release view $RELEASE_TAG --repo ${{github.repository}} --json targetCommitish --jq '.targetCommitish') | |
| RELEASE_NOTES_BRANCH_NAME=java/release-notes-$RELEASE_VERSION | |
| echo "CODE_BRANCH_NAME=$CODE_BRANCH_NAME" >> $GITHUB_OUTPUT | |
| echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_OUTPUT | |
| echo "RELEASE_TAG=$RELEASE_TAG" >> $GITHUB_OUTPUT | |
| echo "RELEASE_COMMIT=$RELEASE_COMMIT" >> $GITHUB_OUTPUT | |
| echo "RELEASE_NOTES_BRANCH_NAME=$RELEASE_NOTES_BRANCH_NAME" >> $GITHUB_OUTPUT | |
| echo -e "[DEBUG] Current GITHUB_OUTPUT:\n$(cat $GITHUB_OUTPUT)" | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| - name: "Checkout Repository" | |
| uses: actions/checkout@v5 | |
| - name: "Check Whether Code PR Can Be Merged" | |
| if: ${{ inputs.skip-pr-merge != 'true' }} | |
| uses: ./.github/actions/pr-is-mergeable | |
| with: | |
| pr-ref: ${{ steps.determine-branch-names.outputs.CODE_BRANCH_NAME }} | |
| excluded-check-runs: | | |
| { | |
| \"Continuous Integration\": [\"Run BlackDuck Scan\", \"Run Security Rating\"], | |
| \"dependabot merger\": [] | |
| } | |
| - name: "Check Code Release Commit Continuous Integration" | |
| if: ${{ inputs.skip-pr-merge != 'true' }} | |
| uses: ./.github/actions/workflow-succeeded | |
| with: | |
| workflow: "Continuous Integration" | |
| sha: ${{ steps.determine-branch-names.outputs.RELEASE_COMMIT }} | |
| - name: "Check Whether Release Notes PR Can Be Merged" | |
| if: ${{ inputs.skip-pr-merge != 'true' }} | |
| uses: ./.github/actions/pr-is-mergeable | |
| with: | |
| pr-ref: ${{ steps.determine-branch-names.outputs.RELEASE_NOTES_BRANCH_NAME }} | |
| repo: ${{ env.DOCS_REPO }} | |
| token: ${{ secrets.BOT_SDK_JS_FOR_DOCS_REPO_PR }} | |
| excluded-check-runs: | | |
| { | |
| \"Build Cloud SDK Documentation\": [\"dependabot\"] | |
| } | |
| release: | |
| name: "Release" | |
| needs: [ prerequisites ] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write # needed to modify the release draft | |
| pull-requests: write # needed to merge the release PR | |
| steps: | |
| - name: "Setup java" | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: "sapmachine" | |
| java-version: ${{ env.JAVA_VERSION }} | |
| - name: "Download Release Asset" | |
| id: download-asset | |
| run: | | |
| gh release download ${{ needs.prerequisites.outputs.release-tag }} --dir ./ --repo "${{ github.repository }}" | |
| # x=extract v=verbose z=decompress f=file C=destination directory | |
| tar -xvzf release-artifacts.tar.gz -C . | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: "Import GPG Key" | |
| run: | | |
| echo "${{ secrets.PGP_PRIVATE_KEY }}" | gpg --batch --passphrase "$PASSPHRASE" --import | |
| env: | |
| PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} | |
| - name: "Create settings.xml" | |
| run: | | |
| echo '${{ secrets.CENTRAL_SONATYPE_SETTINGS_XML }}' > settings.xml | |
| - name: "Deploy" | |
| run: | | |
| MVN_ARGS="${{ env.MVN_CLI_ARGS }} -Drelease -s settings.xml" | |
| mvn deploy $MVN_ARGS | |
| env: | |
| MAVEN_GPG_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} | |
| - name: "Merge Code PR" | |
| if: ${{ inputs.skip-pr-merge != 'true' }} | |
| run: gh pr merge --squash "${{ needs.prerequisites.outputs.code-branch }}" --delete-branch --repo "${{ github.repository }}" | |
| env: | |
| GH_TOKEN: ${{ secrets.BOT_SDK_JS_FOR_DOCS_REPO_PR }} | |
| - name: "Publish the Draft Release" | |
| run: gh release edit ${{ needs.prerequisites.outputs.release-tag }} --draft=false --repo "${{ github.repository }}" | |
| env: | |
| GH_TOKEN: ${{ secrets.BOT_SDK_JS_FOR_DOCS_REPO_PR }} | |
| - name: "Merge Release Notes PR" | |
| if: ${{ inputs.skip-pr-merge != 'true' }} | |
| run: gh pr merge --squash "${{ needs.prerequisites.outputs.release-notes-branch }}" --delete-branch --repo "${{ env.DOCS_REPO }}" | |
| env: | |
| GH_TOKEN: ${{ secrets.BOT_SDK_JS_FOR_DOCS_REPO_PR }} |