Skip to content

Update readme

Update readme #501

Workflow file for this run

name: Code quality tests
env:
ALL_PYTHON_VERSIONS: "['3.12']"
ALL_NODE_VERSIONS: "['20']"
CACHE_VERSION: 1
on:
pull_request:
branches:
- main
permissions:
# Gives the action the necessary permissions for publishing new
# comments in pull requests.
pull-requests: write
# Gives the action the necessary permissions for pushing data to the
# python-coverage-comment-action branch, and for editing existing
# comments (to avoid publishing multiple comments in the same PR)
contents: write
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
info:
runs-on: ubuntu-latest
name: Collect information & changes data
outputs:
run_pipeline: ${{ steps.changes.outputs.core }}
run_pipeline_frontend: ${{ steps.changes.outputs.frontend }}
python_versions: ${{ steps.info.outputs.python_versions }}
python_cache_key: ${{ steps.generate_python_cache_key.outputs.key }}
node_versions: ${{ steps.info.outputs.node_versions }}
steps:
- name: Checkout code
uses: actions/checkout@v4.2.0
- name: Filter for core changes
uses: dorny/paths-filter@v3.0.2
id: changes
with:
filters: |
core:
- pypmanager/**/*.py
- tests/**/*.py
- pyproject.toml
- .github/**/*.yml
frontend:
- frontend/**/*
- .github/**/*.yml
- name: Generate partial Python venv restore key
id: generate_python_cache_key
run: >-
echo "key=venv-${{ env.CACHE_VERSION }}-${{
hashFiles('pyproject.toml') }}" >> $GITHUB_OUTPUT
- name: Collect additional information
id: info
run: |
echo "python_versions: ${ALL_PYTHON_VERSIONS}"
echo "python_versions=${ALL_PYTHON_VERSIONS}" >> $GITHUB_OUTPUT
echo "node_versions: ${ALL_NODE_VERSIONS}"
echo "node_versions=${ALL_NODE_VERSIONS}" >> $GITHUB_OUTPUT
create-virtualenv:
name: Setup environment
runs-on: ubuntu-latest
needs: info
timeout-minutes: 5
if: needs.info.outputs.run_pipeline == 'true'
strategy:
matrix:
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
steps:
- name: Checkout code
uses: actions/checkout@v4.2.0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v4.0.2
with:
path: .venv
lookup-only: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Install requirements
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
pip install uv
uv venv
source .venv/bin/activate
uv pip install -e .'[test]'
linter:
name: Run code linters
needs:
- create-virtualenv
- info
runs-on: ubuntu-latest
timeout-minutes: 5
strategy:
matrix:
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
if: needs.info.outputs.run_pipeline == 'true'
steps:
- name: Checkout code
uses: actions/checkout@v4.2.0
with:
fetch-depth: "2"
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Restore full Python ${{ steps.python.outputs.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
with:
path: .venv
fail-on-cache-miss: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Run ruff (fully)
run: |
source .venv/bin/activate
pre-commit run --hook-stage manual ruff --all-files --show-diff-on-failure
env:
RUFF_OUTPUT_FORMAT: github
- name: Run ruff-format
run: |
source .venv/bin/activate
pre-commit run --hook-stage manual ruff-format --all-files --show-diff-on-failure
env:
RUFF_OUTPUT_FORMAT: github
- name: Run mypy
run: |
source .venv/bin/activate
mypy pypmanager
pytest:
name: Run test suite
continue-on-error: true
needs:
- info
- create-virtualenv
runs-on: ubuntu-latest
timeout-minutes: 5
strategy:
matrix:
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
if: needs.info.outputs.run_pipeline == 'true'
steps:
- name: Checkout code
uses: actions/checkout@v4.2.0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Restore full Python ${{ steps.python.outputs.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
with:
path: .venv
fail-on-cache-miss: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Run tests
run: |
source .venv/bin/activate
pytest tests --timeout=30 --cov pypmanager --cov-report xml
- name: Run coverage test
run: |
source .venv/bin/activate
coverage json
coverage-threshold
- name: Coverage comment
id: coverage_comment
uses: py-cov-action/python-coverage-comment-action@v3.28
with:
GITHUB_TOKEN: ${{ github.token }}
ANNOTATE_MISSING_LINES: true
ANNOTATION_TYPE: warning
- name: Store Pull Request comment to be posted
uses: actions/upload-artifact@v4.4.0
if: steps.coverage_comment.outputs.COMMENT_FILE_WRITTEN == 'true'
with:
# If you use a different name, update COMMENT_ARTIFACT_NAME accordingly
name: python-coverage-comment-action
# If you use a different name, update COMMENT_FILENAME accordingly
path: python-coverage-comment-action.txt
qa-frontend:
name: Run test suite frontend
continue-on-error: true
needs:
- info
runs-on: ubuntu-latest
timeout-minutes: 5
strategy:
matrix:
node-version: ${{ fromJSON(needs.info.outputs.node_versions) }}
if: needs.info.outputs.run_pipeline_frontend == 'true'
steps:
- name: Checkout code
uses: actions/checkout@v4.2.0
- name: Set up Node ${{ matrix.node-version }}
uses: actions/setup-node@v4.0.4
with:
node-version: ${{ matrix.node-version }}
- name: Install requirements
run: |
cd frontend
yarn
- run: |
cd frontend
yarn cicd-lint
name: Run Eslint
- run: |
cd frontend
yarn cicd-prettier
name: Run prettier
- run: |
cd frontend
yarn cicd-typecheck
name: Run type hint checks