Files
familiar/.gitea/workflows/ci.yml
T
LatteandClaude Opus 4.8 585acc766c
CI / lint (pull_request) Successful in 53s
CI / test (pull_request) Successful in 1m0s
CI / publish (pull_request) Has been skipped
CI / lint (push) Successful in 53s
CI / test (push) Successful in 59s
CI / publish (push) Failing after 39s
ci: add Gitea Actions workflow (lint, test, publish)
Lint (ruff) and test (pytest, fail under 80% coverage) on every PR and
push to main/dev. On a merge to main/dev, build the sdist+wheel and
publish to the Gitea PyPI registry — main as a clean release, dev as a
unique .devN pre-release. No Docker; runs on uv.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 17:34:59 +02:00

81 lines
2.5 KiB
YAML

name: CI
# Lint + test on every PR and push to main/dev.
# On a push to main/dev (i.e. a merge), build the Python package and publish it
# to the Gitea PyPI registry — only if lint and tests pass first.
on:
pull_request:
branches: [main, dev]
push:
branches: [main, dev]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Install dependencies
run: uv sync --group dev
- name: Ruff (lint + format check)
run: |
uv run ruff check .
uv run ruff format --check .
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Install dependencies
run: uv sync --group dev
- name: Run tests with coverage (fails under 80%)
run: uv run pytest
publish:
# Only publish on a real merge into main or dev, never on PRs.
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev')
needs: [lint, test]
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Compute version
# main publishes the clean version from pyproject.toml.
# dev publishes a unique pre-release (X.Y.Z.devN) so merges never collide.
run: |
BASE=$(uv version --short)
if [ "${{ github.ref_name }}" = "dev" ]; then
VERSION="${BASE}.dev${{ github.run_number }}"
uv version "$VERSION" --no-sync
else
VERSION="$BASE"
fi
echo "Publishing version $VERSION"
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
- name: Build sdist + wheel
run: uv build
- name: Publish to Gitea PyPI registry
env:
# The auto-provided token works for the same owner's package registry.
# Override with a PACKAGE_REGISTRY_TOKEN secret if your instance needs it.
TWINE_USERNAME: ${{ gitea.actor }}
TWINE_PASSWORD: ${{ secrets.PACKAGE_REGISTRY_TOKEN || secrets.GITHUB_TOKEN }}
run: |
uvx twine upload \
--repository-url "${{ github.server_url }}/api/packages/${{ github.repository_owner }}/pypi" \
--non-interactive \
--skip-existing \
dist/*