2022-05-13 13:42:42 -04:00
name : Tests
on :
- push
- pull_request
jobs :
tests :
2022-05-20 17:05:03 -04:00
name : ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }} ${{ matrix.database }}
2022-05-13 13:42:42 -04:00
runs-on : ${{ matrix.os }}
strategy :
fail-fast : false
matrix :
include :
2022-11-12 22:41:43 -05:00
- { python : "3.11" , os : "ubuntu-latest" , session : "pre-commit" }
- { python : "3.11" , os : "ubuntu-latest" , session : "safety" }
- { python : "3.11" , os : "ubuntu-latest" , session : "mypy" }
- { python : "3.10" , os : "ubuntu-latest" , session : "mypy" }
- { python : "3.9" , os : "ubuntu-latest" , session : "mypy" }
2022-05-19 14:38:47 -04:00
- {
2022-11-09 15:15:27 -05:00
python : "3.11" ,
2022-05-19 14:38:47 -04:00
os : "ubuntu-latest" ,
session : "tests" ,
2022-05-20 12:08:42 -04:00
database : "mysql" ,
2022-05-19 14:38:47 -04:00
}
2022-11-12 22:41:43 -05:00
- {
python : "3.11" ,
os : "ubuntu-latest" ,
session : "tests" ,
database : "postgres" ,
}
- {
python : "3.11" ,
os : "ubuntu-latest" ,
session : "tests" ,
database : "sqlite" ,
}
- {
python : "3.10" ,
os : "ubuntu-latest" ,
session : "tests" ,
database : "sqlite" ,
}
- {
python : "3.9" ,
os : "ubuntu-latest" ,
session : "tests" ,
database : "sqlite" ,
}
- {
python : "3.10" ,
os : "windows-latest" ,
session : "tests" ,
database : "sqlite" ,
}
- {
python : "3.11" ,
os : "macos-latest" ,
session : "tests" ,
database : "sqlite" ,
}
2022-05-20 14:37:23 -04:00
- {
2022-11-09 15:15:27 -05:00
# typeguard 2.13.3 is broken with TypeDict in 3.11.
2022-05-20 14:37:23 -04:00
# probably the next release fixes it.
# https://github.com/agronholm/typeguard/issues/242
2022-11-09 15:15:27 -05:00
python : "3.11" ,
2022-05-20 14:37:23 -04:00
os : "ubuntu-latest" ,
session : "typeguard" ,
database : "sqlite" ,
}
2022-11-09 15:15:27 -05:00
- { python : "3.11" , os : "ubuntu-latest" , session : "xdoctest" }
- { python : "3.11" , os : "ubuntu-latest" , session : "docs-build" }
2022-05-13 13:42:42 -04:00
env :
NOXSESSION : ${{ matrix.session }}
2022-05-23 16:36:23 -04:00
SPIFF_DATABASE_TYPE : ${{ matrix.database }}
2022-05-13 13:42:42 -04:00
FORCE_COLOR : "1"
PRE_COMMIT_COLOR : "always"
2022-06-20 22:56:50 -04:00
DB_PASSWORD : password
2022-06-20 22:43:19 -04:00
FLASK_SESSION_SECRET_KEY : super_secret_key
2022-05-13 13:42:42 -04:00
steps :
- name : Check out the repository
uses : actions/checkout@v3.0.2
- name : Set up Python ${{ matrix.python }}
2022-08-02 20:35:38 +00:00
uses : actions/setup-python@v4.2.0
2022-05-13 13:42:42 -04:00
with :
python-version : ${{ matrix.python }}
- name : Upgrade pip
run : |
pip install --constraint=.github/workflows/constraints.txt pip
pip --version
- name : Upgrade pip in virtual environments
shell : python
run : |
import os
import pip
with open(os.environ["GITHUB_ENV"], mode="a") as io:
print(f"VIRTUALENV_PIP={pip.__version__}", file=io)
- name : Install Poetry
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry
poetry --version
- name : Install Nox
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox
pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry
nox --version
- name : Compute pre-commit cache key
if : matrix.session == 'pre-commit'
id : pre-commit-cache
shell : python
run : |
import hashlib
import sys
python = "py{}.{}".format(*sys.version_info[:2])
payload = sys.version.encode() + sys.executable.encode()
digest = hashlib.sha256(payload).hexdigest()
result = "${{ runner.os }}-{}-{}-pre-commit".format(python, digest[:8])
print("::set-output name=result::{}".format(result))
- name : Restore pre-commit cache
2022-10-13 20:30:13 +00:00
uses : actions/cache@v3.0.11
2022-05-13 13:42:42 -04:00
if : matrix.session == 'pre-commit'
with :
path : ~/.cache/pre-commit
key : ${{ steps.pre-commit-cache.outputs.result }}-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys : |
${{ steps.pre-commit-cache.outputs.result }}-
2022-05-20 15:14:19 -04:00
- name : Setup Mysql
uses : mirromutth/mysql-action@v1.1
with :
host port : 3306
container port : 3306
2022-05-20 16:37:23 -04:00
mysql version : "8.0"
2023-02-08 12:51:48 -05:00
mysql database : "spiffworkflow_backend_unit_testing"
2022-05-20 17:03:08 -04:00
mysql root password : password
2022-05-20 15:14:19 -04:00
if : matrix.database == 'mysql'
2022-05-13 13:42:42 -04:00
2022-06-21 22:56:42 -04:00
- name : Setup Postgres
2023-02-08 12:51:48 -05:00
run : docker run --name postgres-spiff -p 5432:5432 -e POSTGRES_PASSWORD=spiffworkflow_backend -e POSTGRES_USER=spiffworkflow_backend -e POSTGRES_DB=spiffworkflow_backend_unit_testing -d postgres
2022-06-21 22:56:42 -04:00
if : matrix.database == 'postgres'
2022-05-13 13:42:42 -04:00
- name : Run Nox
run : |
nox --force-color --python=${{ matrix.python }}
- name : Upload coverage data
# pin to upload coverage from only one matrix entry, otherwise coverage gets confused later
2022-11-12 22:41:43 -05:00
if : always() && matrix.session == 'tests' && matrix.python == '3.11' && matrix.os == 'ubuntu-latest' && matrix.database == 'mysql'
2022-05-13 13:42:42 -04:00
uses : "actions/upload-artifact@v3.0.0"
with :
name : coverage-data
path : ".coverage.*"
- name : Upload documentation
if : matrix.session == 'docs-build'
uses : actions/upload-artifact@v3.0.0
with :
name : docs
path : docs/_build
2022-07-07 10:19:52 -04:00
- name : Upload logs
if : failure() && matrix.session == 'tests'
uses : "actions/upload-artifact@v3.0.0"
with :
2022-07-07 10:50:01 -04:00
name : logs-${{matrix.python}}-${{matrix.os}}-${{matrix.database}}
2022-07-07 10:19:52 -04:00
path : "./log/*.log"
2022-07-11 17:10:07 -04:00
check_docker_start_script :
runs-on : ubuntu-latest
steps :
- name : Check out the repository
uses : actions/checkout@v3.0.2
with :
# Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud
fetch-depth : 0
- name : start_backend
run : ./bin/build_and_run_with_docker_compose
2022-07-11 22:36:56 -04:00
timeout-minutes : 20
2022-07-11 17:10:07 -04:00
env :
SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA : "true"
- name : wait_for_backend
run : ./bin/wait_for_server_to_be_up 5
2022-05-13 13:42:42 -04:00
coverage :
runs-on : ubuntu-latest
needs : tests
steps :
- name : Check out the repository
uses : actions/checkout@v3.0.2
with :
# Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud
fetch-depth : 0
- name : Set up Python
2022-08-02 20:35:38 +00:00
uses : actions/setup-python@v4.2.0
2022-05-13 13:42:42 -04:00
with :
2022-11-09 15:15:27 -05:00
python-version : "3.11"
2022-05-13 13:42:42 -04:00
- name : Upgrade pip
run : |
pip install --constraint=.github/workflows/constraints.txt pip
pip --version
- name : Install Poetry
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry
poetry --version
- name : Install Nox
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox
pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry
nox --version
- name : Download coverage data
2022-10-21 20:55:34 +00:00
uses : actions/download-artifact@v3.0.1
2022-05-13 13:42:42 -04:00
with :
name : coverage-data
- name : Combine coverage data and display human readable report
run : |
find . -name \*.pyc -delete
nox --force-color --session=coverage
- name : Create coverage report
run : |
nox --force-color --session=coverage -- xml
- name : Upload coverage report
uses : codecov/codecov-action@v3.1.0
- name : SonarCloud Scan
uses : sonarsource/sonarcloud-github-action@master
2022-05-26 13:34:19 -04:00
# thought about just skipping dependabot
2022-05-23 13:33:48 -04:00
# if: ${{ github.actor != 'dependabot[bot]' }}
2022-05-26 13:34:19 -04:00
# but figured all pull requests seems better, since none of them will have access to sonarcloud.
# however, with just skipping pull requests, the build associated with "Triggered via push" is also associated with the pull request and also fails hitting sonarcloud
# if: ${{ github.event_name != 'pull_request' }}
# so just skip everything but main
if : github.ref_name == 'main'
2022-05-13 13:42:42 -04:00
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN : ${{ secrets.SONAR_TOKEN }}
2022-06-10 17:42:19 -04:00
# part about saving PR number and then using it from auto-merge-dependabot-prs from:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run
- name : Save PR number
if : ${{ github.event_name == 'pull_request' }}
env :
PR_NUMBER : ${{ github.event.number }}
run : |
mkdir -p ./pr
echo "$PR_NUMBER" > ./pr/pr_number
- uses : actions/upload-artifact@v3
with :
name : pr_number
path : pr/