diff --git a/.github/workflows/lock.yaml b/.github/workflows/lock.yaml index b46413532..533151a8a 100644 --- a/.github/workflows/lock.yaml +++ b/.github/workflows/lock.yaml @@ -7,15 +7,17 @@ name: Lock inactive closed issues on: schedule: - cron: '0 0 * * *' -permissions: - issues: write - pull-requests: write - discussions: write +permissions: {} concurrency: group: lock + cancel-in-progress: true jobs: lock: runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + discussions: write steps: - uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6.0.0 with: diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 546f4cf87..cefd4220f 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -3,12 +3,18 @@ on: pull_request: push: branches: [main, stable] +permissions: {} +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true jobs: main: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1 with: enable-cache: true prune-cache: false @@ -20,6 +26,4 @@ jobs: with: path: ~/.cache/pre-commit key: pre-commit|${{ hashFiles('pyproject.toml', '.pre-commit-config.yaml') }} - - run: uv run --locked --group pre-commit pre-commit run --show-diff-on-failure --color=always --all-files - - uses: pre-commit-ci/lite-action@5d6cc0eb514c891a40562a58a8e71576c5c7fb43 # v1.1.0 - if: ${{ !cancelled() }} + - run: uv run --locked --no-default-groups --group pre-commit pre-commit run --show-diff-on-failure --color=always --all-files diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 73903f8ca..323f4a060 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -2,6 +2,10 @@ name: Publish on: push: tags: ['*'] +permissions: {} +concurrency: + group: publish-${{ github.event.push.ref }} + cancel-in-progress: true jobs: build: runs-on: ubuntu-latest @@ -11,16 +15,16 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: astral-sh/setup-uv@eac588ad8def6316056a12d4907a9d4d84ff7a3b # v7.3.0 + - uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1 with: - enable-cache: true + enable-cache: false prune-cache: false - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version-file: pyproject.toml - run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV - run: uv build - - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 id: upload-artifact with: name: dist @@ -32,12 +36,12 @@ jobs: permissions: contents: write steps: - - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: artifact-ids: ${{ needs.build.outputs.artifact-id }} path: dist/ - name: create release - run: gh release create --draft --repo ${{ github.repository }} ${{ github.ref_name }} dist/* + run: gh release create --draft --repo ${GITHUB_REPOSITORY} ${GITHUB_REF_NAME} dist/* env: GH_TOKEN: ${{ github.token }} publish-pypi: @@ -49,7 +53,7 @@ jobs: permissions: id-token: write steps: - - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: artifact-ids: ${{ needs.build.outputs.artifact-id }} path: dist/ diff --git a/.github/workflows/test-flask.yaml b/.github/workflows/test-flask.yaml deleted file mode 100644 index a15c21619..000000000 --- a/.github/workflows/test-flask.yaml +++ /dev/null @@ -1,25 +0,0 @@ -name: Test Flask Main -on: - pull_request: - paths-ignore: ['docs/**', 'README.md'] - push: - branches: [main, stable] - paths-ignore: ['docs/**', 'README.md'] -jobs: - flask-tests: - name: flask-tests - runs-on: ubuntu-latest - steps: - - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 - with: - enable-cache: true - prune-cache: false - - run: git clone https://github.com/pallets/flask - - run: uv venv --python 3.14 - working-directory: ./flask - - run: source .venv/bin/activate - working-directory: ./flask - - run: uv sync --all-extras - working-directory: ./flask - - run: uv run --with "git+https://github.com/pallets/click.git@main" -- pytest - working-directory: ./flask diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index a4d247724..a5b1da3ea 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -5,6 +5,10 @@ on: push: branches: [main, stable] paths-ignore: ['docs/**', 'README.md'] +permissions: {} +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true jobs: tests: name: ${{ matrix.name || matrix.python }} @@ -14,48 +18,35 @@ jobs: matrix: include: - {python: '3.14'} - - {name: free-threaded-latest, python: '3.14t'} + - {python: '3.14t'} + - {name: Windows, python: '3.14', os: windows-latest} + - {name: Mac, python: '3.14', os: macos-latest} - {python: '3.13'} - - {name: Windows, python: '3.13', os: windows-latest} - - {name: Mac, python: '3.13', os: macos-latest} - {python: '3.12'} - {python: '3.11'} - {python: '3.10'} - {name: PyPy, python: 'pypy-3.11', tox: pypy3.11} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: - enable-cache: true - prune-cache: false - - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 - with: - python-version: ${{ matrix.python }} - - run: uv run --locked tox run -e ${{ matrix.tox || format('py{0}', matrix.python) }} - stress: - name: stress (${{ matrix.name || matrix.python }}) - runs-on: ${{ matrix.os || 'ubuntu-latest' }} - strategy: - fail-fast: false - matrix: - include: - - {python: '3.14'} - - {name: free-threaded, python: '3.14t', tox: stress-py3.14t} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + persist-credentials: false + - uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1 with: enable-cache: true prune-cache: false - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ matrix.python }} - - run: uv run --locked tox run -e ${{ matrix.tox || format('stress-py{0}', matrix.python) }} + - run: uv run --locked --no-default-groups --group dev tox run + env: + TOX_ENV: ${{ matrix.tox || format('py{0}', matrix.python) }} typing: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1 with: enable-cache: true prune-cache: false @@ -67,4 +58,4 @@ jobs: with: path: ./.mypy_cache key: mypy|${{ hashFiles('pyproject.toml') }} - - run: uv run --locked tox run -e typing + - run: uv run --locked --no-default-groups --group dev tox run -e typing diff --git a/.github/workflows/zizmor.yaml b/.github/workflows/zizmor.yaml new file mode 100644 index 000000000..70a53cec1 --- /dev/null +++ b/.github/workflows/zizmor.yaml @@ -0,0 +1,22 @@ +name: GitHub Actions security analysis with zizmor +on: + pull_request: + paths: ["**/*.yaml?"] + push: + branches: [main, stable] + paths: ["**/*.yaml?"] +permissions: {} +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +jobs: + zizmor: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - uses: zizmorcore/zizmor-action@195d10ad90f31d8cd6ea1efd6ecc12969ddbe73f # v0.5.1 + with: + advanced-security: false + annotations: true