From eae4e11ca2c03c7252d6bb108cc5f8f9f20f2bcc Mon Sep 17 00:00:00 2001 From: Omkar Khatavkar Date: Mon, 18 Mar 2024 12:04:10 +0530 Subject: [PATCH] Create auto_branching.yml --- .github/workflows/auto_branching.yml | 161 +++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 .github/workflows/auto_branching.yml diff --git a/.github/workflows/auto_branching.yml b/.github/workflows/auto_branching.yml new file mode 100644 index 000000000..0b2077152 --- /dev/null +++ b/.github/workflows/auto_branching.yml @@ -0,0 +1,161 @@ +### The auto-branching workflow triggered through a dispatch request from the CI +name: auto-branching + +# Run on workflow dispatch from CI +on: + workflow_dispatch: + inputs: + target_branch: + type: string + description: branch to be created from the master + stream_version: + type: string + description: new stream version of satellite + +jobs: + auto-branching-non-master: + name: ${{ github.event.inputs.target_branch }} - raise PR with changes + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Create the ${{ github.event.inputs.target_branch }} branch + id: create-branch + uses: peterjgrainger/action-create-branch@v2.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + branch: ${{ github.event.inputs.target_branch }} + + - name: Create label for the ${{ github.event.inputs.target_branch }} branch + id: create-label + run: | + curl -X POST \ + -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ github.repository }}/labels \ + -d "{\"name\":\"${{ github.event.inputs.target_branch }}\",\"color\":\"fbca04\"}" + + - name: Switch to ${{ github.event.inputs.target_branch }} branch + run: git checkout -b "${{ github.event.inputs.target_branch }}" + + - name: Checkout from ${{ github.event.inputs.target_branch }} branch for auto-branching changes + id: checkout-to-auto-branch + run: | + branch_name="auto-branching-${{ github.event.inputs.target_branch }}-$(date '+%s')" + git checkout -b "$branch_name" + echo "branch_name=$branch_name" >> $GITHUB_OUTPUT + + - name: Update target branch label in dependabot yml file + id: update-dependabot + run: | + # Read the dependabot.yml file + FILE_PATH="./.github/dependabot.yml" + TARGET_BRANCH="${{ github.event.inputs.target_branch }}" + # Append the target branch label to the labels node + awk -v target="'$TARGET_BRANCH'" '/^ *labels:/ {$0 = $0 "\n - " target} 1' "$FILE_PATH" > temp.yml && mv temp.yml "$FILE_PATH" + + - name: Remove the dispatch release GHA + id: remove-dispatch-release-gha + run: | + rm -rf ./.github/workflows/dispatch_release.yml + rm -rf ./.github/workflows/auto_branching.yml + + - name: git status + run: git status + + - name: git diff + run: git diff + + - name: Commit changes + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add ./.github/* + git commit -m "Changes for ${{ github.event.inputs.target_branch }} new branch" + git remote -vvv + git push origin ${{steps.checkout-to-auto-branch.outputs.branch_name}} + - name: Create pull request + id: create_pr + run: | + title="[${{ github.event.inputs.target_branch }}]: Changes for ${{ github.event.inputs.target_branch }} new branch" + body=" + ### Problem Statement + New ${{ github.event.inputs.target_branch }} branch + ### Solution + - Dependabot labels are updated for new branch + - Removed dispatch release GHA from ${{ github.event.inputs.target_branch }} as we are releasing only master changes + " + pr_number=$(gh pr create --title "$title" --body "$body" --base "${{ github.event.inputs.target_branch }}" | awk -F'/' '{print $NF}') + echo "$pr_number" + echo "pr_number=$pr_number" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Add the prt comment for running the sanity tests + id: add-parent-prt-comment + uses: thollander/actions-comment-pull-request@v2 + with: + message: | + trigger: test-robottelo + pr_number: ${{ steps.create_pr.outputs.pr_number }} + GITHUB_TOKEN: ${{ secrets.CHERRYPICK_PAT }} + + auto-branching-master: + name: master - raise PR with changes + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Update target branch label in dependabot yml file + id: update-dependabot + run: | + # Read the dependabot.yml file + FILE_PATH="./.github/dependabot.yml" + TARGET_BRANCH="${{ github.event.inputs.target_branch }}" + # Append the target branch label to the labels node + awk -v target="'$TARGET_BRANCH'" '/^ *labels:/ {$0 = $0 "\n - " target} 1' "$FILE_PATH" > temp.yml && mv temp.yml "$FILE_PATH" + + - name: git status + run: git status + + - name: git diff + run: git diff + + - name: Commit changes + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + branch_name="auto-branching-${{ github.event.inputs.target_branch }}-$(date '+%s')" + git checkout -b "$branch_name" + git add ./.github/* + git commit -m "Changes for ${{ github.event.inputs.target_branch }} new branch" + git remote -vvv + git push origin "$branch_name" + + - name: Create pull request + id: create_pr + run: | + title="[master]: Changes for ${{ github.event.inputs.target_branch }} new branch" + body=" + ### Problem Statement + New ${{ github.event.inputs.target_branch }} downstream and master points to stream that is ${{ github.event.inputs.stream_version }} + ### Solution + - Dependabot.yaml cherrypicks to ${{ github.event.inputs.target_branch }} + " + pr_number=$(gh pr create --title "$title" --body "$body" --base "master" | awk -F'/' '{print $NF}') + echo "$pr_number" + echo "pr_number=$pr_number" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Add the prt comment for running the sanity tests + id: add-parent-prt-comment + uses: thollander/actions-comment-pull-request@v2 + with: + message: | + trigger: test-robottelo + pr_number: ${{ steps.create_pr.outputs.pr_number }} + GITHUB_TOKEN: ${{ secrets.CHERRYPICK_PAT }}