From d3ade425b4a6d8fbeb9367b364c43b654da7bc21 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 21 Mar 2024 19:44:07 +0100 Subject: [PATCH] attempt merging --- .../create-merge-release-into-dev-pr.yml | 70 ++++++++++++++++--- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/.github/workflows/create-merge-release-into-dev-pr.yml b/.github/workflows/create-merge-release-into-dev-pr.yml index d11a316ac767..49b755b8fc3c 100644 --- a/.github/workflows/create-merge-release-into-dev-pr.yml +++ b/.github/workflows/create-merge-release-into-dev-pr.yml @@ -1,6 +1,11 @@ name: create-merge-release-into-dev-pr on: workflow_dispatch: + schedule: + - cron: '30 3 * * *' # Daily at 03:30 + +env: + BASE_BRANCH: test-dev permissions: {} jobs: @@ -25,9 +30,13 @@ jobs: echo "branch=${BRANCH}" >> $GITHUB_OUTPUT - create-pr: + merge-or-create-pr: + env: + RELEASE_BRANCH: ${{ needs.setup.outputs.latest_release_branch }} + permissions: - pull-requests: write # for git push + contents: write # for git push + pull-requests: write # for creating pull request runs-on: ubuntu-latest needs: setup @@ -35,14 +44,53 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Create pull request - run: > - gh pr create - --base "$BASE_BRANCH" - --head "$RELEASE_BRANCH" - --title "Merge $RELEASE_BRANCH into $BASE_BRANCH" - --body 'Created by GitHub action' + with: + ref: ${{ env.BASE_BRANCH }} # TODO: DELETE ME + + - name: Fetch dev branch upto release branch + run: git fetch --shallow-exclude "$RELEASE_BRANCH" origin "$BASE_BRANCH" || git fetch --depth 1 origin "$BASE_BRANCH" + + - name: Fetch release branch upto dev branch + run: git fetch --shallow-exclude "$BASE_BRANCH" origin "$RELEASE_BRANCH" || git fetch --depth 1 origin "$RELEASE_BRANCH" + + - name: Resolve bug in git https://stackoverflow.com/a/63879454/96823 + run: git repack -d + + - name: Get one commit more to connect the history of dev and release branches + run: git fetch --deepen 1 origin "$BASE_BRANCH" "$RELEASE_BRANCH" + + - name: Create branch without checkout just to have shorter automatic commit message + run: git branch "$RELEASE_BRANCH" origin/"$RELEASE_BRANCH" + + - name: Required git config + run: | + git config user.name "OpenProject Actions CI" + git config user.email "operations+ci@openproject.com" + + - name: Show diff + run: git diff ..."$RELEASE_BRANCH" + + - name: Try merging or create a PR + run: | + if git diff --exit-code --quiet ..."$RELEASE_BRANCH"; then + echo "Nothing to merge from $RELEASE_BRANCH into $BASE_BRANCH" + else + if git merge --no-edit --no-ff "$RELEASE_BRANCH" && git push origin "$BASE_BRANCH"; then + echo "Successfully merged $RELEASE_BRANCH into $BASE_BRANCH and pushed" + else + # Close all previous PRs with label + for pr_number in $(gh pr list --label create-merge-release-into-dev-pr --json number --jq='.[].number'); do + gh pr close "$pr_number" + done + + gh pr create \ + --base "$BASE_BRANCH" \ + --head "$RELEASE_BRANCH" \ + --title "Merge $RELEASE_BRANCH into $BASE_BRANCH" \ + --body 'Created by GitHub action' \ + --label create-merge-release-into-dev-pr + echo "Created a PR to merge $RELEASE_BRANCH into $BASE_BRANCH" + fi + fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BASE_BRANCH: dev - RELEASE_BRANCH: ${{ needs.setup.outputs.latest_release_branch }}