This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [astral-sh/setup-uv](https://redirect.github.com/astral-sh/setup-uv) | action | minor | `v5` -> `v5.4.1` | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>astral-sh/setup-uv (astral-sh/setup-uv)</summary> ### [`v5.4.1`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.4.1): 🌈 Add support for pep440 version specifiers [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.4.0...v5.4.1) ##### Changes With this release you can also use [pep440 version specifiers](https://peps.python.org/pep-0440/#version-specifiers) as `required-version` in files`uv.toml`, `pyroject.toml` and in the `version` input: ```yaml - name: Install a pep440-specifier-satisfying version of uv uses: astral-sh/setup-uv@v5 with: version: ">=0.4.25,<0.5" ``` ##### 🐛 Bug fixes - Add support for pep440 version identifiers [@​eifinger](https://redirect.github.com/eifinger) ([#​353](https://redirect.github.com/astral-sh/setup-uv/issues/353)) ##### 🧰 Maintenance - chore: update known checksums for 0.6.10 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​345](https://redirect.github.com/astral-sh/setup-uv/issues/345)) ##### 📚 Documentation - Add pep440 to docs header [@​eifinger](https://redirect.github.com/eifinger) ([#​355](https://redirect.github.com/astral-sh/setup-uv/issues/355)) - Fix glob syntax link [@​flying-sheep](https://redirect.github.com/flying-sheep) ([#​349](https://redirect.github.com/astral-sh/setup-uv/issues/349)) - Add link to supported glob patterns [@​eifinger](https://redirect.github.com/eifinger) ([#​348](https://redirect.github.com/astral-sh/setup-uv/issues/348)) ### [`v5.4.0`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.4.0): 🌈 uv and uvx path as outputs [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.3.1...v5.4.0) #### Changes The absolute paths to the uv and uvx binaries can now be accessed via the outputs `uv-path` and `uvx-path`. `setup-uv` now also issues a warning if the working directory is empty. This makes users aware of the common mistake to run `setup-uv` before `actions/checkout`. You can remove the warning by setting `ignore-empty-workdir: true` #### 🚀 Enhancements - Add uv-path and uvx-path output [@​eifinger](https://redirect.github.com/eifinger) ([#​341](https://redirect.github.com/astral-sh/setup-uv/issues/341)) - Warn when the workdir is empty [@​eifinger](https://redirect.github.com/eifinger) ([#​322](https://redirect.github.com/astral-sh/setup-uv/issues/322)) #### 🧰 Maintenance - chore: update known checksums for 0.6.9 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​339](https://redirect.github.com/astral-sh/setup-uv/issues/339)) - Merge workflows and add all-tests-passed [@​eifinger](https://redirect.github.com/eifinger) ([#​331](https://redirect.github.com/astral-sh/setup-uv/issues/331)) - chore: update known checksums for 0.6.8 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​332](https://redirect.github.com/astral-sh/setup-uv/issues/332)) - chore: update known checksums for 0.6.7 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​330](https://redirect.github.com/astral-sh/setup-uv/issues/330)) - Set required workflow permissions [@​eifinger](https://redirect.github.com/eifinger) ([#​329](https://redirect.github.com/astral-sh/setup-uv/issues/329)) - Add workflow_dispatch triggers to every workflow [@​eifinger](https://redirect.github.com/eifinger) ([#​326](https://redirect.github.com/astral-sh/setup-uv/issues/326)) - Bump dependencies [@​eifinger](https://redirect.github.com/eifinger) ([#​324](https://redirect.github.com/astral-sh/setup-uv/issues/324)) - Inline action-update-semver [@​eifinger](https://redirect.github.com/eifinger) ([#​323](https://redirect.github.com/astral-sh/setup-uv/issues/323)) - chore: update known checksums for 0.6.6 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​318](https://redirect.github.com/astral-sh/setup-uv/issues/318)) - chore: update known checksums for 0.6.5 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​313](https://redirect.github.com/astral-sh/setup-uv/issues/313)) #### 📚 Documentation - Fix wrong warning message in FAQ [@​eifinger](https://redirect.github.com/eifinger) ([#​337](https://redirect.github.com/astral-sh/setup-uv/issues/337)) - Warn when the workdir is empty [@​eifinger](https://redirect.github.com/eifinger) ([#​322](https://redirect.github.com/astral-sh/setup-uv/issues/322)) - Remove apk add python3 for musl test [@​eifinger](https://redirect.github.com/eifinger) ([#​319](https://redirect.github.com/astral-sh/setup-uv/issues/319)) #### ⬆️ Dependency updates - Bump [@​actions/cache](https://redirect.github.com/actions/cache) from 4.0.2 to 4.0.3 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​334](https://redirect.github.com/astral-sh/setup-uv/issues/334)) ### [`v5.3.1`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.3.1): 🌈 - Fix issues with GHES and HTTP proxies [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.3.0...v5.3.1) ##### Changes This release fixes some issues when this action was used behind a HTTP proxy or with GHES. If you have been seeing `ENOTFOUND` or timeout errors, this release should fix that. A huge thank you to everyone who helped investigating this and testing the fixes: - [@​siryessuhr](https://redirect.github.com/siryessuhr) - [@​my1e5](https://redirect.github.com/my1e5) - [@​dennis-m-e](https://redirect.github.com/dennis-m-e) - [@​PaarthShah](https://redirect.github.com/PaarthShah) ##### 🐛 Bug fixes - Always fall back to anonymous download [@​eifinger](https://redirect.github.com/eifinger) ([#​304](https://redirect.github.com/astral-sh/setup-uv/issues/304)) ##### 🧰 Maintenance - chore: update known checksums for 0.6.3 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​300](https://redirect.github.com/astral-sh/setup-uv/issues/300)) ##### 📚 Documentation - 📚 Document automatically enabled cache on GitHub-hosted runners [@​jerr0328](https://redirect.github.com/jerr0328) ([#​302](https://redirect.github.com/astral-sh/setup-uv/issues/302)) ##### ⬆️ Dependency updates - bump dependencies [@​eifinger](https://redirect.github.com/eifinger) ([#​308](https://redirect.github.com/astral-sh/setup-uv/issues/308)) - Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​299](https://redirect.github.com/astral-sh/setup-uv/issues/299)) ### [`v5.3.0`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.3.0): 🌈 Support MUSL, s390x and powerpc [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.2.2...v5.3.0) In this release we add support for MUSL based systems. This is helpful if you are running your workflow inside a docker image based on [alpine](https://hub.docker.com/\_/alpine). > \[!TIP] > Please be aware that you have to make sure a python interpreter is already present (`apk add python3`), see also https://docs.astral.sh/uv/concepts/python-versions/#cpython-distributions and [https://github.com/astral-sh/uv/issues/6890](https://redirect.github.com/astral-sh/uv/issues/6890) [@​Zxilly](https://redirect.github.com/Zxilly) also added support for running this action on self-hosted runners using s390x and powerpc architectures. Thank you! This release also includes more debug logs which makes tracking down issues easier in the future. ##### 🐛 Bug fixes - Add more debug logs [@​eifinger](https://redirect.github.com/eifinger) ([#​297](https://redirect.github.com/astral-sh/setup-uv/issues/297)) ##### 🚀 Enhancements - Support OS using musl [@​eifinger](https://redirect.github.com/eifinger) ([#​284](https://redirect.github.com/astral-sh/setup-uv/issues/284)) - feat: support s390x and powerpc [@​Zxilly](https://redirect.github.com/Zxilly) ([#​289](https://redirect.github.com/astral-sh/setup-uv/issues/289)) ##### 🧰 Maintenance - chore: update known checksums for 0.6.2 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​295](https://redirect.github.com/astral-sh/setup-uv/issues/295)) - chore: update known checksums for 0.6.1 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​293](https://redirect.github.com/astral-sh/setup-uv/issues/293)) - chore: update known checksums for 0.6.0 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​288](https://redirect.github.com/astral-sh/setup-uv/issues/288)) - chore: update known checksums for 0.5.31 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​277](https://redirect.github.com/astral-sh/setup-uv/issues/277)) - Run update-known-checksums every night [@​eifinger](https://redirect.github.com/eifinger) ([#​273](https://redirect.github.com/astral-sh/setup-uv/issues/273)) - chore: update known checksums for 0.5.29 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​272](https://redirect.github.com/astral-sh/setup-uv/issues/272)) - chore: update known checksums for 0.5.28 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​270](https://redirect.github.com/astral-sh/setup-uv/issues/270)) - chore: update known checksums for 0.5.27 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​267](https://redirect.github.com/astral-sh/setup-uv/issues/267)) - chore: update known checksums for 0.5.26 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​263](https://redirect.github.com/astral-sh/setup-uv/issues/263)) ##### 📚 Documentation - Add FAQ on resolution strategy and cache not found warnings [@​eifinger](https://redirect.github.com/eifinger) ([#​296](https://redirect.github.com/astral-sh/setup-uv/issues/296)) ### [`v5.2.2`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.2.2): 🌈 Full support for GHES [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.2.1...v5.2.2) ##### Changes This release fixes some issues that prevented use with GitHub Enterprise Server instances. ##### 🐛 Bug fixes - Do not expect GITHUB_TOKEN to be set or valid [@​eifinger](https://redirect.github.com/eifinger) ([#​262](https://redirect.github.com/astral-sh/setup-uv/issues/262)) - Fallback if toml file parsing failed [@​eifinger](https://redirect.github.com/eifinger) ([#​246](https://redirect.github.com/astral-sh/setup-uv/issues/246)) ##### 🧰 Maintenance - chore: update known checksums for 0.5.25 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​259](https://redirect.github.com/astral-sh/setup-uv/issues/259)) - chore: update known checksums for 0.5.24 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​256](https://redirect.github.com/astral-sh/setup-uv/issues/256)) - chore: update known checksums for 0.5.23 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​252](https://redirect.github.com/astral-sh/setup-uv/issues/252)) - chore: update known checksums for 0.5.22 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​250](https://redirect.github.com/astral-sh/setup-uv/issues/250)) - chore: update known checksums for 0.5.21 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​247](https://redirect.github.com/astral-sh/setup-uv/issues/247)) ##### 📚 Documentation - Fix TOC [@​eifinger](https://redirect.github.com/eifinger) ([#​257](https://redirect.github.com/astral-sh/setup-uv/issues/257)) ##### ⬆️ Dependency updates - Bump [@​types/node](https://redirect.github.com/types/node) from 22.10.10 to 22.12.0 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​258](https://redirect.github.com/astral-sh/setup-uv/issues/258)) - Bump release-drafter/release-drafter from 6.0.0 to 6.1.0 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​249](https://redirect.github.com/astral-sh/setup-uv/issues/249)) - Bump [@​types/node](https://redirect.github.com/types/node) from 22.10.9 to 22.10.10 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​254](https://redirect.github.com/astral-sh/setup-uv/issues/254)) - Bump [@​types/node](https://redirect.github.com/types/node) from 22.10.7 to 22.10.9 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​253](https://redirect.github.com/astral-sh/setup-uv/issues/253)) - Bump [@​actions/tool-cache](https://redirect.github.com/actions/tool-cache) from 2.0.1 to 2.0.2 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​244](https://redirect.github.com/astral-sh/setup-uv/issues/244)) - Bump [@​types/node](https://redirect.github.com/types/node) from 22.10.6 to 22.10.7 @​[dependabot\[bot\]](https://redirect.github.com/apps/dependabot) ([#​243](https://redirect.github.com/astral-sh/setup-uv/issues/243)) ### [`v5.2.1`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.2.1): 🌈 Support toml spec 1.0.0 [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.2.0...v5.2.1) v5.2.0 introduced TOML parsing using [@​iarna/toml](https://www.npmjs.com/package/@​iarna/toml) because we already found out in `astral-sh/ruff-action` that [toml](https://www.npmjs.com/package/toml) has missing features. As it turns out [@​iarna/toml](https://www.npmjs.com/package/@​iarna/toml) also is not fully TOML spec (1.0.0) compliant. We now use [smol-toml](https://www.npmjs.com/package/smol-toml) ##### 🐛 Bug fixes - Support toml spec 1.0.0 [@​eifinger](https://redirect.github.com/eifinger) ([#​245](https://redirect.github.com/astral-sh/setup-uv/issues/245)) ### [`v5.2.0`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.2.0): 🌈 Detect required-version from config file [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.1.0...v5.2.0) This release adds support to derive the version of uv to be installed from `pyproject.toml` and `uv.toml` files. If no `version` input is defined the default is now to look for a [required-version](https://docs.astral.sh/uv/reference/settings/#required-version) in `uv.toml` and then `pyproject.toml` in the repository root. If it cannot find any it falls back to `latest`. If your files are at a different place you can use the new inputs `uv-file` or `pyproject-file`. ##### 🐛 Bug fixes - Add venv/bin as absolute path to PATH [@​op](https://redirect.github.com/op) ([#​241](https://redirect.github.com/astral-sh/setup-uv/issues/241)) - fix: make sure VIRTUAL_ENV is an absolute path [@​samypr100](https://redirect.github.com/samypr100) ([#​224](https://redirect.github.com/astral-sh/setup-uv/issues/224)) ##### 🚀 Enhancements - Detect required-version from config file [@​eifinger](https://redirect.github.com/eifinger) ([#​233](https://redirect.github.com/astral-sh/setup-uv/issues/233)) ##### 🧰 Maintenance - chore: update known checksums for 0.5.20 [@​github-actions](https://redirect.github.com/github-actions) ([#​238](https://redirect.github.com/astral-sh/setup-uv/issues/238)) - chore: update known checksums for 0.5.19 [@​github-actions](https://redirect.github.com/github-actions) ([#​237](https://redirect.github.com/astral-sh/setup-uv/issues/237)) - chore: update known checksums for 0.5.18 [@​github-actions](https://redirect.github.com/github-actions) ([#​232](https://redirect.github.com/astral-sh/setup-uv/issues/232)) - chore: update known checksums for 0.5.17 [@​github-actions](https://redirect.github.com/github-actions) ([#​231](https://redirect.github.com/astral-sh/setup-uv/issues/231)) - chore: update known checksums for 0.5.16 [@​github-actions](https://redirect.github.com/github-actions) ([#​228](https://redirect.github.com/astral-sh/setup-uv/issues/228)) - chore: update known checksums for 0.5.15 [@​github-actions](https://redirect.github.com/github-actions) ([#​225](https://redirect.github.com/astral-sh/setup-uv/issues/225)) - chore: update known checksums for 0.5.14 [@​github-actions](https://redirect.github.com/github-actions) ([#​222](https://redirect.github.com/astral-sh/setup-uv/issues/222)) - chore: update known checksums for 0.5.12 [@​github-actions](https://redirect.github.com/github-actions) ([#​214](https://redirect.github.com/astral-sh/setup-uv/issues/214)) ##### 📚 Documentation - docs: bump `astral-sh/setup-uv` to `v5` [@​njzjz](https://redirect.github.com/njzjz) ([#​205](https://redirect.github.com/astral-sh/setup-uv/issues/205)) ##### ⬆️ Dependency updates - Bump [@​octokit/rest](https://redirect.github.com/octokit/rest) from 21.0.2 to 21.1.0 [@​dependabot](https://redirect.github.com/dependabot) ([#​229](https://redirect.github.com/astral-sh/setup-uv/issues/229)) - Bump typescript from 5.7.2 to 5.7.3 [@​dependabot](https://redirect.github.com/dependabot) ([#​230](https://redirect.github.com/astral-sh/setup-uv/issues/230)) - Bump [@​types/node](https://redirect.github.com/types/node) from 22.10.5 to 22.10.6 [@​dependabot](https://redirect.github.com/dependabot) ([#​236](https://redirect.github.com/astral-sh/setup-uv/issues/236)) - Bump [@​types/node](https://redirect.github.com/types/node) from 22.10.3 to 22.10.5 [@​dependabot](https://redirect.github.com/dependabot) ([#​223](https://redirect.github.com/astral-sh/setup-uv/issues/223)) - Bump [@​types/node](https://redirect.github.com/types/node) from 22.10.2 to 22.10.3 [@​dependabot](https://redirect.github.com/dependabot) ([#​220](https://redirect.github.com/astral-sh/setup-uv/issues/220)) - Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6 [@​dependabot](https://redirect.github.com/dependabot) ([#​218](https://redirect.github.com/astral-sh/setup-uv/issues/218)) ### [`v5.1.0`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.1.0): 🌈 Fewer cache invalidations [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5.0.1...v5.1.0) ##### Changes This release includes less frequently invalidated caches and a fix for setting the correct `VIRTUAL_ENV` ##### 🐛 Bug fixes - Set VIRTUAL_ENV to .venv instead of .venv/bin [@​eifinger](https://redirect.github.com/eifinger) ([#​210](https://redirect.github.com/astral-sh/setup-uv/issues/210)) ##### 🚀 Enhancements - Remove uv version from cache key [@​eifinger](https://redirect.github.com/eifinger) ([#​206](https://redirect.github.com/astral-sh/setup-uv/issues/206)) ##### 📚 Documentation - Align use of `actions/setup-python` with uv docu [@​eifinger](https://redirect.github.com/eifinger) ([#​207](https://redirect.github.com/astral-sh/setup-uv/issues/207)) ### [`v5.0.1`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v5.0.1): 🌈 The christmas elves overlooked something [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v5...v5.0.1) ##### Changes With so many breaking changes so close to the end of the year we missed something. Thank you [@​ryanhiebert](https://redirect.github.com/ryanhiebert) for quickly reporting that our new defaults fail the workflow if neither a `uv.lock` nor a `requirements*.txt` can be found. This is now a warning instead. ##### 🐛 Bug fixes - Fix wrong cacheDependencyPathHash [@​eifinger](https://redirect.github.com/eifinger) ([#​201](https://redirect.github.com/astral-sh/setup-uv/issues/201)) - Warn instead of fail for no-dependency-glob [@​eifinger](https://redirect.github.com/eifinger) ([#​200](https://redirect.github.com/astral-sh/setup-uv/issues/200)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/astral-sh/ruff). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjIyNy4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
872 lines
33 KiB
YAML
872 lines
33 KiB
YAML
name: CI
|
|
|
|
permissions: {}
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
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
|
|
PACKAGE_NAME: ruff
|
|
PYTHON_VERSION: "3.13"
|
|
|
|
jobs:
|
|
determine_changes:
|
|
name: "Determine changes"
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
# Flag that is raised when any code that affects parser is changed
|
|
parser: ${{ steps.check_parser.outputs.changed }}
|
|
# Flag that is raised when any code that affects linter is changed
|
|
linter: ${{ steps.check_linter.outputs.changed }}
|
|
# Flag that is raised when any code that affects formatter is changed
|
|
formatter: ${{ steps.check_formatter.outputs.changed }}
|
|
# Flag that is raised when any code is changed
|
|
# This is superset of the linter and formatter
|
|
code: ${{ steps.check_code.outputs.changed }}
|
|
# Flag that is raised when any code that affects the fuzzer is changed
|
|
fuzz: ${{ steps.check_fuzzer.outputs.changed }}
|
|
# Flag that is set to "true" when code related to red-knot changes.
|
|
red_knot: ${{ steps.check_red_knot.outputs.changed }}
|
|
|
|
# Flag that is set to "true" when code related to the playground changes.
|
|
playground: ${{ steps.check_playground.outputs.changed }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
fetch-depth: 0
|
|
persist-credentials: false
|
|
|
|
- name: Determine merge base
|
|
id: merge_base
|
|
env:
|
|
BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }}
|
|
run: |
|
|
sha=$(git merge-base HEAD "origin/${BASE_REF}")
|
|
echo "sha=${sha}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Check if the parser code changed
|
|
id: check_parser
|
|
env:
|
|
MERGE_BASE: ${{ steps.merge_base.outputs.sha }}
|
|
run: |
|
|
if git diff --quiet "${MERGE_BASE}...HEAD" -- \
|
|
':Cargo.toml' \
|
|
':Cargo.lock' \
|
|
':crates/ruff_python_trivia/**' \
|
|
':crates/ruff_source_file/**' \
|
|
':crates/ruff_text_size/**' \
|
|
':crates/ruff_python_ast/**' \
|
|
':crates/ruff_python_parser/**' \
|
|
':python/py-fuzzer/**' \
|
|
':.github/workflows/ci.yaml' \
|
|
; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Check if the linter code changed
|
|
id: check_linter
|
|
env:
|
|
MERGE_BASE: ${{ steps.merge_base.outputs.sha }}
|
|
run: |
|
|
if git diff --quiet "${MERGE_BASE}...HEAD" -- ':Cargo.toml' \
|
|
':Cargo.lock' \
|
|
':crates/**' \
|
|
':!crates/red_knot*/**' \
|
|
':!crates/ruff_python_formatter/**' \
|
|
':!crates/ruff_formatter/**' \
|
|
':!crates/ruff_dev/**' \
|
|
':!crates/ruff_db/**' \
|
|
':scripts/*' \
|
|
':python/**' \
|
|
':.github/workflows/ci.yaml' \
|
|
; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Check if the formatter code changed
|
|
id: check_formatter
|
|
env:
|
|
MERGE_BASE: ${{ steps.merge_base.outputs.sha }}
|
|
run: |
|
|
if git diff --quiet "${MERGE_BASE}...HEAD" -- ':Cargo.toml' \
|
|
':Cargo.lock' \
|
|
':crates/ruff_python_formatter/**' \
|
|
':crates/ruff_formatter/**' \
|
|
':crates/ruff_python_trivia/**' \
|
|
':crates/ruff_python_ast/**' \
|
|
':crates/ruff_source_file/**' \
|
|
':crates/ruff_python_index/**' \
|
|
':crates/ruff_python_index/**' \
|
|
':crates/ruff_text_size/**' \
|
|
':crates/ruff_python_parser/**' \
|
|
':scripts/*' \
|
|
':python/**' \
|
|
':.github/workflows/ci.yaml' \
|
|
; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Check if the fuzzer code changed
|
|
id: check_fuzzer
|
|
env:
|
|
MERGE_BASE: ${{ steps.merge_base.outputs.sha }}
|
|
run: |
|
|
if git diff --quiet "${MERGE_BASE}...HEAD" -- ':Cargo.toml' \
|
|
':Cargo.lock' \
|
|
':fuzz/fuzz_targets/**' \
|
|
':.github/workflows/ci.yaml' \
|
|
; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Check if there was any code related change
|
|
id: check_code
|
|
env:
|
|
MERGE_BASE: ${{ steps.merge_base.outputs.sha }}
|
|
run: |
|
|
if git diff --quiet "${MERGE_BASE}...HEAD" -- ':**/*' \
|
|
':!**/*.md' \
|
|
':crates/red_knot_python_semantic/resources/mdtest/**/*.md' \
|
|
':!docs/**' \
|
|
':!assets/**' \
|
|
':.github/workflows/ci.yaml' \
|
|
; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Check if there was any playground related change
|
|
id: check_playground
|
|
env:
|
|
MERGE_BASE: ${{ steps.merge_base.outputs.sha }}
|
|
run: |
|
|
if git diff --quiet "${MERGE_BASE}...HEAD" -- \
|
|
':playground/**' \
|
|
; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Check if the red-knot code changed
|
|
id: check_red_knot
|
|
env:
|
|
MERGE_BASE: ${{ steps.merge_base.outputs.sha }}
|
|
run: |
|
|
if git diff --quiet "${MERGE_BASE}...HEAD" -- \
|
|
':Cargo.toml' \
|
|
':Cargo.lock' \
|
|
':crates/red_knot*/**' \
|
|
':crates/ruff_db/**' \
|
|
':crates/ruff_annotate_snippets/**' \
|
|
':crates/ruff_python_ast/**' \
|
|
':crates/ruff_python_parser/**' \
|
|
':crates/ruff_python_trivia/**' \
|
|
':crates/ruff_source_file/**' \
|
|
':crates/ruff_text_size/**' \
|
|
':.github/workflows/ci.yaml' \
|
|
; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
cargo-fmt:
|
|
name: "cargo fmt"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: "Install Rust toolchain"
|
|
run: rustup component add rustfmt
|
|
- run: cargo fmt --all --check
|
|
|
|
cargo-clippy:
|
|
name: "cargo clippy"
|
|
runs-on: ubuntu-latest
|
|
needs: determine_changes
|
|
if: ${{ needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main' }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: |
|
|
rustup component add clippy
|
|
rustup target add wasm32-unknown-unknown
|
|
- name: "Clippy"
|
|
run: cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
|
|
- name: "Clippy (wasm)"
|
|
run: cargo clippy -p ruff_wasm -p red_knot_wasm --target wasm32-unknown-unknown --all-features --locked -- -D warnings
|
|
|
|
cargo-test-linux:
|
|
name: "cargo test (linux)"
|
|
runs-on: depot-ubuntu-22.04-16
|
|
needs: determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
- name: "Install mold"
|
|
uses: rui314/setup-mold@v1
|
|
- name: "Install cargo nextest"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-nextest
|
|
- name: "Install cargo insta"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-insta
|
|
- name: Red-knot mdtests (GitHub annotations)
|
|
if: ${{ needs.determine_changes.outputs.red_knot == 'true' }}
|
|
env:
|
|
NO_COLOR: 1
|
|
MDTEST_GITHUB_ANNOTATIONS_FORMAT: 1
|
|
# Ignore errors if this step fails; we want to continue to later steps in the workflow anyway.
|
|
# This step is just to get nice GitHub annotations on the PR diff in the files-changed tab.
|
|
run: cargo test -p red_knot_python_semantic --test mdtest || true
|
|
- name: "Run tests"
|
|
shell: bash
|
|
env:
|
|
NEXTEST_PROFILE: "ci"
|
|
run: cargo insta test --all-features --unreferenced reject --test-runner nextest
|
|
|
|
# Check for broken links in the documentation.
|
|
- run: cargo doc --all --no-deps
|
|
env:
|
|
RUSTDOCFLAGS: "-D warnings"
|
|
# Use --document-private-items so that all our doc comments are kept in
|
|
# sync, not just public items. Eventually we should do this for all
|
|
# crates; for now add crates here as they are warning-clean to prevent
|
|
# regression.
|
|
- run: cargo doc --no-deps -p red_knot_python_semantic -p red_knot -p red_knot_test -p ruff_db --document-private-items
|
|
env:
|
|
# Setting RUSTDOCFLAGS because `cargo doc --check` isn't yet implemented (https://github.com/rust-lang/cargo/issues/10025).
|
|
RUSTDOCFLAGS: "-D warnings"
|
|
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
with:
|
|
name: ruff
|
|
path: target/debug/ruff
|
|
|
|
cargo-test-linux-release:
|
|
name: "cargo test (linux, release)"
|
|
runs-on: depot-ubuntu-22.04-16
|
|
needs: determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
- name: "Install mold"
|
|
uses: rui314/setup-mold@v1
|
|
- name: "Install cargo nextest"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-nextest
|
|
- name: "Install cargo insta"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-insta
|
|
- name: "Run tests"
|
|
shell: bash
|
|
env:
|
|
NEXTEST_PROFILE: "ci"
|
|
run: cargo insta test --release --all-features --unreferenced reject --test-runner nextest
|
|
|
|
cargo-test-windows:
|
|
name: "cargo test (windows)"
|
|
runs-on: github-windows-2025-x86_64-16
|
|
needs: determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
- name: "Install cargo nextest"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-nextest
|
|
- name: "Run tests"
|
|
shell: bash
|
|
env:
|
|
NEXTEST_PROFILE: "ci"
|
|
# Workaround for <https://github.com/nextest-rs/nextest/issues/1493>.
|
|
RUSTUP_WINDOWS_PATH_ADD_BIN: 1
|
|
run: |
|
|
cargo nextest run --all-features --profile ci
|
|
cargo test --all-features --doc
|
|
|
|
cargo-test-wasm:
|
|
name: "cargo test (wasm)"
|
|
runs-on: ubuntu-latest
|
|
needs: determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: rustup target add wasm32-unknown-unknown
|
|
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
|
with:
|
|
node-version: 20
|
|
cache: "npm"
|
|
cache-dependency-path: playground/package-lock.json
|
|
- uses: jetli/wasm-pack-action@0d096b08b4e5a7de8c28de67e11e945404e9eefa # v0.4.0
|
|
with:
|
|
version: v0.13.1
|
|
- name: "Test ruff_wasm"
|
|
run: |
|
|
cd crates/ruff_wasm
|
|
wasm-pack test --node
|
|
- name: "Test red_knot_wasm"
|
|
run: |
|
|
cd crates/red_knot_wasm
|
|
wasm-pack test --node
|
|
|
|
cargo-build-release:
|
|
name: "cargo build (release)"
|
|
runs-on: macos-latest
|
|
if: ${{ github.ref == 'refs/heads/main' }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
- name: "Install mold"
|
|
uses: rui314/setup-mold@v1
|
|
- name: "Build"
|
|
run: cargo build --release --locked
|
|
|
|
cargo-build-msrv:
|
|
name: "cargo build (msrv)"
|
|
runs-on: depot-ubuntu-latest-8
|
|
needs: determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: SebRollen/toml-action@b1b3628f55fc3a28208d4203ada8b737e9687876 # v1.2.0
|
|
id: msrv
|
|
with:
|
|
file: "Cargo.toml"
|
|
field: "workspace.package.rust-version"
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
env:
|
|
MSRV: ${{ steps.msrv.outputs.value }}
|
|
run: rustup default "${MSRV}"
|
|
- name: "Install mold"
|
|
uses: rui314/setup-mold@v1
|
|
- name: "Install cargo nextest"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-nextest
|
|
- name: "Install cargo insta"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-insta
|
|
- name: "Run tests"
|
|
shell: bash
|
|
env:
|
|
NEXTEST_PROFILE: "ci"
|
|
MSRV: ${{ steps.msrv.outputs.value }}
|
|
run: cargo "+${MSRV}" insta test --all-features --unreferenced reject --test-runner nextest
|
|
|
|
cargo-fuzz-build:
|
|
name: "cargo fuzz build"
|
|
runs-on: ubuntu-latest
|
|
needs: determine_changes
|
|
if: ${{ github.ref == 'refs/heads/main' || needs.determine_changes.outputs.fuzz == 'true' || needs.determine_changes.outputs.code == 'true' }}
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
with:
|
|
workspaces: "fuzz -> target"
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
- name: "Install cargo-binstall"
|
|
uses: cargo-bins/cargo-binstall@main
|
|
with:
|
|
tool: cargo-fuzz@0.11.2
|
|
- name: "Install cargo-fuzz"
|
|
# Download the latest version from quick install and not the github releases because github releases only has MUSL targets.
|
|
run: cargo binstall cargo-fuzz --force --disable-strategies crate-meta-data --no-confirm
|
|
- run: cargo fuzz build -s none
|
|
|
|
fuzz-parser:
|
|
name: "fuzz parser"
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- cargo-test-linux
|
|
- determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && needs.determine_changes.outputs.parser == 'true' }}
|
|
timeout-minutes: 20
|
|
env:
|
|
FORCE_COLOR: 1
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
|
|
- uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
|
name: Download Ruff binary to test
|
|
id: download-cached-binary
|
|
with:
|
|
name: ruff
|
|
path: ruff-to-test
|
|
- name: Fuzz
|
|
env:
|
|
DOWNLOAD_PATH: ${{ steps.download-cached-binary.outputs.download-path }}
|
|
run: |
|
|
# Make executable, since artifact download doesn't preserve this
|
|
chmod +x "${DOWNLOAD_PATH}/ruff"
|
|
|
|
(
|
|
uvx \
|
|
--python="${PYTHON_VERSION}" \
|
|
--from=./python/py-fuzzer \
|
|
fuzz \
|
|
--test-executable="${DOWNLOAD_PATH}/ruff" \
|
|
--bin=ruff \
|
|
0-500
|
|
)
|
|
|
|
scripts:
|
|
name: "test scripts"
|
|
runs-on: ubuntu-latest
|
|
needs: determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 5
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: rustup component add rustfmt
|
|
# Run all code generation scripts, and verify that the current output is
|
|
# already checked into git.
|
|
- run: python crates/ruff_python_ast/generate.py
|
|
- run: python crates/ruff_python_formatter/generate.py
|
|
- run: test -z "$(git status --porcelain)"
|
|
# Verify that adding a plugin or rule produces clean code.
|
|
- run: ./scripts/add_rule.py --name DoTheThing --prefix F --code 999 --linter pyflakes
|
|
- run: cargo check
|
|
- run: cargo fmt --all --check
|
|
- run: |
|
|
./scripts/add_plugin.py test --url https://pypi.org/project/-test/0.1.0/ --prefix TST
|
|
./scripts/add_rule.py --name FirstRule --prefix TST --code 001 --linter test
|
|
- run: cargo check
|
|
- run: cargo fmt --all --check
|
|
|
|
ecosystem:
|
|
name: "ecosystem"
|
|
runs-on: depot-ubuntu-latest-8
|
|
needs:
|
|
- cargo-test-linux
|
|
- determine_changes
|
|
# Only runs on pull requests, since that is the only we way we can find the base version for comparison.
|
|
# Ecosystem check needs linter and/or formatter changes.
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && github.event_name == 'pull_request' && needs.determine_changes.outputs.code == 'true' }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
|
|
with:
|
|
python-version: ${{ env.PYTHON_VERSION }}
|
|
|
|
- uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
|
name: Download comparison Ruff binary
|
|
id: ruff-target
|
|
with:
|
|
name: ruff
|
|
path: target/debug
|
|
|
|
- uses: dawidd6/action-download-artifact@20319c5641d495c8a52e688b7dc5fada6c3a9fbc # v8
|
|
name: Download baseline Ruff binary
|
|
with:
|
|
name: ruff
|
|
branch: ${{ github.event.pull_request.base.ref }}
|
|
workflow: "ci.yaml"
|
|
check_artifacts: true
|
|
|
|
- name: Install ruff-ecosystem
|
|
run: |
|
|
pip install ./python/ruff-ecosystem
|
|
|
|
- name: Run `ruff check` stable ecosystem check
|
|
if: ${{ needs.determine_changes.outputs.linter == 'true' }}
|
|
env:
|
|
DOWNLOAD_PATH: ${{ steps.ruff-target.outputs.download-path }}
|
|
run: |
|
|
# Make executable, since artifact download doesn't preserve this
|
|
chmod +x ./ruff "${DOWNLOAD_PATH}/ruff"
|
|
|
|
# Set pipefail to avoid hiding errors with tee
|
|
set -eo pipefail
|
|
|
|
ruff-ecosystem check ./ruff "${DOWNLOAD_PATH}/ruff" --cache ./checkouts --output-format markdown | tee ecosystem-result-check-stable
|
|
|
|
cat ecosystem-result-check-stable > "$GITHUB_STEP_SUMMARY"
|
|
echo "### Linter (stable)" > ecosystem-result
|
|
cat ecosystem-result-check-stable >> ecosystem-result
|
|
echo "" >> ecosystem-result
|
|
|
|
- name: Run `ruff check` preview ecosystem check
|
|
if: ${{ needs.determine_changes.outputs.linter == 'true' }}
|
|
env:
|
|
DOWNLOAD_PATH: ${{ steps.ruff-target.outputs.download-path }}
|
|
run: |
|
|
# Make executable, since artifact download doesn't preserve this
|
|
chmod +x ./ruff "${DOWNLOAD_PATH}/ruff"
|
|
|
|
# Set pipefail to avoid hiding errors with tee
|
|
set -eo pipefail
|
|
|
|
ruff-ecosystem check ./ruff "${DOWNLOAD_PATH}/ruff" --cache ./checkouts --output-format markdown --force-preview | tee ecosystem-result-check-preview
|
|
|
|
cat ecosystem-result-check-preview > "$GITHUB_STEP_SUMMARY"
|
|
echo "### Linter (preview)" >> ecosystem-result
|
|
cat ecosystem-result-check-preview >> ecosystem-result
|
|
echo "" >> ecosystem-result
|
|
|
|
- name: Run `ruff format` stable ecosystem check
|
|
if: ${{ needs.determine_changes.outputs.formatter == 'true' }}
|
|
env:
|
|
DOWNLOAD_PATH: ${{ steps.ruff-target.outputs.download-path }}
|
|
run: |
|
|
# Make executable, since artifact download doesn't preserve this
|
|
chmod +x ./ruff "${DOWNLOAD_PATH}/ruff"
|
|
|
|
# Set pipefail to avoid hiding errors with tee
|
|
set -eo pipefail
|
|
|
|
ruff-ecosystem format ./ruff "${DOWNLOAD_PATH}/ruff" --cache ./checkouts --output-format markdown | tee ecosystem-result-format-stable
|
|
|
|
cat ecosystem-result-format-stable > "$GITHUB_STEP_SUMMARY"
|
|
echo "### Formatter (stable)" >> ecosystem-result
|
|
cat ecosystem-result-format-stable >> ecosystem-result
|
|
echo "" >> ecosystem-result
|
|
|
|
- name: Run `ruff format` preview ecosystem check
|
|
if: ${{ needs.determine_changes.outputs.formatter == 'true' }}
|
|
env:
|
|
DOWNLOAD_PATH: ${{ steps.ruff-target.outputs.download-path }}
|
|
run: |
|
|
# Make executable, since artifact download doesn't preserve this
|
|
chmod +x ./ruff "${DOWNLOAD_PATH}/ruff"
|
|
|
|
# Set pipefail to avoid hiding errors with tee
|
|
set -eo pipefail
|
|
|
|
ruff-ecosystem format ./ruff "${DOWNLOAD_PATH}/ruff" --cache ./checkouts --output-format markdown --force-preview | tee ecosystem-result-format-preview
|
|
|
|
cat ecosystem-result-format-preview > "$GITHUB_STEP_SUMMARY"
|
|
echo "### Formatter (preview)" >> ecosystem-result
|
|
cat ecosystem-result-format-preview >> ecosystem-result
|
|
echo "" >> ecosystem-result
|
|
|
|
- name: Export pull request number
|
|
run: |
|
|
echo ${{ github.event.number }} > pr-number
|
|
|
|
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
name: Upload PR Number
|
|
with:
|
|
name: pr-number
|
|
path: pr-number
|
|
|
|
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
name: Upload Results
|
|
with:
|
|
name: ecosystem-result
|
|
path: ecosystem-result
|
|
|
|
cargo-shear:
|
|
name: "cargo shear"
|
|
runs-on: ubuntu-latest
|
|
needs: determine_changes
|
|
if: ${{ needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main' }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: cargo-bins/cargo-binstall@main
|
|
- run: cargo binstall --no-confirm cargo-shear
|
|
- run: cargo shear
|
|
|
|
python-package:
|
|
name: "python package"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 20
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
|
|
with:
|
|
python-version: ${{ env.PYTHON_VERSION }}
|
|
architecture: x64
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Prep README.md"
|
|
run: python scripts/transform_readme.py --target pypi
|
|
- name: "Build wheels"
|
|
uses: PyO3/maturin-action@44479ae1b6b1a57f561e03add8832e62c185eb17 # v1.48.1
|
|
with:
|
|
args: --out dist
|
|
- name: "Test wheel"
|
|
run: |
|
|
pip install --force-reinstall --find-links dist "${PACKAGE_NAME}"
|
|
ruff --help
|
|
python -m ruff --help
|
|
- name: "Remove wheels from cache"
|
|
run: rm -rf target/wheels
|
|
|
|
pre-commit:
|
|
name: "pre-commit"
|
|
runs-on: depot-ubuntu-22.04-16
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
|
|
- name: "Cache pre-commit"
|
|
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
|
|
with:
|
|
path: ~/.cache/pre-commit
|
|
key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
|
|
- name: "Run pre-commit"
|
|
run: |
|
|
echo '```console' > "$GITHUB_STEP_SUMMARY"
|
|
# Enable color output for pre-commit and remove it for the summary
|
|
# Use --hook-stage=manual to enable slower pre-commit hooks that are skipped by default
|
|
SKIP=cargo-fmt,clippy,dev-generate-all uvx --python="${PYTHON_VERSION}" pre-commit run --all-files --show-diff-on-failure --color=always --hook-stage=manual | \
|
|
tee >(sed -E 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})*)?[mGK]//g' >> "$GITHUB_STEP_SUMMARY") >&1
|
|
exit_code="${PIPESTATUS[0]}"
|
|
echo '```' >> "$GITHUB_STEP_SUMMARY"
|
|
exit "$exit_code"
|
|
|
|
docs:
|
|
name: "mkdocs"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
env:
|
|
MKDOCS_INSIDERS_SSH_KEY_EXISTS: ${{ secrets.MKDOCS_INSIDERS_SSH_KEY != '' }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
|
|
with:
|
|
python-version: "3.13"
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Add SSH key"
|
|
if: ${{ env.MKDOCS_INSIDERS_SSH_KEY_EXISTS == 'true' }}
|
|
uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
|
|
with:
|
|
ssh-private-key: ${{ secrets.MKDOCS_INSIDERS_SSH_KEY }}
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
|
|
- name: "Install Insiders dependencies"
|
|
if: ${{ env.MKDOCS_INSIDERS_SSH_KEY_EXISTS == 'true' }}
|
|
run: uv pip install -r docs/requirements-insiders.txt --system
|
|
- name: "Install dependencies"
|
|
if: ${{ env.MKDOCS_INSIDERS_SSH_KEY_EXISTS != 'true' }}
|
|
run: uv pip install -r docs/requirements.txt --system
|
|
- name: "Update README File"
|
|
run: python scripts/transform_readme.py --target mkdocs
|
|
- name: "Generate docs"
|
|
run: python scripts/generate_mkdocs.py
|
|
- name: "Check docs formatting"
|
|
run: python scripts/check_docs_formatted.py
|
|
- name: "Build Insiders docs"
|
|
if: ${{ env.MKDOCS_INSIDERS_SSH_KEY_EXISTS == 'true' }}
|
|
run: mkdocs build --strict -f mkdocs.insiders.yml
|
|
- name: "Build docs"
|
|
if: ${{ env.MKDOCS_INSIDERS_SSH_KEY_EXISTS != 'true' }}
|
|
run: mkdocs build --strict -f mkdocs.public.yml
|
|
|
|
check-formatter-instability-and-black-similarity:
|
|
name: "formatter instabilities and black similarity"
|
|
runs-on: ubuntu-latest
|
|
needs: determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.formatter == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
- name: "Run checks"
|
|
run: scripts/formatter_ecosystem_checks.sh
|
|
- name: "Github step summary"
|
|
run: cat target/formatter-ecosystem/stats.txt > "$GITHUB_STEP_SUMMARY"
|
|
- name: "Remove checkouts from cache"
|
|
run: rm -r target/formatter-ecosystem
|
|
|
|
check-ruff-lsp:
|
|
name: "test ruff-lsp"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 5
|
|
needs:
|
|
- cargo-test-linux
|
|
- determine_changes
|
|
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
steps:
|
|
- uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
name: "Download ruff-lsp source"
|
|
with:
|
|
persist-credentials: false
|
|
repository: "astral-sh/ruff-lsp"
|
|
|
|
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
|
|
with:
|
|
# installation fails on 3.13 and newer
|
|
python-version: "3.12"
|
|
|
|
- uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
|
name: Download development ruff binary
|
|
id: ruff-target
|
|
with:
|
|
name: ruff
|
|
path: target/debug
|
|
|
|
- name: Install ruff-lsp dependencies
|
|
run: |
|
|
just install
|
|
|
|
- name: Run ruff-lsp tests
|
|
env:
|
|
DOWNLOAD_PATH: ${{ steps.ruff-target.outputs.download-path }}
|
|
run: |
|
|
# Setup development binary
|
|
pip uninstall --yes ruff
|
|
chmod +x "${DOWNLOAD_PATH}/ruff"
|
|
export PATH="${DOWNLOAD_PATH}:${PATH}"
|
|
ruff version
|
|
|
|
just test
|
|
|
|
check-playground:
|
|
name: "check playground"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 5
|
|
needs:
|
|
- determine_changes
|
|
if: ${{ (needs.determine_changes.outputs.playground == 'true') }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: "Install Rust toolchain"
|
|
run: rustup target add wasm32-unknown-unknown
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
|
with:
|
|
node-version: 22
|
|
cache: "npm"
|
|
cache-dependency-path: playground/package-lock.json
|
|
- uses: jetli/wasm-bindgen-action@20b33e20595891ab1a0ed73145d8a21fc96e7c29 # v0.2.0
|
|
- name: "Install Node dependencies"
|
|
run: npm ci
|
|
working-directory: playground
|
|
- name: "Build playgrounds"
|
|
run: npm run dev:wasm
|
|
working-directory: playground
|
|
- name: "Run TypeScript checks"
|
|
run: npm run check
|
|
working-directory: playground
|
|
- name: "Check formatting"
|
|
run: npm run fmt:check
|
|
working-directory: playground
|
|
|
|
benchmarks:
|
|
runs-on: ubuntu-24.04
|
|
needs: determine_changes
|
|
if: ${{ github.repository == 'astral-sh/ruff' && !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- name: "Checkout Branch"
|
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
|
|
|
|
- name: "Install Rust toolchain"
|
|
run: rustup show
|
|
|
|
- name: "Install codspeed"
|
|
uses: taiki-e/install-action@d4635f2de61c8b8104d59cd4aede2060638378cc # v2
|
|
with:
|
|
tool: cargo-codspeed
|
|
|
|
- name: "Build benchmarks"
|
|
run: cargo codspeed build --features codspeed -p ruff_benchmark
|
|
|
|
- name: "Run benchmarks"
|
|
uses: CodSpeedHQ/action@0010eb0ca6e89b80c88e8edaaa07cfe5f3e6664d # v3.5.0
|
|
with:
|
|
run: cargo codspeed run
|
|
token: ${{ secrets.CODSPEED_TOKEN }}
|