Factor out OneOfSchema from OneOfStringSchema and OneOfIntSchema #501
Workflow file for this run
This file contains 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: Build | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- '*' | |
pull_request: | |
permissions: | |
# https://github.community/t/permissions-nesecary-to-comment-on-a-pr/179047/5 | |
pull-requests: write | |
jobs: | |
build: | |
name: Build | |
strategy: | |
matrix: | |
python-version: | |
- ${{ vars.ARCALOT_PYTHON_VERSION }} | |
- '3.10' | |
- 'pypy3.9' | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Update version number | |
if: startsWith(github.ref, 'refs/tags/') | |
run: sed -i -e "s/0.0.0/${GITHUB_REF##*/}/" pyproject.toml | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: install python style and linting tools | |
run: pip install black flake8 autoflake isort docformatter | |
- name: Check unused code | |
run: autoflake --remove-all-unused-imports --remove-unused-variables --check . | |
- name: Check import order (isort) | |
run: isort --check --profile black --line-length 79 . | |
- name: Check docstring formatting | |
run: docformatter --check --recursive --black --wrap-descriptions 79 --wrap-summaries 79 . | |
- name: Error and style linting | |
id: flake8 | |
run: flake8 --max-line-length 79 --ignore E203,W503 . | |
- name: Check error linting | |
if: steps.flake8.outputs.number > 0 | |
run: exit 1 | |
- name: Install poetry | |
run: | | |
python -m pip install poetry==1.4 | |
- name: Configure poetry | |
run: | | |
python -m poetry config virtualenvs.in-project true | |
- name: Upload logs on failure | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: logs-${{ matrix.python-version }} | |
path: "*.log" | |
- name: Cache the virtualenv | |
uses: actions/cache@v4 | |
with: | |
path: ./.venv | |
key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock') }} | |
- name: Install dependencies | |
run: | | |
python -m poetry install | |
- name: Run tests with coverage | |
run: | | |
# Run the unit tests | |
python -m poetry run coverage run -a -m unittest discover -v src | |
# Run the example plugin | |
python -m poetry run coverage run -a ./example_plugin.py -f example.yaml | |
# Test the example plugin | |
python -m poetry run coverage run -a ./test_example_plugin.py | |
# Generate the coverage HTML report | |
python -m poetry run coverage html | |
- name: Publish coverage report to job summary | |
# publishing only once | |
if: ${{ matrix.python-version == vars.ARCALOT_PYTHON_VERSION }} | |
run: | | |
poetry run html2text --ignore-images --ignore-links -b 0 htmlcov/index.html >> $GITHUB_STEP_SUMMARY | |
- name: Generate documentation | |
run: | | |
poetry run sphinx-apidoc -o docs/ -f -a -e src/ --doc-project "Python SDK for Arcaflow" | |
poetry run make -C docs html | |
- name: Build | |
run: poetry build | |
- name: Upload dist artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-${{ matrix.python-version }} | |
path: dist | |
if-no-files-found: error | |
- name: Upload coverage HTML artifact | |
if: ${{ matrix.python-version == vars.ARCALOT_PYTHON_VERSION }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage-${{ matrix.python-version }} | |
path: htmlcov | |
if-no-files-found: error | |
publish: | |
name: Publish | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
if: startsWith(github.ref, 'refs/tags/') | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-${{ vars.ARCALOT_PYTHON_VERSION }} | |
path: dist | |
- name: Install twine | |
run: pip install -U twine | |
- name: Publish | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{secrets.PYPI_TOKEN}} | |
TWINE_NON_INTERACTIVE: true | |
run: twine upload dist/* |