From c1e4afc683016d84bca26a8c5b901bc94b3be141 Mon Sep 17 00:00:00 2001 From: Artur Borecki Date: Mon, 14 Jul 2025 17:26:27 +0200 Subject: [PATCH] ci: rework workflows for uv --- .github/workflows/commit_checks.yaml | 104 ++++++++++++++++++ .../{coverage.yaml => pr_checks.yaml} | 35 +++--- .github/workflows/release.yaml | 46 +++----- .github/workflows/test.yaml | 38 ------- 4 files changed, 138 insertions(+), 85 deletions(-) create mode 100644 .github/workflows/commit_checks.yaml rename .github/workflows/{coverage.yaml => pr_checks.yaml} (55%) delete mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/commit_checks.yaml b/.github/workflows/commit_checks.yaml new file mode 100644 index 0000000..a5d8511 --- /dev/null +++ b/.github/workflows/commit_checks.yaml @@ -0,0 +1,104 @@ +name: Commit Checks + +on: + push: + branches: + - '*' + workflow_call: + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +jobs: + test: + name: Test + runs-on: ubuntu-latest + steps: + - name: ๐Ÿ”€ checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: "${{ secrets.GITHUB_TOKEN }}" + submodules: 'recursive' + + - name: ๐Ÿ“ฆ install uv + uses: astral-sh/setup-uv@v5 + + - name: ๐Ÿ python + uses: actions/setup-python@v5 + with: + python-version-file: "pyproject.toml" + + - name: ๐Ÿ“ฆ sync depedencies + run: | + uv sync + uv sync --group test + + - name: ๐Ÿงช run tests + id: test + run: | + uv run pytest -v + coverage: + name: Check coverage + runs-on: ubuntu-latest + steps: + - name: ๐Ÿ”€ checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: "${{ secrets.GITHUB_TOKEN }}" + submodules: 'recursive' + + - name: ๐Ÿ“ฆ install uv + uses: astral-sh/setup-uv@v5 + + - name: ๐Ÿ python + uses: actions/setup-python@v5 + with: + python-version-file: "pyproject.toml" + + - name: ๐Ÿ“ฆ sync depedencies + run: | + uv sync + uv sync --group test + + - name: ๐Ÿงช run tests + id: test + run: | + uv run pytest -v --cov + + - name: ๐Ÿ“Š generate coverage report + if: always() + run: | + uv run coverage json + cov_percent=$(jq '.totals.percent_covered' coverage.json) + cov_percent_rounded=$(python3 -c "print(round(${cov_percent}, 2))") + cov_lines=$(jq '.totals.covered_lines' coverage.json) + cov_missing=$(jq '.totals.missing_lines' coverage.json) + cov_total=$(jq '.totals.num_statements' coverage.json) + cov_excluded=$(jq '.totals.excluded_lines' coverage.json) + report_success=$(python3 -c "print(str(${cov_percent} == 100).lower())") + + if (( $(echo "$cov_percent >= 100" | bc -l) )); then + badge_color="brightgreen" + elif (( $(echo "$cov_percent >= 90" | bc -l) )); then + badge_color="yellow" + else + badge_color="red" + fi + + echo "## ๐Ÿ“Š Coverage Report" >> $GITHUB_STEP_SUMMARY + + echo "![Coverage: $cov_percent_rounded%](https://img.shields.io/badge/Coverage-$cov_percent_rounded%25-$badge_color)" >> $GITHUB_STEP_SUMMARY + + echo "| Total Lines | Covered | Missing | Excluded |" >> $GITHUB_STEP_SUMMARY + echo "|-------------|---------|---------|----------|" >> $GITHUB_STEP_SUMMARY + echo "| $cov_total | $cov_lines | $cov_missing | $cov_excluded |" >> $GITHUB_STEP_SUMMARY + + echo "
" >> $GITHUB_STEP_SUMMARY + echo "Details" >> $GITHUB_STEP_SUMMARY + echo '' >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + uv run coverage report >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo '' >> $GITHUB_STEP_SUMMARY + echo "
" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/coverage.yaml b/.github/workflows/pr_checks.yaml similarity index 55% rename from .github/workflows/coverage.yaml rename to .github/workflows/pr_checks.yaml index 079f34b..537cf2d 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/pr_checks.yaml @@ -1,4 +1,4 @@ -name: Code coverage +name: PR Checks on: pull_request: @@ -7,43 +7,42 @@ on: jobs: comment_coverage: + name: Comment coverage on PR runs-on: ubuntu-latest steps: - - name: GH_TOKEN - if: env.GH_TOKEN == '' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: echo "GH_TOKEN=${GITHUB_TOKEN}" >> $GITHUB_ENV - - name: ๐Ÿ”€ checkout uses: actions/checkout@v4 with: fetch-depth: 0 - token: "${{ env.GH_TOKEN }}" + token: "${{ secrets.GITHUB_TOKEN }}" + submodules: 'recursive' + + - name: ๐Ÿ“ฆ install uv + uses: astral-sh/setup-uv@v5 - name: ๐Ÿ python uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version-file: "pyproject.toml" - - name: ๐Ÿ“ฆ setup pdm - uses: pdm-project/setup-pdm@v4 - with: - cache: true - - - name: ๐Ÿ“ฆ install dependencies + - name: ๐Ÿ“ฆ sync depedencies run: | - pdm install + uv sync + uv sync --group test + - name: configure git run: | git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" + - name: ๐Ÿงช run coverage run: | - pdm run pytest --cov --junitxml=pytest.xml --cov-report=term-missing | tee pytest-coverage.txt + uv run pytest --cov --junitxml=pytest.xml --cov-report=term-missing | tee pytest-coverage.txt + continue-on-error: true + - name: ๐Ÿ“Š comment coverage uses: MishaKav/pytest-coverage-comment@main with: pytest-coverage-path: pytest-coverage.txt - junitxml-path: pytest.xml \ No newline at end of file + junitxml-path: pytest.xml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 7907bc8..9a0a8b9 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,40 +34,30 @@ on: - 'beta' - 'rc' - 'post' -env: - GH_TOKEN: ${{ secrets.GH_TOKEN }} - jobs: bump_version: runs-on: ubuntu-latest name: Bump version and create release steps: - - name: GH_TOKEN - if: env.GH_TOKEN == '' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: echo "GH_TOKEN=${GITHUB_TOKEN}" >> $GITHUB_ENV - - name: ๐Ÿ”€ checkout uses: actions/checkout@v4 with: fetch-depth: 0 - token: "${{ env.GH_TOKEN }}" + token: "${{ secrets.GITHUB_TOKEN }}" submodules: 'recursive' + - name: ๐Ÿ“ฆ install uv + uses: astral-sh/setup-uv@v5 + - name: ๐Ÿ python uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version-file: "pyproject.toml" - - name: ๐Ÿ“ฆ setup pdm - uses: pdm-project/setup-pdm@v4 - with: - cache: true - - - name: ๐Ÿ“ฆ install dependencies + - name: ๐Ÿ“ฆ sync depedencies run: | - pdm install + uv sync + uv sync --group bump - name: configure git run: | @@ -78,40 +68,38 @@ jobs: if: ${{ github.event.inputs.auto_bump == 'true' }} run: | if [ "${{ github.event.inputs.as_pre_release }}" == "true" ]; then - pdm run semantic-release version --no-changelog --no-commit --no-push --as-prerelease --prerelease-token ${{ github.event.inputs.prerelease_type }} + uv run semantic-release version --no-changelog --no-commit --no-push --as-prerelease --prerelease-token ${{ github.event.inputs.prerelease_type }} else - pdm run semantic-release version --no-changelog --no-commit --no-push + uv run semantic-release version --no-changelog --no-commit --no-push fi - name: ๐Ÿ“ฆ bump version (manual) if: ${{ github.event.inputs.auto_bump == 'false' }} run: | if [ "${{ github.event.inputs.as_pre_release }}" == "true" ]; then - pdm run semantic-release version --no-changelog --no-commit --no-push --${{ github.event.inputs.bump_type }} --as-prerelease --prerelease-token ${{ github.event.inputs.prerelease_type }} + uv run semantic-release version --no-changelog --no-commit --no-push --${{ github.event.inputs.bump_type }} --as-prerelease --prerelease-token ${{ github.event.inputs.prerelease_type }} else - pdm run semantic-release version --no-changelog --no-commit --no-push --${{ github.event.inputs.bump_type }} + uv run semantic-release version --no-changelog --no-commit --no-push --${{ github.event.inputs.bump_type }} fi - name: ๐Ÿ“ฆ get new version id: get_version - run: echo "BUMPED_VERSION=$(cat ${{ github.event.repository.name }}/__init__.py | grep __version__ | cut -d '"' -f 2)" >> $GITHUB_OUTPUT + run: echo "BUMPED_VERSION=$(cat pyproject.toml | grep -e "^version = " | cut -d '"' -f 2)" >> $GITHUB_OUTPUT - name: ๐Ÿ“ create changelog run: | - pdm run git-cliff -s header -l > release_body.md + uv run git-cliff -s header -l > release_body.md echo "Changes:" && cat release_body.md - pdm run git-cliff > CHANGELOG.md + uv run git-cliff > CHANGELOG.md - name: ๐Ÿ“ค push changes run: | - git add CHANGELOG.md pyproject.toml ${{ github.event.repository.name }}/__init__.py + git add CHANGELOG.md pyproject.toml src/*/__init__.py git commit -m "chore(release): ${{ steps.get_version.outputs.BUMPED_VERSION }}" git push origin main - name: create release uses: softprops/action-gh-release@v2 - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} with: name: ${{ github.event.repository.name }} ${{ steps.get_version.outputs.BUMPED_VERSION }} - ${{ github.event.inputs.short_description }} tag_name: ${{ steps.get_version.outputs.BUMPED_VERSION }} @@ -126,7 +114,7 @@ jobs: - name: ๐Ÿ“ค merge into develop run: | git checkout develop - git merge main --no-ff + git merge main git push origin develop - name: โœ… done diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml deleted file mode 100644 index 70fe466..0000000 --- a/.github/workflows/test.yaml +++ /dev/null @@ -1,38 +0,0 @@ -name: Run tests only - -on: - push: - branches: - - '*' - workflow_call: - -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -jobs: - test: - name: Test - runs-on: ubuntu-latest - steps: - - name: ๐Ÿ”€ checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: ๐Ÿ python - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - - name: ๐Ÿ“ฆ setup pdm - uses: pdm-project/setup-pdm@v4 - with: - cache: true - - - name: ๐Ÿ“ฆ install dependencies - run: | - pdm install - - - name: ๐Ÿงช run tests - id: test - run: | - pdm run pytest -v