Skip to content

Fix fallback

Fix fallback #16

name: Update All Screenshots
# Updates all screenshots on an existing PR, assuming permission has been given
# to maintainers to make edits.
on:
workflow_dispatch:
# Allows for manual triggering on PRs. They should be reviewed first, to
# avoid malicious code executing in the lab.
inputs:
pr:
description: "A PR number to build and test in the lab."
required: false
sha:
description: "A specific git SHA to build and test in the lab. Overrides \"pr\" input. If both are empty, this workflow will fail."
required: false
jobs:
compute-sha:
name: Compute SHA
runs-on: ubuntu-latest
outputs:
SHA: ${{ steps.compute.outputs.SHA }}
steps:
- name: Compute SHA
id: compute
#uses: shaka-project/shaka-github-tools/compute-sha@main
uses: joeyparrish/shaka-github-tools/compute-sha@compute-sha # FIXME
with:
# If sha is given, it overrides PR. If neither is given, we fail.
sha: ${{ inputs.sha }}
ref: ${{ inputs.pr ? ('refs/pull/' + inputs.pr + '/head') : '' }}

Check failure on line 32 in .github/workflows/update-screenshots.yaml

View workflow run for this annotation

GitHub Actions / .github/workflows/update-screenshots.yaml

Invalid workflow file

You have an error in your yaml syntax on line 32
set-pending-status:
name: Set Pending Status
needs: compute-sha
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.compute-sha.outputs.SHA }}
- name: Set commit status to pending
uses: shaka-project/shaka-github-tools/set-commit-status@main
with:
context: Update All Screenshots
state: pending
token: ${{ secrets.GITHUB_TOKEN }}
run-lab-tests:
name: Get Selenium Lab Screenshots
needs: [set-pending-status]
uses: ./.github/workflows/selenium-lab-tests.yaml
with:
# Pass the pre-computed SHA directly to the nested workflow.
# Do NOT pass "pr" and reinterpret it into a SHA in the nested workflow.
sha: ${{ needs.compute-sha.outputs.SHA }}
test_filter: layout
ignore_test_status: true
job_name_prefix: "Get Selenium Lab Screenshots / "
update-pr:
name: Update PR
runs-on: ubuntu-latest
needs: [compute-sha, run-lab-tests]
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.compute-sha.outputs.SHA }}
- name: Get artifacts
uses: actions/download-artifact@v4
with:
path: test/test/assets/screenshots/
pattern: screenshots-*
merge-multiple: true
- name: Update screenshots
run: |
# Install prerequisites.
npm ci
# Update the official screenshots for any that have visibly changed.
# This is not a byte-for-byte comparison, but based on pixel diffs.
./build/updateScreenshots.py
# Emulate the actions bot.
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
# Commit the changes. Ignore failure, in case there are no changes.
git add test/test/assets/screenshots/*/*.png || true
git commit -m ':robot: Update all screenshots' || true
- name: Update PR
env:
GH_TOKEN: ${{ github.token }}
run: |
# Update the PR.
PR_API_URL="/repos/${{ github.repository }}/pulls/${{ inputs.pr }}"
REMOTE=$(gh api $PR_API_URL | jq -r .head.repo.html_url)
BRANCH=$(gh api $PR_API_URL | jq -r .head.ref)
# If there were no changes, this will do nothing, but succeed.
git push "$REMOTE" HEAD:"$BRANCH"
- name: Debug
uses: mxschmitt/[email protected]
with:
limit-access-to-actor: true
if: failure()
set-final-status:
name: Set Final Status
runs-on: ubuntu-latest
needs: [compute-sha, run-lab-tests, update-pr]
# Will run on success or failure, but not if the workflow is cancelled.
if: ${{ success() || failure() }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.compute-sha.outputs.SHA }}
- name: Compute final status
id: compute
run: |
# The final status must be one of: success, failure, error, pending.
# However, the status from "result" from an earlier job is one of:
# success, failure, cancelled, skipped.
# We start by mapping those.
LAB_TEST_RESULT=$(echo "${{ needs.run-lab-tests.result }}" \
| sed -Ee 's/(cancelled|skipped)/error/')
UPDATE_PR_RESULT=$(echo "${{ needs.update-pr.result }}" \
| sed -Ee 's/(cancelled|skipped)/error/')
if [[ "$LAB_TEST_RESULT" == "success" ]]; then
# If run-lab-tests succeeded, use the status of update-pr, which
# comes after that. If that is blank, default to "error".
echo "status=${UPDATE_PR_RESULT:-error}" >> $GITHUB_OUTPUT
else
# If run-lab-tests failed, use that. If that is blank, default to
# "error".
echo "status=${LAB_TEST_RESULT:-error}" >> $GITHUB_OUTPUT
fi
- name: Report final status
uses: shaka-project/shaka-github-tools/set-commit-status@main
with:
context: Update All Screenshots
state: ${{ steps.compute.outputs.status }}
token: ${{ secrets.GITHUB_TOKEN }}