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
|
name: CI build
on:
push:
branches:
- main
pull_request: {}
schedule:
- cron: "0 0 * * 0"
jobs:
lint-commits:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- name: install cairo
run: sudo apt-get update && sudo apt-get install -y libcairo2-dev
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: wagoid/commitlint-github-action@v6
lint-code:
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install native dependencies
run: sudo apt-get update && sudo apt-get -y install libdbus-1-dev libgirepository-2.0-dev libcairo2-dev
- name: Cache Python packages
uses: actions/cache@v5
with:
path: ~/.cache/pip
key: lint-code-${{ hashFiles('setup.py') }}-${{ hashFiles('tox.ini') }}
- name: Install tox
run: |
python -m pip install --upgrade pip
pip install tox
- name: Lint with tox
run: tox -e check
docs:
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install native dependencies
run: sudo apt-get update && sudo apt-get -y install libdbus-1-dev libgirepository-2.0-dev plantuml libcairo2-dev
- name: Cache Python packages
uses: actions/cache@v5
with:
path: ~/.cache/pip
key: docs-${{ hashFiles('setup.py') }}-${{ hashFiles('tox.ini') }}-${{ hashFiles('requirements-doc.txt') }}
- name: Install tox
run: |
python -m pip install --upgrade pip
pip install tox
- name: Build Sphinx docs
run: tox -e docs
test-mindeps:
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Cache Python packages
uses: actions/cache@v5
with:
path: ~/.cache/pip
key: test-mindeps-${{ hashFiles('setup.py') }}-${{ hashFiles('tox.ini') }}
- name: Install tox
run: |
python -m pip install --upgrade pip
pip install tox
- name: Test execution with minimal dependencies
run: tox -e mindeps
test:
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: ["3.11", "3.12", "3.13"]
steps:
- name: Clone repo
uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install native dependencies
run: sudo apt-get update && sudo apt-get -y install libdbus-1-dev libgirepository-2.0-dev libcairo2-dev
- name: Cache Python packages
uses: actions/cache@v5
with:
path: ~/.cache/pip
key: test-${{ hashFiles('setup.py') }}-${{ hashFiles('tox.ini') }}-${{ matrix.python-version }}
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install coverage tox tox-gh-actions
- name: Test with tox
run: |
tox
coverage xml --rcfile=setup.cfg
- name: Publish coverage to codecov.io
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
release:
runs-on: ubuntu-latest
if: ${{ github.ref == 'refs/heads/main' }}
needs:
- lint-code
- test-mindeps
- test
- docs
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@v2
with:
app_id: ${{ secrets.RELEASE_APP_ID }}
private_key: ${{ secrets.RELEASE_PRIVATE_KEY }}
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Cache Node packages
uses: actions/cache@v5
with:
path: node_modules
key: release-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
run: npm ci
- name: Release
run: npx semantic-release
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
|