Header Sync #685
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |