diff --git a/.github/workflows/sync-rc-develop.yml b/.github/workflows/sync-rc-develop.yml deleted file mode 100644 index 7d63b5176..000000000 --- a/.github/workflows/sync-rc-develop.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: sync rc develop - -on: - pull_request: - branches: - - "rc/*" - types: - - closed - workflow_dispatch: - inputs: - rc_branch: - description: "Target RC branch(e.g. rc/v1.0.0)" - required: true - -env: - BASE_BRANCH: develop - -jobs: - sync-rc: - runs-on: ubuntu-20.04 - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - ref: ${{ env.BASE_BRANCH }} - fetch-depth: 0 - - - name: Generate token - uses: tibdex/github-app-token@v1 - id: generate-token - with: - app_id: ${{ secrets.APP_ID }} - private_key: ${{ secrets.APP_PRIVATE_KEY }} - - - name: Set SYNC_TARGET_BRANCH for pull_request event - if: github.event_name == 'pull_request' - run: | - echo "SYNC_TARGET_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV - - name: Set SYNC_TARGET_BRANCH for workflow_dispatch event - if: github.event_name == 'workflow_dispatch' - run: | - echo "SYNC_TARGET_BRANCH=${{ github.event.inputs.rc_branch }}" >> $GITHUB_ENV - - name: Set SYNC_BRANCH - run: | - echo ${SYNC_TARGET_BRANCH} | grep -e "^rc/v.*" - echo "SYNC_BRANCH=sync-rc/${SYNC_TARGET_BRANCH#refs/heads/}" >> $GITHUB_ENV - # To keep the base branch in "create-pull-request", checkout with "BASE_BRANCH" and reset to "SYNC_TARGET_BRANCH" - - name: Reset to sync target branch - run: | - git reset --hard origin/${{ env.SYNC_TARGET_BRANCH }} - - name: Set git config - run: | - git config --local user.email "actions@example.com" - git config --local user.name "Github Actions" - - name: Rebase on the base branch - run: | - for commit in $(git rev-list --left-only origin/${{ env.BASE_BRANCH }}...HEAD | tac); do - git rebase $commit || git rebase --abort - done - - name: Create PR - id: create_pr - uses: peter-evans/create-pull-request@v3 - with: - token: ${{ steps.generate-token.outputs.token }} - commit-message: sync rc develop - committer: GitHub - author: GitHub - signoff: false - base: ${{ env.BASE_BRANCH }} - branch: ${{ env.SYNC_BRANCH }} - delete-branch: true - title: sync rc develop - body: | - sync rc develop - labels: | - sync-rc-develop - draft: false - - - name: Check outputs - run: | - echo "Pull Request Number - ${{ steps.create_pr.outputs.pull-request-number }}" - echo "Pull Request URL - ${{ steps.create_pr.outputs.pull-request-url }}" - - name: Enable Auto-merge - if: steps.create_pr.outputs.pull-request-operation == 'created' - uses: peter-evans/enable-pull-request-automerge@v1 - with: - token: ${{ steps.generate-token.outputs.token }} - pull-request-number: ${{ steps.create_pr.outputs.pull-request-number }} - merge-method: squash diff --git a/.github/workflows/sync-rc.yml b/.github/workflows/sync-rc.yml index f3a6a3508..a45496720 100644 --- a/.github/workflows/sync-rc.yml +++ b/.github/workflows/sync-rc.yml @@ -12,9 +12,6 @@ on: description: "Target RC branch(e.g. rc/v1.0.0)" required: true -env: - BASE_BRANCH: main - jobs: sync-rc: runs-on: ubuntu-20.04 @@ -23,7 +20,6 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 with: - ref: ${{ env.BASE_BRANCH }} fetch-depth: 0 - name: Generate token @@ -48,6 +44,31 @@ jobs: echo ${SYNC_TARGET_BRANCH} | grep -e "^rc/v.*" echo "SYNC_BRANCH=sync-rc/${SYNC_TARGET_BRANCH#refs/heads/}" >> $GITHUB_ENV + - name: Judge BASE_BRANCH + run: | + function is_main_base() { + target_branch="$1" + + main_base=$(git merge-base "${target_branch}" origin/main) + develop_base=$(git merge-base "${target_branch}" origin/develop) + + return $(test "${main_base}" = "${develop_base}") + } + + if is_main_base "origin/${{ env.SYNC_TARGET_BRANCH }}"; then + base_branch=main + else + base_branch=develop + fi + + echo "BASE_BRANCH=${base_branch}" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@v2 + with: + ref: ${{ env.BASE_BRANCH }} + fetch-depth: 0 + # To keep the base branch in "create-pull-request", checkout with "BASE_BRANCH" and reset to "SYNC_TARGET_BRANCH" - name: Reset to sync target branch run: | @@ -60,8 +81,9 @@ jobs: - name: Rebase on the base branch run: | - for commit in $(git rev-list --left-only origin/${{ env.BASE_BRANCH }}...HEAD | tac); do - git rebase $commit || git rebase --abort + for commit in $(git rev-list --left-only "origin/${{ env.BASE_BRANCH }}"...HEAD | tac); do + merge_base=$(git merge-base HEAD "origin/${{ env.BASE_BRANCH }}") + git rebase --onto "$commit" "$merge_base" "${{ env.BASE_BRANCH }}" || git rebase --abort done - name: Create PR @@ -76,9 +98,9 @@ jobs: base: ${{ env.BASE_BRANCH }} branch: ${{ env.SYNC_BRANCH }} delete-branch: true - title: sync rc + title: sync rc ${{ env.SYNC_TARGET_BRANCH }} body: | - sync rc + sync rc ${{ env.SYNC_TARGET_BRANCH }} labels: | sync-rc draft: false