ci: add gitea workflow
This commit is contained in:
@@ -0,0 +1,123 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
tags: ["v*"]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
actions: write
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
python-version: ["3.13"]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v3
|
||||||
|
|
||||||
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: uv pip install --system -e ".[dev]"
|
||||||
|
|
||||||
|
- name: Lint
|
||||||
|
run: ruff check src/ tests/
|
||||||
|
|
||||||
|
- name: Format check
|
||||||
|
run: ruff format --check src/ tests/
|
||||||
|
|
||||||
|
- name: Type check
|
||||||
|
run: mypy src/ tests/
|
||||||
|
|
||||||
|
- name: Test with coverage
|
||||||
|
run: pytest
|
||||||
|
|
||||||
|
- name: Upload coverage report
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: coverage
|
||||||
|
path: coverage.xml
|
||||||
|
|
||||||
|
build:
|
||||||
|
needs: test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
actions: write
|
||||||
|
releases: write
|
||||||
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v3
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.13"
|
||||||
|
|
||||||
|
- name: Build Debian package
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -y -qq build-essential debhelper dh-python python3-all python3-hatchling
|
||||||
|
cd linux && dpkg-buildpackage -us -uc -b && cd ..
|
||||||
|
mkdir -p dist-deb
|
||||||
|
mv ./*.deb dist-deb/
|
||||||
|
|
||||||
|
- name: Build wheel
|
||||||
|
run: uv build --wheel --out-dir dist
|
||||||
|
|
||||||
|
- name: Upload wheel
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: wheel
|
||||||
|
path: dist/*.whl
|
||||||
|
|
||||||
|
- name: Upload deb
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: deb
|
||||||
|
path: dist-deb/*.deb
|
||||||
|
|
||||||
|
- name: Create Gitea release and upload assets
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
api="${{ github.server_url }}/api/v1"
|
||||||
|
repo="${{ github.repository }}"
|
||||||
|
tag="${{ github.ref_name }}"
|
||||||
|
payload="{\"tag_name\":\"$tag\",\"name\":\"$tag\"}"
|
||||||
|
|
||||||
|
out=$(curl -sS -X POST "$api/repos/$repo/releases" \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "$payload" || true)
|
||||||
|
if ! printf '%s' "$out" | grep -q '"id"'; then
|
||||||
|
out=$(curl -sS "$api/repos/$repo/releases/tags/$tag" \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN")
|
||||||
|
fi
|
||||||
|
rid=$(printf '%s' "$out" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||||
|
[ -n "$rid" ] || { echo "release id not found" >&2; exit 1; }
|
||||||
|
|
||||||
|
for f in dist/*.whl dist-deb/*.deb; do
|
||||||
|
[ -e "$f" ] || continue
|
||||||
|
curl -fsS -X POST "$api/repos/$repo/releases/$rid/assets?name=$(basename "$f")" \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
--data-binary @"$f"
|
||||||
|
echo "Uploaded $(basename "$f")"
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user