Skip to content

Full CI build by default #593

Full CI build by default

Full CI build by default #593

Workflow file for this run

name: ci
on:
push:
branches:
- main
tags:
- '**'
pull_request: {}
jobs:
test:
name: test ${{ matrix.python-version }}, rust ${{ matrix.rust-version }} on ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu, macos, windows]
rust-version: [stable, '1.63.0']
python-version:
- '3.8'
- '3.9'
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- 'pypy3.8'
- 'pypy3.9'
- 'pypy3.10'
exclude:
- rust-version: '1.63.0'
os: macos
- rust-version: '1.63.0'
os: windows
runs-on: ${{ matrix.os }}-latest
env:
PYTHON: ${{ matrix.python-version }}
RUST: ${{ matrix.rust-version }}
OS: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: set up python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: install rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ matrix.rust-version }}
override: true
- name: cache rust
uses: Swatinem/rust-cache@v1
- run: pip install -r requirements/pyproject.txt -r requirements/testing.txt
- run: pip install -e .
- run: pip freeze
- if: matrix.os == 'ubuntu'
run: |
mkdir -p ${{ github.workspace }}/protected
touch ${{ github.workspace }}/protected/test
sudo chown -R root:root ${{ github.workspace }}/protected
sudo chmod 700 ${{ github.workspace }}/protected
- run: make test
env:
WATCHFILES_TEST_PERMISSION_DENIED_PATH: ${{ github.workspace }}/protected
- run: coverage xml
- uses: codecov/[email protected]
with:
file: ./coverage.xml
env_vars: PYTHON,RUST,OS
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: install rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt, clippy
- name: cache rust
uses: Swatinem/rust-cache@v1
- run: pip install -r requirements/pyproject.txt -r requirements/linting.txt
- run: pip install -e .
- uses: pre-commit/[email protected]
with:
extra_args: --all-files
env:
SKIP: no-commit-to-branch
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: set up python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: install
run: pip install -r requirements/docs.txt
- name: build site
run: mkdocs build
- name: store docs site
uses: actions/upload-artifact@v4
with:
name: docs
path: site
build:
name: >
build on ${{ matrix.platform || matrix.os }} (${{ matrix.target }} - ${{ matrix.manylinux || 'auto' }})
if: "!contains(github.event.pull_request.labels.*.name, 'Quick Build')"
strategy:
fail-fast: false
matrix:
os: [ubuntu, macos, windows]
target: [x86_64, aarch64]
manylinux: [auto]
include:
- os: ubuntu
platform: linux
pypy: true
- os: macos
target: x86_64
pypy: true
- os: macos
target: aarch64
pypy: true
- os: windows
ls: dir
- os: windows
ls: dir
target: i686
python-architecture: x86
- os: windows
ls: dir
target: aarch64
interpreter: 3.11 3.12
- os: ubuntu
platform: linux
target: i686
- os: ubuntu
platform: linux
target: armv7
- os: ubuntu
platform: linux
target: ppc64le
- os: ubuntu
platform: linux
target: s390x
# musllinux
- os: ubuntu
platform: linux
target: x86_64
manylinux: musllinux_1_1
- os: ubuntu
platform: linux
target: aarch64
manylinux: musllinux_1_1
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v4
- name: set up python
uses: actions/setup-python@v5
with:
python-version: '3.11'
architecture: ${{ matrix.python-architecture || 'x64' }}
- name: set package version
run: python .github/set_version.py
if: "startsWith(github.ref, 'refs/tags/')"
- name: Sync Cargo.lock
run: cargo update -p watchfiles_rust_notify
if: "startsWith(github.ref, 'refs/tags/')"
- name: build sdist
if: ${{ matrix.os == 'ubuntu' && matrix.target == 'x86_64' && matrix.manylinux == 'auto' }}
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: ${{ matrix.manylinux || 'auto' }}
args: --release --out dist --interpreter ${{ matrix.interpreter || '3.8 3.9 3.10 3.11 3.12 3.13' }}
- name: build pypy wheels
if: ${{ matrix.pypy }}
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: ${{ matrix.manylinux || 'auto' }}
args: --release --out dist --interpreter pypy3.8 pypy3.9 pypy3.10
- run: ${{ matrix.ls || 'ls -lh' }} dist/
- uses: actions/upload-artifact@v4
with:
name: pypi_files_${{ matrix.os }}_${{ matrix.target }}_${{ matrix.interpreter || 'all' }}_${{ matrix.manylinux }}
path: dist
list-pypi-files:
needs: [build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: get dist artifacts
uses: actions/download-artifact@v4
with:
pattern: pypi_files_*
merge-multiple: true
path: dist
- name: list dist files
run: |
ls -lh dist/
echo "`ls dist | wc -l` files"
- name: extract and list sdist file
run: |
mkdir sdist-files
tar -xvf dist/*.tar.gz -C sdist-files
tree -a sdist-files
- name: extract and list wheel file
run: ls dist/*cp312-manylinux_2_17_x86_64*.whl | head -n 1
- name: extract and list wheel file
run: python -m zipfile --list `ls dist/*cp312-manylinux_2_17_x86_64*.whl | head -n 1`
- run: pip install twine
- run: twine check dist/*
# Used for branch protection checks, see https://github.com/marketplace/actions/alls-green#why
check:
if: always()
needs: [test, lint, docs]
runs-on: ubuntu-latest
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
release:
needs: [build, check, docs]
if: "success() && startsWith(github.ref, 'refs/tags/')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: set up python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- run: pip install twine
- name: get dist artifacts
uses: actions/download-artifact@v4
with:
pattern: pypi_files_*
merge-multiple: true
path: dist
- name: get docs
uses: actions/download-artifact@v4
with:
name: docs
path: site
- run: twine check dist/*
- name: upload to pypi
run: twine upload dist/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.pypi_token }}
- name: publish docs
uses: JamesIves/[email protected]
with:
branch: gh-pages
folder: site