0.0.1 alpha 2 #26
This file contains hidden or 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: ty ecosystem-analyzer | |
| permissions: {} | |
| on: | |
| pull_request: | |
| paths: | |
| - "crates/ty*/**" | |
| - "!crates/ty_ide/**" | |
| - "!crates/ty_server/**" | |
| - "!crates/ty_test/**" | |
| - "!crates/ty_completion_eval/**" | |
| - "!crates/ty_wasm/**" | |
| - "crates/ruff_db/**" | |
| - "crates/ruff_python_ast/**" | |
| - "crates/ruff_python_parser/**" | |
| - "crates/ruff_python_stdlib/**" | |
| - ".github/workflows/ty-ecosystem-analyzer.yaml" | |
| - ".github/ty-ecosystem.toml" | |
| - "crates/ty_python_semantic/resources/primer/**" | |
| - "Cargo.lock" | |
| - "!**.md" | |
| - "!**.snap" | |
| # It's tempting to skip all Python files in every directory, | |
| # but changes to Python files in `ty_vendored` can affect the output of ecosystem analysis, | |
| # so we apply a narrow exemption for all files in the corpus directory instead. | |
| - "!crates/ty_python_semantic/resources/corpus/**" | |
| concurrency: | |
| group: ty-ecosystem-analyzer-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| defaults: | |
| run: | |
| shell: bash | |
| env: | |
| CARGO_INCREMENTAL: 0 | |
| CARGO_NET_RETRY: 10 | |
| CARGO_TERM_COLOR: always | |
| RUSTUP_MAX_RETRIES: 10 | |
| RUST_BACKTRACE: 1 | |
| # Line-tables-only debug info: faster builds, backtraces still work. | |
| CARGO_PROFILE_PROFILING_DEBUG: line-tables-only | |
| ECOSYSTEM_ANALYZER_COMMIT: 296347b07a34b0b1fffc1cb3e03abacf0fd5df70 | |
| jobs: | |
| build-ty: | |
| name: Build ty | |
| runs-on: ${{ github.repository == 'astral-sh/ruff' && 'depot-ubuntu-22.04-32' || 'ubuntu-latest' }} | |
| # max (6h): the fork's slow `ubuntu-latest` runner overruns the depot-tuned budget | |
| timeout-minutes: 360 | |
| outputs: | |
| timestamp: ${{ steps.build.outputs.timestamp }} | |
| merge-base: ${{ steps.build.outputs.merge-base }} | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| persist-credentials: false | |
| - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 | |
| with: | |
| lookup-only: false | |
| - name: Install Rust toolchain | |
| run: rustup show | |
| - name: "Install mold" | |
| uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1 | |
| - name: Build ty for both commits | |
| id: build | |
| run: | | |
| echo "timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT" | |
| # Faster to do this separately than to use `fetch-depth: 0` with `actions/checkout` | |
| git fetch --no-tags --filter=blob:none --unshallow origin | |
| MERGE_BASE="$(git merge-base "${GITHUB_SHA}" "origin/${GITHUB_BASE_REF}")" | |
| echo "merge-base=${MERGE_BASE}" >> "$GITHUB_OUTPUT" | |
| echo "Merge base: ${MERGE_BASE}" | |
| echo "PR commit: ${GITHUB_SHA}" | |
| git checkout "${MERGE_BASE}" | |
| # basedpython's `ty` package builds a binary named `by`, not `ty` | |
| cargo build --package ty --profile profiling | |
| cp target/profiling/by ty-base | |
| git checkout "${GITHUB_SHA}" | |
| # basedpython's `ty` package builds a binary named `by`, not `ty` | |
| cargo build --package ty --profile profiling | |
| cp target/profiling/by ty-pr | |
| # Extract project lists and config for the shard jobs | |
| git show "${MERGE_BASE}:crates/ty_python_semantic/resources/primer/good.txt" > projects_old.txt | |
| cp crates/ty_python_semantic/resources/primer/good.txt projects_new.txt | |
| cp crates/ty_python_semantic/resources/primer/flaky.txt projects_flaky.txt | |
| cp .github/ty-ecosystem.toml ty-ecosystem.toml | |
| - name: Upload ty binaries, project lists, and config | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: ty-builds | |
| compression-level: 1 | |
| path: | | |
| ty-base | |
| ty-pr | |
| projects_old.txt | |
| projects_new.txt | |
| projects_flaky.txt | |
| ty-ecosystem.toml | |
| analyze-shards: | |
| needs: [build-ty] | |
| strategy: | |
| matrix: | |
| shard: [0, 1, 2, 3] | |
| runs-on: ${{ github.repository == 'astral-sh/ruff' && 'depot-ubuntu-22.04-32' || 'ubuntu-latest' }} | |
| # max (6h): the fork's slow `ubuntu-latest` runner overruns the depot-tuned budget | |
| timeout-minutes: 360 | |
| steps: | |
| - name: Install the latest version of uv | |
| uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 | |
| with: | |
| enable-cache: true | |
| version: "0.11.16" | |
| - name: Download ty binaries, project lists, and config | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: ty-builds | |
| - name: Analyze shard ${{ matrix.shard }} | |
| env: | |
| SHARD: ${{ matrix.shard }} | |
| EXCLUDE_NEWER: ${{ needs.build-ty.outputs.timestamp }} | |
| MERGE_BASE: ${{ needs.build-ty.outputs.merge-base }} | |
| run: | | |
| mkdir -p ~/.config/ty | |
| cp ty-ecosystem.toml ~/.config/ty/ty.toml | |
| chmod +x ty-base ty-pr | |
| uvx \ | |
| --from "git+https://github.com/astral-sh/ecosystem-analyzer@${ECOSYSTEM_ANALYZER_COMMIT}" \ | |
| ecosystem-analyzer \ | |
| --flaky-runs 10 \ | |
| diff \ | |
| --projects-old projects_old.txt \ | |
| --projects-new projects_new.txt \ | |
| --projects-flaky projects_flaky.txt \ | |
| --ty-binary-old ty-base \ | |
| --ty-binary-new ty-pr \ | |
| --old "${MERGE_BASE}" \ | |
| --new "${GITHUB_SHA}" \ | |
| --exclude-newer "${EXCLUDE_NEWER}" \ | |
| --shard "${SHARD}" \ | |
| --num-shards 4 \ | |
| --output-old "diagnostics-base-${SHARD}.json" \ | |
| --output-new "diagnostics-PR-${SHARD}.json" | |
| - name: Upload diagnostics | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: diagnostics-shard-${{ matrix.shard }} | |
| path: | | |
| diagnostics-base-${{ matrix.shard }}.json | |
| diagnostics-PR-${{ matrix.shard }}.json | |
| generate-report: | |
| name: Generate diagnostic diff report | |
| needs: [analyze-shards] | |
| runs-on: ubuntu-latest | |
| # max (6h): the fork's slow `ubuntu-latest` runner overruns the depot-tuned budget | |
| timeout-minutes: 360 | |
| steps: | |
| - name: Install the latest version of uv | |
| uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 | |
| with: | |
| enable-cache: true | |
| version: "0.11.16" | |
| - name: Download shard diagnostics | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| pattern: diagnostics-shard-* | |
| merge-multiple: true | |
| - name: Generate reports | |
| id: generate-reports | |
| env: | |
| REF_NAME: ${{ github.ref_name }} | |
| run: | | |
| # Merge shard diagnostics | |
| jq -s '{ outputs: [.[].outputs[]] }' diagnostics-base-*.json > diagnostics-base.json | |
| jq -s '{ outputs: [.[].outputs[]] }' diagnostics-PR-*.json > diagnostics-PR.json | |
| uv tool install "git+https://github.com/astral-sh/ecosystem-analyzer@$ECOSYSTEM_ANALYZER_COMMIT" | |
| mkdir dist | |
| ecosystem-analyzer \ | |
| generate-diff \ | |
| diagnostics-base.json \ | |
| diagnostics-PR.json \ | |
| --old-name "main (merge base)" \ | |
| --new-name "$REF_NAME" \ | |
| --output-html dist/diff.html | |
| set +e | |
| ecosystem-analyzer \ | |
| generate-diff-statistics \ | |
| diagnostics-base.json \ | |
| diagnostics-PR.json \ | |
| --fail-on-new-abnormal-exits \ | |
| --old-name "main (merge base)" \ | |
| --new-name "$REF_NAME" \ | |
| --output diff-statistics.md | |
| DIFF_STATISTICS_EXIT_CODE=$? | |
| set -e | |
| ecosystem-analyzer \ | |
| generate-timing-diff \ | |
| diagnostics-base.json \ | |
| diagnostics-PR.json \ | |
| --old-name "main (merge base)" \ | |
| --new-name "$REF_NAME" \ | |
| --output-html dist/timing.html | |
| cat diff-statistics.md >> comment.md | |
| cat diff-statistics.md >> "$GITHUB_STEP_SUMMARY" | |
| echo "diff_statistics_exit_code=$DIFF_STATISTICS_EXIT_CODE" >> "$GITHUB_OUTPUT" | |
| # 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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| 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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: comment.md | |
| path: comment.md | |
| - name: Upload diagnostics diff | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: diff.html | |
| path: dist/diff.html | |
| - name: Upload timing diff | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: timing.html | |
| path: dist/timing.html | |
| - name: Fail on new abnormal exits | |
| if: steps.generate-reports.outputs.diff_statistics_exit_code != '0' | |
| run: exit 1 |