--- name: Cherry-pick labeled PRs to OpenMetadata release branch on merge # yamllint disable-line rule:comments run-name: OpenMetadata release cherry-pick PR #${{ github.event.pull_request.number }} # yamllint disable-line rule:truthy on: pull_request_target: types: [closed] branches: - main permissions: contents: write pull-requests: write issues: write env: CURRENT_RELEASE_ENDPOINT: ${{ vars.CURRENT_RELEASE_ENDPOINT }} # Endpoint that returns the current release version in json format jobs: get_release_branch: if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'To release') runs-on: ubuntu-latest outputs: release_branches: ${{ steps.get_release_version.outputs.release_branches }} steps: - name: Get the release version id: get_release_version run: | CURRENT_RELEASE=$(curl -s $CURRENT_RELEASE_ENDPOINT | jq -c '.collate_branches // []') echo "release_branches=${CURRENT_RELEASE}" >> $GITHUB_OUTPUT cherry_pick_to_release_branch: needs: get_release_branch if: needs.get_release_branch.outputs.release_branches != '' && needs.get_release_branch.outputs.release_branches != '[]' runs-on: ubuntu-latest # Running it on ubuntu-latest on purpose (we're not using all the free minutes) strategy: fail-fast: false matrix: branch: ${{ fromJson(needs.get_release_branch.outputs.release_branches) }} steps: - name: Checkout main branch uses: actions/checkout@v4 with: ref: main fetch-depth: 0 - name: Cherry-pick changes from PR id: cherry_pick continue-on-error: true run: | git config --global user.email "release-bot@open-metadata.org" git config --global user.name "OpenMetadata Release Bot" git fetch origin ${{ matrix.branch }} git checkout ${{ matrix.branch }} git cherry-pick -x ${{ github.event.pull_request.merge_commit_sha }} - name: Push changes to release branch id: push_changes continue-on-error: true if: steps.cherry_pick.outcome == 'success' run: | git push origin ${{ matrix.branch }} - name: Post a comment on failure if: steps.cherry_pick.outcome != 'success' || steps.push_changes.outcome != 'success' uses: actions/github-script@v7 with: script: | const prNumber = context.payload.pull_request.number; const releaseBranch = '${{ matrix.branch }}'; const workflowRunUrl = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`; github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: prNumber, body: `Failed to cherry-pick changes to the ${releaseBranch} branch. Please cherry-pick the changes manually. You can find more details [here](${workflowRunUrl}).` }) - name: Post a comment on success if: steps.cherry_pick.outcome == 'success' && steps.push_changes.outcome == 'success' uses: actions/github-script@v7 with: script: | const prNumber = context.payload.pull_request.number; const releaseBranch = '${{ matrix.branch }}'; github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: prNumber, body: `Changes have been cherry-picked to the ${releaseBranch} branch.` })