1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
# NB: this name is used in the status badge, where we want to see "build: passing"
name: build
permissions:
contents: read
on:
push:
branches:
- master
pull_request:
branches:
- master
workflow_dispatch: # allow manual triggering from GitHub UI
schedule:
- cron: "0 5 * * 6" # 5:00 UTC every Saturday
jobs:
build:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
toxenv: [py]
include:
- python-version: "3.9"
toxenv: minreqs
services:
httpbin:
image: kennethreitz/httpbin
ports:
- 8080:80
steps:
- name: Install OS dependencies
run: |
sudo apt-get update
sudo apt-get install -y geoip-database libgeoip-dev gettext
- name: Git clone
uses: actions/checkout@v4
with:
show-progress: false
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: "${{ matrix.python-version }}"
allow-prereleases: true
- name: Pip cache
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('tox.ini', 'pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.python-version }}-
${{ runner.os }}-pip-
- name: Install Python dependencies
# coverage is required by coverallsapp/github-action
run: |
python -m pip install -U pip
python -m pip install -U hatchling hatch-vcs polib
python -m pip install -U tox coverage
- name: Run tests
run: |
python -m hatchling build -t sdist --hooks-only
python -m tox -e ${{ matrix.toxenv }}-geoip
- name: Report to coveralls
uses: coverallsapp/github-action@f350da2c033043742f89e8c0b7b5145a1616da6d # v2.1.2
with:
parallel: true
flag-name: run-${{ matrix.python-version }}
finish:
needs: build
runs-on: ubuntu-latest
steps:
- name: Close coveralls parallel build
uses: coverallsapp/github-action@f350da2c033043742f89e8c0b7b5145a1616da6d # v2.1.2
with:
parallel-finished: true
docs:
# there's some overlap with publish-pages.yml, but this one runs on pull
# requests, doesn't publish, and runs more doc checks
name: docs
runs-on: ubuntu-latest
steps:
- name: Git clone
uses: actions/checkout@v4
with:
show-progress: false
- name: Install Ubuntu packages
run: |
sudo apt-get install -y graphviz mandoc
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Pip cache
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-docs-${{ hashFiles('tox.ini') }}
restore-keys: |
${{ runner.os }}-pip-docs-
${{ runner.os }}-pip-
- name: Install Python packages
run: |
pip install -U dnspython beautifulsoup4 requests \
hatchling hatch-vcs sphinx sphinx-epytext \
sphinx-intl sphinx-rtd-theme sphinx-sitemap
- name: Build
run: |
python3 -m hatchling build -t sdist --hooks-only
make -C doc html
make -C doc locale
make -C doc man
make -C doc check
lint:
name: ${{ matrix.toxenv }}
runs-on: ubuntu-latest
strategy:
matrix:
toxenv:
- flake8
- check-python-versions
- pylint
- yamllint
steps:
- name: Git clone
uses: actions/checkout@v4
with:
show-progress: false
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Pip cache
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.toxenv }}-${{ hashFiles('tox.ini') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.toxenv }}-
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install -U hatchling hatch-vcs polib
python -m pip install -U tox
- name: Run ${{ matrix.toxenv }}
run: python -m tox -e ${{ matrix.toxenv }}
|