CI does not run at all for some PRs #2252
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: 'javascript / format' | |
on: | |
issue_comment: | |
types: [created] | |
jobs: | |
format: | |
name: 'Format code' | |
runs-on: ubuntu-22.04 | |
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/format') | |
steps: | |
- name: 'Post acknowledgement that it will format code' | |
continue-on-error: true # Never fail the build if this fails | |
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: 'The "Format code" action has started running.' | |
}) | |
- name: 'Download PR data' | |
run: | | |
PR_DATA="/tmp/pr.json" | |
jq -r ".issue.pull_request.url" "$GITHUB_EVENT_PATH" | \ | |
xargs curl --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' -o "$PR_DATA" --url | |
- name: 'Check fork status' | |
id: fork_status | |
run: | | |
IS_FORK="$(jq '.head.repo.fork' "/tmp/pr.json")" | |
echo "fork=$IS_FORK" >> "$GITHUB_OUTPUT" | |
- name: 'Setup SSH deploy key' | |
if: steps.fork_status.outputs.fork == 'false' | |
run: | | |
mkdir ~/.ssh | |
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_ed25519 | |
chmod 600 ~/.ssh/id_ed25519 | |
- name: 'Checkout code' | |
run: | | |
PR_DATA="/tmp/pr.json" | |
HEAD_REF=$(jq -r ".head.ref" "$PR_DATA") | |
if [ ${{ steps.fork_status.outputs.fork }} == "false" ]; then | |
echo "::debug::Setting up repo using SSH" | |
HEAD_REPO=$(jq -r '.head.repo.ssh_url' "$PR_DATA") | |
else | |
echo "::debug::Setting up repo using HTTPS" | |
HEAD_REPO=$(jq -r '.head.repo.clone_url | sub("https://"; "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@")' "$PR_DATA") | |
fi | |
git clone $HEAD_REPO . | |
git checkout -b "$HEAD_REF" "origin/$HEAD_REF" | |
- name: Use Node.js LTS (18.x) | |
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b | |
with: | |
node-version: '18' | |
- name: Install project development dependencies | |
run: npm install --no-save | |
- name: 'Format code' | |
run: ./bin/format.sh | |
- name: 'Commit formatted code' | |
run: | | |
# Check if there is nothing to commit (i.e. no formatting changes made) | |
if [ -z "$(git status --porcelain)" ]; then | |
echo "Code is already formatted correctly" | |
exit 0 | |
fi | |
# Setup the git user (required to commit anything) | |
git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "github-actions[bot]" | |
# Commit the changes made by prettier | |
git add . | |
git commit -m "[CI] Format code" | |
git push | |
- name: 'Post acknowledgement that it has formatted the code' | |
continue-on-error: true # Never fail the build if this fails | |
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: 'The "Format code" action has finished running.' | |
}) | |
- name: 'Post reminder to trigger build manually' | |
continue-on-error: true # Never fail the build if this fails | |
if: steps.fork_status.outputs.fork == 'true' | |
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: 'For security reasons, `/format` does not trigger CI builds when the PR has been submitted from a fork. If checks were not passing due to code format, trigger a build to make the required checks pass, through one of the following ways:\n\n- Push an empty commit to this branch: `git commit --allow-empty -m "Trigger builds"`.\n- Close and reopen the PR.\n- Push a regular commit to this branch.' | |
}) |