name: CI "on": push: branches: ["**"] tags: ["**"] pull_request: branches: [master] env: UV_CACHE_DIR: /uv-cache jobs: ruff-check: name: Lint (ruff check) runs-on: ubuntu-latest container: image: docker.gitea.com/runner-images:ubuntu-latest volumes: - /srv/act-runner-cache/uv:/uv-cache steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v5 with: enable-cache: false - run: | echo "UV_CACHE_DIR=/uv-cache" >> "$GITHUB_ENV" echo "UV_LINK_MODE=copy" >> "$GITHUB_ENV" - run: uv sync --extra cpu --extra dev - run: uv run ruff check . ruff-format: name: Format (ruff format) runs-on: ubuntu-latest container: image: docker.gitea.com/runner-images:ubuntu-latest volumes: - /srv/act-runner-cache/uv:/uv-cache steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v5 with: enable-cache: false - run: | echo "UV_CACHE_DIR=/uv-cache" >> "$GITHUB_ENV" echo "UV_LINK_MODE=copy" >> "$GITHUB_ENV" - run: uv sync --extra cpu --extra dev - run: uv run ruff format --check . type-check: name: Type check (ty) runs-on: ubuntu-latest container: image: docker.gitea.com/runner-images:ubuntu-latest volumes: - /srv/act-runner-cache/uv:/uv-cache steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v5 with: enable-cache: false - run: | echo "UV_CACHE_DIR=/uv-cache" >> "$GITHUB_ENV" echo "UV_LINK_MODE=copy" >> "$GITHUB_ENV" - run: uv sync --extra cpu --extra dev - run: uv run ty check . test: name: Tests needs: [ruff-check, type-check] runs-on: ubuntu-latest container: image: docker.gitea.com/runner-images:ubuntu-latest volumes: - /srv/act-runner-cache/uv:/uv-cache steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v5 with: enable-cache: false - run: | echo "UV_CACHE_DIR=/uv-cache" >> "$GITHUB_ENV" echo "UV_LINK_MODE=copy" >> "$GITHUB_ENV" - run: uv sync --extra cpu --extra dev - run: uv run pytest --cov --cov-report=term-missing --cov-report=xml - uses: actions/upload-artifact@v3 with: name: coverage-report path: coverage.xml sync-version-on-tag: name: Sync project version with tag if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: token: ${{ secrets.CI_TOKEN }} - uses: astral-sh/setup-uv@v5 - name: Check tag against project version, update if they differ run: | TAG_VERSION="${GITHUB_REF_NAME#v}" CURRENT_VERSION=$(uv version --short) if [ "$TAG_VERSION" != "$CURRENT_VERSION" ]; then echo "Tag version ($TAG_VERSION) != project version ($CURRENT_VERSION); updating pyproject.toml" uv version "$TAG_VERSION" --no-sync git config user.name "gitea-actions" git config user.email "actions@git.larsbogner.de" git add pyproject.toml uv.lock git commit -m "chore: sync project version to tag ${GITHUB_REF_NAME} [skip ci]" git push origin HEAD:master git push origin ":refs/tags/${GITHUB_REF_NAME}" git tag -f "${GITHUB_REF_NAME}" HEAD git push origin "refs/tags/${GITHUB_REF_NAME}" else echo "Tag version matches project version ($CURRENT_VERSION)" fi