Skip to content

Update CI

Update CI #62

Workflow file for this run

---
name: Tests
on:
push:
paths-ignore:
- "**.md"
- "LICENSE"
- "docs/**"
- ".gitignore"
- ".pre-commit-config.yaml"
env:
CACHE_DIR: /tmp/.workflow_cache
POETRY_CACHE_DIR: /tmp/.workflow_cache/.pip_packages
POETRY_VIRTUALENVS_PATH: /tmp/.workflow_cache/.venvs
POETRY_HOME: /tmp/.workflow_cache/.poetry
PIP_CACHE_DIR: /tmp/.workflow_cache/.pip_packages
MYPY_CACHE_DIR: /tmp/.workflow_cache/.mypy
jobs:
static-analysis:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ "ubuntu-latest" ]
python-version: [ "3.x" ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache dependencies
uses: actions/cache@v4
id: cache
with:
path: ${{ env.CACHE_DIR }}
key: tests-${{ matrix.os }}-${{ matrix.python-version }}--${{ hashFiles('**/poetry.lock') }}
- name: Install dependencies
run: |
curl -sSL https://install.python-poetry.org | python -
$POETRY_HOME/bin/poetry install -n
if: steps.cache.outputs.cache-hit != 'true'
- name: Python code style
run: $POETRY_HOME/bin/poetry run black . --check --diff
if: ${{ always() }}
- name: Python code quality
run: $POETRY_HOME/bin/poetry run flake8 --docstring-convention numpy
if: ${{ always() }}
- name: Python code complexity
run: $POETRY_HOME/bin/poetry run radon cc -n D compilertools 1>&2
if: ${{ always() }}
- name: Python code maintainability
run: $POETRY_HOME/bin/poetry run radon mi -n B compilertools 1>&2
if: ${{ always() }}
- name: Python code security
run: $POETRY_HOME/bin/poetry run bandit compilertools -rs B404,B603
if: ${{ always() }}
- name: YAML code style
run: $POETRY_HOME/bin/poetry run yamllint -s .
if: ${{ always() }}
tests:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- "ubuntu-22.04"
- "ubuntu-20.04"
- "windows-2019"
- "windows-2022"
- "macos-12"
- "macos-13"
- "macos-14"
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.x"
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache dependencies
uses: actions/cache@v4
id: cache
with:
path: ${{ env.CACHE_DIR }}
key: tests-${{ matrix.os }}-${{ matrix.python-version }}--${{ hashFiles('**/poetry.lock') }}
- name: Install dependencies
shell: bash
run: |
curl -sSL https://install.python-poetry.org | python -
$POETRY_HOME/bin/poetry install -n
if: steps.cache.outputs.cache-hit != 'true'
- name: Test
shell: bash
run: $POETRY_HOME/bin/poetry run pytest --junitxml=test-results.xml --cov-report xml
if: ${{ always() }}
- name: Collect coverage report
uses: codecov/codecov-action@v4
publish:
runs-on: ubuntu-latest
strategy:
matrix:
os: [ "ubuntu-latest" ]
python-version: [ "3.x" ]
if: ${{ github.repository == 'JGoutin/compilertools' && github.ref_type == 'tag' }}
needs: [tests]
environment: PyPI
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache dependencies
uses: actions/cache@v4
id: cache
with:
path: ${{ env.CACHE_DIR }}
key: tests-${{ matrix.os }}-${{ matrix.python-version }}--${{ hashFiles('**/poetry.lock') }}
- name: Set package version
run: $POETRY_HOME/bin/poetry version $(echo -e "${{ github.ref_name }}" | tr -d 'v')
- name: Publish packages on PyPI
run: $POETRY_HOME/bin/poetry publish --build
env:
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }}
- name: Publish release on GitHub
run: |
go install github.com/tcnksm/ghr@latest
~/go/bin/ghr -generatenotes $PRERELEASE -c ${{ github.sha }} ${{ github.ref_name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PRERELEASE: ${{ contains(github.ref_name, '-') && '-prerelease' || '' }}