Skip to content

CI

CI #138

Workflow file for this run

name: CI
on:
push:
branches:
- master
pull_request:
schedule:
# Weekly Monday 5AM build
# * is a special character in YAML so you have to quote this string
- cron: '0 5 * * 1'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
initial_check:
name: Mandatory checks before CI
runs-on: ubuntu-latest
steps:
- name: Check base branch
uses: actions/github-script@v6
if: github.event_name == 'pull_request'
with:
script: |
const allowed_basebranch = 'master';
const pr = context.payload.pull_request;
if (pr.base.ref !== allowed_basebranch) {
core.setFailed(`PR opened against ${pr.base.ref}, not ${allowed_basebranch}`);
} else {
core.info(`PR opened correctly against ${allowed_basebranch}`);
}
# The rest only run if above are done
pep_and_audit:
name: PEP and audit
runs-on: ubuntu-latest
needs: initial_check
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Lint with flake8
run: |
python -m pip install --upgrade pip flake8
flake8 reftools --count
# Make sure that packaging will work
- name: pep517 build
run: |
python -m pip install --upgrade setuptools build "twine>=3.3"
python -m build --sdist .
twine check --strict dist/*
- name: Security audit
run: |
python -m pip install --upgrade bandit
bandit -r . -c .bandit.yaml
initial_tests:
name: Initial CI stage
runs-on: ubuntu-latest
needs: initial_check
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install and build
run: |
python -m pip install --upgrade pip setuptools
python -m pip install -e .[test]
- name: Test without optional deps
run: pytest
dev_deps_tests:
name: CI with dev dependencies
runs-on: ubuntu-latest
needs: [pep_and_audit, initial_tests]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.12'
- name: Install and build
run: |
python -m pip install --upgrade pip setuptools
python -m pip install --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple numpy>=0.0.dev0 --pre --upgrade
python -m pip install --extra-index-url https://pypi.anaconda.org/astropy/simple astropy>=0.0.dev0 --pre --upgrade
python -m pip install -e .[test]
- name: Test with dev deps
run: pytest
old_deps_tests:
name: CI with old dependencies
runs-on: ubuntu-20.04
needs: [pep_and_audit, initial_tests]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install and build
run: |
python -m pip install --upgrade pip setuptools
python -m pip install numpy==1.16.6
python -m pip install astropy==4.0.6
python -m pip install -e .[test]
- name: Test with old deps
run: pytest
other_oses:
name: CI in Win and OSX
runs-on: ${{ matrix.os }}
needs: [pep_and_audit, initial_tests]
strategy:
matrix:
os: [windows-latest, macos-latest]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install and build
run: |
python -m pip install --upgrade pip setuptools
python -m pip install -e .[test]
- name: Run tests
run: pytest
link_check:
name: Link check
runs-on: ubuntu-latest
needs: [pep_and_audit, initial_tests]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install and build
run: |
python -m pip install --upgrade pip setuptools sphinx-astropy
python -m pip install -e .
- name: Docs link check
run: |
cd doc
make linkcheck
shell: bash