## Summary This PR reworks our ecosystem-analyzer workflow so that it automatically reruns if a PR with the `ecosystem-analyzer` label has new commits pushed to it, or is reopened after previously being closed. It's currently easy to forget that you need to remove and re-add the label to trigger a fresh workflow run, which can then mean that there are stale (misleading) results in the PR comment posted by the bot. It also means that it takes longer for CI to finish than it would otherwise, because it might be a few minutes after pushing new commits to the PR before you remember that you also need to remove and re-add the label. To write this PR, I consulted: - The GitHub workflow trigger documentation: https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#pull_request - This Stack Overflow answer: https://stackoverflow.com/a/59588725/13990016 ## Test Plan I experimented with pushing commits to this PR and closing/reopening it, and both of these actions triggered fresh runs of the ecosystem-analyzer worfklow when the label was present on the PR. However, removing the label again meant that the workflow was no longer triggered by these actions.
147 lines
4.9 KiB
YAML
147 lines
4.9 KiB
YAML
name: ty ecosystem-analyzer
|
|
|
|
permissions: {}
|
|
|
|
on:
|
|
pull_request:
|
|
# The default for `pull_request` is to trigger on `synchronize`, `opened` and `reopened`.
|
|
# We also add `labeled` here so that the workflow triggers when a label is initially added.
|
|
types:
|
|
- labeled
|
|
- synchronize
|
|
- opened
|
|
- reopened
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
CARGO_INCREMENTAL: 0
|
|
CARGO_NET_RETRY: 10
|
|
CARGO_TERM_COLOR: always
|
|
RUSTUP_MAX_RETRIES: 10
|
|
RUST_BACKTRACE: 1
|
|
REF_NAME: ${{ github.ref_name }}
|
|
|
|
jobs:
|
|
ty-ecosystem-analyzer:
|
|
name: Compute diagnostic diff
|
|
runs-on: ${{ github.repository == 'astral-sh/ruff' && 'depot-ubuntu-22.04-32' || 'ubuntu-latest' }}
|
|
timeout-minutes: 20
|
|
if: contains( github.event.pull_request.labels.*.name, 'ecosystem-analyzer')
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
path: ruff
|
|
fetch-depth: 0
|
|
persist-credentials: false
|
|
|
|
- name: Install the latest version of uv
|
|
uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4
|
|
with:
|
|
enable-cache: true # zizmor: ignore[cache-poisoning] acceptable risk for CloudFlare pages artifact
|
|
|
|
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
|
with:
|
|
workspaces: "ruff"
|
|
lookup-only: false # zizmor: ignore[cache-poisoning] acceptable risk for CloudFlare pages artifact
|
|
|
|
- name: Install Rust toolchain
|
|
run: rustup show
|
|
|
|
- name: Compute diagnostic diff
|
|
shell: bash
|
|
run: |
|
|
cd ruff
|
|
|
|
echo "Enabling configuration overloads (see .github/mypy-primer-ty.toml)"
|
|
mkdir -p ~/.config/ty
|
|
cp .github/mypy-primer-ty.toml ~/.config/ty/ty.toml
|
|
|
|
echo "new commit"
|
|
git checkout -b new_commit "$GITHUB_SHA"
|
|
git rev-list --format=%s --max-count=1 new_commit
|
|
cp crates/ty_python_semantic/resources/primer/good.txt projects_new.txt
|
|
|
|
echo "old commit (merge base)"
|
|
MERGE_BASE="$(git merge-base "$GITHUB_SHA" "origin/$GITHUB_BASE_REF")"
|
|
git checkout -b old_commit "$MERGE_BASE"
|
|
git rev-list --format=%s --max-count=1 old_commit
|
|
cp crates/ty_python_semantic/resources/primer/good.txt projects_old.txt
|
|
|
|
cd ..
|
|
|
|
uv tool install "git+https://github.com/astral-sh/ecosystem-analyzer@2e1816eac09c90140b1ba51d19afc5f59da460f5"
|
|
|
|
ecosystem-analyzer \
|
|
--repository ruff \
|
|
diff \
|
|
--profile=profiling \
|
|
--projects-old ruff/projects_old.txt \
|
|
--projects-new ruff/projects_new.txt \
|
|
--old old_commit \
|
|
--new new_commit \
|
|
--output-old diagnostics-old.json \
|
|
--output-new diagnostics-new.json
|
|
|
|
mkdir dist
|
|
|
|
ecosystem-analyzer \
|
|
generate-diff \
|
|
diagnostics-old.json \
|
|
diagnostics-new.json \
|
|
--old-name "main (merge base)" \
|
|
--new-name "$REF_NAME" \
|
|
--output-html dist/diff.html
|
|
|
|
ecosystem-analyzer \
|
|
generate-diff-statistics \
|
|
diagnostics-old.json \
|
|
diagnostics-new.json \
|
|
--old-name "main (merge base)" \
|
|
--new-name "$REF_NAME" \
|
|
--output diff-statistics.md
|
|
|
|
ecosystem-analyzer \
|
|
generate-timing-diff \
|
|
diagnostics-old.json \
|
|
diagnostics-new.json \
|
|
--old-name "main (merge base)" \
|
|
--new-name "$REF_NAME" \
|
|
--output-html dist/timing.html
|
|
|
|
echo '## `ecosystem-analyzer` results' > comment.md
|
|
echo >> comment.md
|
|
cat diff-statistics.md >> comment.md
|
|
|
|
cat diff-statistics.md >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
# NOTE: astral-sh-bot uses this artifact to post comments on PRs.
|
|
# Make sure to update the bot if you rename the artifact.
|
|
- name: "Upload full report"
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: full-report
|
|
path: dist/
|
|
|
|
# NOTE: astral-sh-bot uses this artifact to post comments on PRs.
|
|
# Make sure to update the bot if you rename the artifact.
|
|
- name: Upload comment
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: comment.md
|
|
path: comment.md
|
|
|
|
- name: Upload diagnostics diff
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: diff.html
|
|
path: dist/diff.html
|
|
|
|
- name: Upload timing diff
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: timing.html
|
|
path: dist/timing.html
|