| name: Header Sync |
| |
| on: |
| workflow_dispatch: null |
| schedule: |
| - cron: "0 0 * * *" |
| |
| permissions: |
| contents: write |
| pull-requests: write |
| |
| jobs: |
| build: |
| runs-on: ubuntu-latest |
| name: Update headers from nodejs/node |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-node@v3 |
| with: |
| node-version: 18 |
| - run: npm install |
| - shell: bash |
| id: check-changes |
| name: Check Changes |
| run: | |
| COMMIT_MESSAGE=$(npm run --silent update-headers) |
| VERSION=${COMMIT_MESSAGE##* } |
| echo $COMMIT_MESSAGE |
| npm run --silent write-symbols |
| npm run --silent write-win32-def |
| CHANGED_FILES=$(git status -s) |
| BRANCH_NAME="update-headers/${VERSION}" |
| if [ -z "$CHANGED_FILES" ]; then |
| echo "No changes exist. Nothing to do." |
| else |
| echo "Changes exist. Checking if branch exists: $BRANCH_NAME" |
| if git ls-remote --exit-code --heads $GITHUB_SERVER_URL/$GITHUB_REPOSITORY $BRANCH_NAME >/dev/null; then |
| echo "Branch exists. Nothing to do." |
| else |
| echo "Branch does not exists." |
| echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_OUTPUT |
| echo "COMMIT_MESSAGE=$COMMIT_MESSAGE" >> $GITHUB_OUTPUT |
| echo "VERSION=$VERSION" >> $GITHUB_OUTPUT |
| fi |
| fi |
| - name: Create Pull Request |
| id: cpr |
| uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5 |
| if: ${{ steps.check-changes.outputs.BRANCH_NAME }} |
| with: |
| branch: ${{ steps.check-changes.outputs.BRANCH_NAME }} |
| commit-message: ${{ steps.check-changes.outputs.COMMIT_MESSAGE }} |
| title: ${{ steps.check-changes.outputs.COMMIT_MESSAGE }} |
| author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
| body: Automated sync of headers with Node.js ${{ steps.check-changes.outputs.VERSION }} |
| labels: headers |
| delete-branch: true |
| - name: Close existing PRs |
| env: |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| if: ${{ steps.cpr.outputs.pull-request-number }} |
| run: | |
| gh pr list --json number,author,title,labels --jq '[ .[] | select(.author.login == "app/github-actions" and .number != ${{ steps.cpr.outputs.pull-request-number }} and (.labels[]| select(.name =="headers" )))]' | jq -c '.[]' | |
| while IFS=$"\n" read -r c; do |
| pr_number=$(echo "$c" | jq -r '.number') |
| gh pr close $pr_number --delete-branch --comment "Closing in favor of [#${{ steps.cpr.outputs.pull-request-number }}](${{ steps.cpr.outputs.pull-request-url }})." |
| done |