Sync Rectangles tests with problem spec #2255
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 / sync' | |
on: | |
issue_comment: | |
types: [created] | |
jobs: | |
format: | |
name: 'Sync all exercises' | |
runs-on: ubuntu-22.04 | |
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/sync') | |
steps: | |
- name: 'Post acknowledgement that it will sync exercises' | |
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 "Sync all exercises" 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: 'Install dependencies' | |
run: yarn install | |
- name: 'Sync exercises' | |
run: npx babel-node scripts/sync | |
- name: 'Commit changes' | |
run: | | |
# Check if there is nothing to commit (i.e. no syncing changes made) | |
if [ -z "$(git status --porcelain)" ]; then | |
echo "Exercises are already synced 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] Sync exercises" | |
git push | |
- name: 'Post acknowledgement that it has synced 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 "Sync all exercises" 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, `/sync` 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.' | |
}) |