From 6963a24728ba3aed0b02eedb5c2e2c332de9679f Mon Sep 17 00:00:00 2001 From: Athanasius Date: Mon, 7 Feb 2022 16:09:45 +0000 Subject: [PATCH] github: submodules-update: Port in all the releasehub code & tweak We want to *check* if there are any changes and only make a branch and add commits if so. The upstream code has no option for this, so use it as a starting point instead. Specifically this is based on: https://github.com/releasehub-com/github-action-create-pr-parent-submodule/blob/main/action.yml aff9d0978a9bbcbc2961d621d5b108c4b46db5e7 * We need 'success' from the *step* to be when there ARE changes, and that is in the special github output. * In order for the whole job *not* to fail in the 'step check_for_changes says it failed' case we need it to have `continue-on-error: true`. --- .github/workflows/submodule-update.yml | 82 +++++++++++++++++++------- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/.github/workflows/submodule-update.yml b/.github/workflows/submodule-update.yml index 3db7ff60..ecd14e27 100644 --- a/.github/workflows/submodule-update.yml +++ b/.github/workflows/submodule-update.yml @@ -6,9 +6,6 @@ on: push: branches: [ develop ] -############### -# Set the Job # -############### jobs: check_submodules: name: Pull Request for updated submodules @@ -20,21 +17,66 @@ jobs: OWNER: 'EDCD' steps: - ########################## - # Checkout the code base # - ########################## - - name: Checkout EDMC - uses: actions/checkout@v2 - - #################################### - # Run the action against code base # - #################################### - - name: Check EDMC submodules - id: run_action - uses: releasehub-com/github-action-create-pr-parent-submodule@v1 + - uses: actions/checkout@v2.4.0 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - parent_repository: ${{ env.PARENT_REPOSITORY }} - checkout_branch: ${{ env.CHECKOUT_BRANCH}} - pr_against_branch: ${{ env.PR_AGAINST_BRANCH }} - owner: ${{ env.OWNER }} + submodules: true + + - name: Update submodules + shell: bash + run: | + git config user.name github-actions + git config user.email github-actions@github.com + git submodule update --remote + + - name: Check for changes + id: check_for_changes + continue-on-error: true + run: | + changes=$(git status --porcelain) + if [ -n "${changes}" ]; + then + echo '::set-output changes=true' + fi + echo '::set-output changes=false' + exit 0 + + - name: Create submodules changes branch + if: steps.check_for_changes.outputs.changes == 'true' + run: | + git checkout -b $GITHUB_RUN_ID + git commit -am "updating submodules" + git push --set-upstream origin $GITHUB_RUN_ID + + - name: Create pull request against target branch + if: steps.check_for_changes.outputs.changes == 'true' + uses: actions/github-script@v5 + with: + github-token: ${{ inputs.github_token }} + script: | + await github.rest.pulls.create({ + owner: '${{ inputs.owner }}', + repo: '${{ inputs.parent_repository }}'.split('/')[1].trim(), + head: process.env.GITHUB_RUN_ID, + base: '${{ inputs.pr_against_branch }}', + title: `[Auto-generated] Submodule Updates ${process.env.GITHUB_RUN_ID}`, + body: `[Auto-generated] Submodule Updates ${process.env.GITHUB_RUN_ID}`, + }); + + - name: Add labels + if: steps.check_for_changes.outputs.changes == 'true' + uses: actions/github-script@v5 + with: + github-token: ${{ inputs.github_token }} + script: | + const res = await github.rest.issues.listForRepo({ + owner: '${{ inputs.owner }}', + repo: '${{ inputs.parent_repository }}'.split('/')[1].trim(), + }); + const pr = res.data.filter(i => i.title.includes(process.env.GITHUB_RUN_ID)); + const prNumber = pr[0].number; + await github.rest.issues.addLabels({ + issue_number: prNumber, + owner: '${{ inputs.owner }}', + repo: '${{ inputs.parent_repository }}'.split('/')[1].trim(), + labels: ['${{ inputs.label }}'] + });