linkchecker/.github/workflows/build.yml
Marius Gedminas 4ee13f140a Cache ClamAV signatures
We don't care if the signatures are stale (we only need the EICAR virus
test signature), so run freshclam only if the cache is missing entirely.

Closes #709.

Also, use apt-get instead of apt to avoid

    WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
2022-12-31 17:15:25 +02:00

163 lines
4.3 KiB
YAML

# NB: this name is used in the status badge, where we want to see "build: passing"
name: build
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.8"
- "3.9"
- "3.10"
- "3.11"
toxenv: [py]
include:
- python-version: "3.7"
toxenv: minreqs
steps:
- name: Install OS dependencies
run: |
sudo apt-get update
sudo apt-get install -y clamav-daemon geoip-database libgeoip-dev gettext
- name: ClamAV cache
id: cache-clamav
uses: actions/cache@v3
with:
path: /var/lib/clamav
key: clamav-v1
- name: Download the ClamAV signature database
if: ${{ steps.cache-clamav.outputs.cache-hit != 'true' }}
run: |
sudo service clamav-freshclam stop
sudo freshclam
sudo service clamav-daemon restart
sudo service clamav-daemon status
- name: Git clone
uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: "${{ matrix.python-version }}"
- name: Pip cache
uses: actions/cache@v3
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
run: |
python -m pip install -U pip
python -m pip install -U hatchling hatch-vcs polib
python -m pip install -U tox coveralls
- name: Wait for ClamAV to be ready
run: |
while ! test -S /var/run/clamav/clamd.ctl; do printf "."; sleep 1; done
- name: Run tests
run: |
python -m hatchling build -t sdist --hooks-only
python -m tox -e ${{ matrix.toxenv }}
- name: Report to coveralls
run: coveralls
env:
COVERALLS_SERVICE_NAME: github
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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-22.04
steps:
- name: Git clone
uses: actions/checkout@v3
- name: Install Ubuntu packages
run: |
sudo apt-get install -y graphviz mandoc
- name: Set up Python
uses: actions/setup-python@v4
- name: Pip cache
uses: actions/cache@v3
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 -r requirements.txt 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
- yamllint
steps:
- name: Git clone
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
- name: Pip cache
uses: actions/cache@v3
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 }}