Merge pull request #3 from carp-dk/main-refc #1
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: release | |
| on: | |
| push: | |
| tags: | |
| - "**" | |
| concurrency: | |
| group: release-${{ github.ref }} | |
| cancel-in-progress: false | |
| jobs: | |
| validate_tag: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.version.outputs.version }} | |
| tag: ${{ steps.version.outputs.tag }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.13" | |
| - id: version | |
| name: Validate tag against package version | |
| run: | | |
| version=$(python - <<'PY' | |
| import pathlib | |
| import tomllib | |
| project = tomllib.loads(pathlib.Path("pyproject.toml").read_text()) | |
| print(project["project"]["version"]) | |
| PY | |
| ) | |
| tag="${GITHUB_REF_NAME}" | |
| if [ "${tag}" != "${version}" ] && [ "${tag}" != "v${version}" ]; then | |
| echo "Tag ${tag} does not match package version ${version}." >&2 | |
| exit 1 | |
| fi | |
| echo "version=${version}" >> "${GITHUB_OUTPUT}" | |
| echo "tag=${tag}" >> "${GITHUB_OUTPUT}" | |
| test: | |
| needs: validate_tag | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12", "3.13"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e . | |
| python -m pip install pytest pytest-cov pandas pyarrow folium matplotlib | |
| - name: Run tests | |
| run: pytest --cov=src/carp --cov-branch --cov-fail-under=100 | |
| quality: | |
| needs: validate_tag | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.13" | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e . | |
| python -m pip install pytest pytest-cov mypy ruff sphinx sphinx-rtd-theme pandas pyarrow folium matplotlib | |
| - name: Lint | |
| run: ruff check src examples tests docs | |
| - name: Type check | |
| run: mypy src/carp | |
| - name: Build docs | |
| run: sphinx-build -W -b html docs docs/_build/html | |
| build: | |
| needs: [test, quality] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.13" | |
| - name: Build distributions | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install build twine | |
| python -m build | |
| python -m twine check dist/* | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: python-package-distributions | |
| path: dist/ | |
| publish_pypi: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: pypi | |
| permissions: | |
| id-token: write | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: python-package-distributions | |
| path: dist/ | |
| - uses: pypa/gh-action-pypi-publish@release/v1 | |
| publish_github: | |
| needs: [validate_tag, publish_pypi] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: python-package-distributions | |
| path: dist/ | |
| - name: Generate checksums | |
| run: shasum -a 256 dist/* > dist/SHA256SUMS.txt | |
| - uses: softprops/action-gh-release@v2 | |
| with: | |
| name: Release ${{ needs.validate_tag.outputs.tag }} | |
| tag_name: ${{ needs.validate_tag.outputs.tag }} | |
| generate_release_notes: true | |
| files: dist/* |