Skip to content

CI

CI #3768

name: CI
on:
push:
branches:
- main
- "0.3"
- "0.4"
- "0.5"
- "1.0"
- "2.0"
pull_request:
merge_group:
concurrency:
# Cancel running job if another commit is pushed to the branch
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
test:
name: test
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
os:
- ubuntu-latest
- windows-latest
- macos-latest
exclude:
# https://github.com/stac-utils/pystac/issues/1470
- os: windows-latest
python-version: "3.13"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Sync
run: uv sync --all-extras
- name: Test on windows
if: runner.os == 'Windows'
shell: bash
env:
TMPDIR: 'D:\\a\\_temp'
run: uv run pytest tests
- name: Test
if: runner.os != 'Windows'
run: uv run scripts/test
coverage:
name: coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Install with dependencies
run: uv sync --all-extras
- name: Run coverage with orjson
run: uv run pytest tests --cov
- name: Uninstall orjson
run: uv pip uninstall orjson
- name: Run coverage without orjson, appending results
run: uv run pytest tests --cov --cov-append
- name: Prepare ./coverage.xml
# Ignore the configured fail-under to ensure we upload the coverage report. We
# will trigger a failure for coverage drops in a later job
run: uv run coverage xml --fail-under 0
- name: Upload All coverage to Codecov
uses: codecov/codecov-action@v5
if: ${{ env.GITHUB_REPOSITORY }} == 'stac-utils/pystac'
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.xml
fail_ci_if_error: false
- name: Check for coverage drop
# This will use the configured fail-under, causing this job to fail if the
# coverage drops.
run: uv run coverage report
lint:
runs-on: ubuntu-latest
strategy:
matrix:
python-version:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Sync
run: uv sync
- name: Execute linters & type checkers
run: uv run pre-commit run --all-files
without-orjson:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Sync
run: uv sync
- name: Uninstall orjson
run: uv pip uninstall orjson
- name: Run tests
run: uv run pytest tests
check-benchmarks:
# This checks to make sure any API changes haven't broken any of the
# benchmarks. It doesn't do any actual benchmarking, since (IMO) that's not
# appropriate for CI on Github actions.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Sync
run: uv sync
- name: Set asv machine
run: uv run asv machine --yes
- name: Check benchmarks
run: uv run asv run -a repeat=1 -a rounds=1 HEAD
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Install pandoc
run: sudo apt-get install pandoc
- name: Install pystac
run: uv sync --no-dev && uv sync --package pystac-docs --inexact
- name: Check docs
run: uv run make -C docs html SPHINXOPTS="-W --keep-going"