checkout code before building docker image w/ burnettk jbirddog

This commit is contained in:
jasquat 2022-11-11 12:26:51 -05:00
parent ce61c99eae
commit af0008f0b4
1 changed files with 268 additions and 263 deletions

View File

@ -9,269 +9,269 @@ defaults:
working-directory: spiffworkflow-backend working-directory: spiffworkflow-backend
jobs: jobs:
tests: # tests:
name: ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }} ${{ matrix.database }} # name: ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }} ${{ matrix.database }}
runs-on: ${{ matrix.os }} # runs-on: ${{ matrix.os }}
strategy: # strategy:
fail-fast: false # fail-fast: false
matrix: # matrix:
include: # include:
- { python: "3.11", os: "ubuntu-latest", session: "safety" } # - { python: "3.11", os: "ubuntu-latest", session: "safety" }
- { python: "3.11", os: "ubuntu-latest", session: "mypy" } # - { python: "3.11", os: "ubuntu-latest", session: "mypy" }
- { # - {
python: "3.11", # python: "3.11",
os: "ubuntu-latest", # os: "ubuntu-latest",
session: "tests", # session: "tests",
database: "mysql", # database: "mysql",
} # }
- { # - {
python: "3.11", # python: "3.11",
os: "ubuntu-latest", # os: "ubuntu-latest",
session: "tests", # session: "tests",
database: "postgres", # database: "postgres",
} # }
- { # - {
python: "3.11", # python: "3.11",
os: "ubuntu-latest", # os: "ubuntu-latest",
session: "tests", # session: "tests",
database: "sqlite", # database: "sqlite",
} # }
- { # - {
python: "3.11", # python: "3.11",
os: "macos-latest", # os: "macos-latest",
session: "tests", # session: "tests",
database: "sqlite", # database: "sqlite",
} # }
- { # - {
# typeguard 2.13.3 is broken with TypeDict in 3.11. # # typeguard 2.13.3 is broken with TypeDict in 3.11.
# probably the next release fixes it. # # probably the next release fixes it.
# https://github.com/agronholm/typeguard/issues/242 # # https://github.com/agronholm/typeguard/issues/242
python: "3.11", # python: "3.11",
os: "ubuntu-latest", # os: "ubuntu-latest",
session: "typeguard", # session: "typeguard",
database: "sqlite", # database: "sqlite",
} # }
- { python: "3.11", os: "ubuntu-latest", session: "xdoctest" } # - { python: "3.11", os: "ubuntu-latest", session: "xdoctest" }
- { python: "3.11", os: "ubuntu-latest", session: "docs-build" } # - { python: "3.11", os: "ubuntu-latest", session: "docs-build" }
#
env: # env:
NOXSESSION: ${{ matrix.session }} # NOXSESSION: ${{ matrix.session }}
SPIFF_DATABASE_TYPE: ${{ matrix.database }} # SPIFF_DATABASE_TYPE: ${{ matrix.database }}
FORCE_COLOR: "1" # FORCE_COLOR: "1"
PRE_COMMIT_COLOR: "always" # PRE_COMMIT_COLOR: "always"
DB_PASSWORD: password # DB_PASSWORD: password
FLASK_SESSION_SECRET_KEY: super_secret_key # FLASK_SESSION_SECRET_KEY: super_secret_key
#
steps: # steps:
- name: Check out the repository # - name: Check out the repository
uses: actions/checkout@v3.0.2 # uses: actions/checkout@v3.0.2
#
- name: Set up Python ${{ matrix.python }} # - name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v4.2.0 # uses: actions/setup-python@v4.2.0
with: # with:
python-version: ${{ matrix.python }} # python-version: ${{ matrix.python }}
#
- name: Upgrade pip # - name: Upgrade pip
run: | # run: |
pip install --constraint=.github/workflows/constraints.txt pip # pip install --constraint=.github/workflows/constraints.txt pip
pip --version # pip --version
#
- name: Upgrade pip in virtual environments # - name: Upgrade pip in virtual environments
shell: python # shell: python
run: | # run: |
import os # import os
import pip # import pip
#
with open(os.environ["GITHUB_ENV"], mode="a") as io: # with open(os.environ["GITHUB_ENV"], mode="a") as io:
print(f"VIRTUALENV_PIP={pip.__version__}", file=io) # print(f"VIRTUALENV_PIP={pip.__version__}", file=io)
#
- name: Install Poetry # - name: Install Poetry
run: | # run: |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry # pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry
poetry --version # poetry --version
#
- name: Install Nox # - name: Install Nox
run: | # run: |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox # pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox
pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry # pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry
nox --version # nox --version
#
# - name: Compute pre-commit cache key # # - name: Compute pre-commit cache key
# if: matrix.session == 'pre-commit' # # if: matrix.session == 'pre-commit'
# id: pre-commit-cache # # id: pre-commit-cache
# shell: python # # shell: python
# run: | # # run: |
# import hashlib # # import hashlib
# import sys # # import sys
# # #
# python = "py{}.{}".format(*sys.version_info[:2]) # # python = "py{}.{}".format(*sys.version_info[:2])
# payload = sys.version.encode() + sys.executable.encode() # # payload = sys.version.encode() + sys.executable.encode()
# digest = hashlib.sha256(payload).hexdigest() # # digest = hashlib.sha256(payload).hexdigest()
# result = "${{ runner.os }}-{}-{}-pre-commit".format(python, digest[:8]) # # result = "${{ runner.os }}-{}-{}-pre-commit".format(python, digest[:8])
# # #
# print("::set-output name=result::{}".format(result)) # # print("::set-output name=result::{}".format(result))
# # #
# - name: Restore pre-commit cache # # - name: Restore pre-commit cache
# uses: actions/cache@v3.0.11 # # uses: actions/cache@v3.0.11
# if: matrix.session == 'pre-commit' # # if: matrix.session == 'pre-commit'
# with: # # with:
# path: ~/.cache/pre-commit # # path: ~/.cache/pre-commit
# key: ${{ steps.pre-commit-cache.outputs.result }}-${{ hashFiles('.pre-commit-config.yaml') }} # # key: ${{ steps.pre-commit-cache.outputs.result }}-${{ hashFiles('.pre-commit-config.yaml') }}
# restore-keys: | # # restore-keys: |
# ${{ steps.pre-commit-cache.outputs.result }}- # # ${{ steps.pre-commit-cache.outputs.result }}-
- name: Setup Mysql # - name: Setup Mysql
uses: mirromutth/mysql-action@v1.1 # uses: mirromutth/mysql-action@v1.1
with: # with:
host port: 3306 # host port: 3306
container port: 3306 # container port: 3306
mysql version: "8.0" # mysql version: "8.0"
mysql database: "spiffworkflow_backend_testing" # mysql database: "spiffworkflow_backend_testing"
mysql root password: password # mysql root password: password
if: matrix.database == 'mysql' # if: matrix.database == 'mysql'
#
- name: Setup Postgres # - name: Setup Postgres
run: docker run --name postgres-spiff -p 5432:5432 -e POSTGRES_PASSWORD=spiffworkflow_backend -e POSTGRES_USER=spiffworkflow_backend -e POSTGRES_DB=spiffworkflow_backend_testing -d postgres # run: docker run --name postgres-spiff -p 5432:5432 -e POSTGRES_PASSWORD=spiffworkflow_backend -e POSTGRES_USER=spiffworkflow_backend -e POSTGRES_DB=spiffworkflow_backend_testing -d postgres
if: matrix.database == 'postgres' # if: matrix.database == 'postgres'
#
- name: Run Nox # - name: Run Nox
run: | # run: |
nox --force-color --python=${{ matrix.python }} # nox --force-color --python=${{ matrix.python }}
#
- name: Upload coverage data # - name: Upload coverage data
# pin to upload coverage from only one matrix entry, otherwise coverage gets confused later # # pin to upload coverage from only one matrix entry, otherwise coverage gets confused later
if: always() && matrix.session == 'tests' && matrix.python == '3.11' && matrix.os == 'ubuntu-latest' # if: always() && matrix.session == 'tests' && matrix.python == '3.11' && matrix.os == 'ubuntu-latest'
uses: "actions/upload-artifact@v3.0.0" # uses: "actions/upload-artifact@v3.0.0"
with: # with:
name: coverage-data # name: coverage-data
path: ".coverage.*" # path: ".coverage.*"
#
- name: Upload documentation # - name: Upload documentation
if: matrix.session == 'docs-build' # if: matrix.session == 'docs-build'
uses: actions/upload-artifact@v3.0.0 # uses: actions/upload-artifact@v3.0.0
with: # with:
name: docs # name: docs
path: docs/_build # path: docs/_build
#
- name: Upload logs # - name: Upload logs
if: failure() && matrix.session == 'tests' # if: failure() && matrix.session == 'tests'
uses: "actions/upload-artifact@v3.0.0" # uses: "actions/upload-artifact@v3.0.0"
with: # with:
name: logs-${{matrix.python}}-${{matrix.os}}-${{matrix.database}} # name: logs-${{matrix.python}}-${{matrix.os}}-${{matrix.database}}
path: "./log/*.log" # path: "./log/*.log"
#
run_pre_commit_checks: # run_pre_commit_checks:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
defaults: # defaults:
run: # run:
working-directory: . # working-directory: .
steps: # steps:
- name: Check out the repository # - name: Check out the repository
uses: actions/checkout@v3.0.2 # uses: actions/checkout@v3.0.2
with: # with:
# Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud # # Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud
fetch-depth: 0 # fetch-depth: 0
- name: Set up Python # - name: Set up Python
uses: actions/setup-python@v4.2.0 # uses: actions/setup-python@v4.2.0
with: # with:
python-version: "3.11" # python-version: "3.11"
- name: Install Poetry # - name: Install Poetry
run: | # run: |
pipx install poetry # pipx install poetry
poetry --version # poetry --version
- name: Poetry Install # - name: Poetry Install
run: poetry install # run: poetry install
- name: run_pre_commit # - name: run_pre_commit
run: ./bin/run_pre_commit_in_ci # run: ./bin/run_pre_commit_in_ci
#
check_docker_start_script: # check_docker_start_script:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
steps: # steps:
- name: Check out the repository # - name: Check out the repository
uses: actions/checkout@v3.0.2 # uses: actions/checkout@v3.0.2
with: # with:
# Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud # # Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud
fetch-depth: 0 # fetch-depth: 0
- name: start_backend # - name: start_backend
run: ./bin/build_and_run_with_docker_compose # run: ./bin/build_and_run_with_docker_compose
timeout-minutes: 20 # timeout-minutes: 20
env: # env:
SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA: "true" # SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA: "true"
- name: wait_for_backend # - name: wait_for_backend
run: ./bin/wait_for_server_to_be_up 5 # run: ./bin/wait_for_server_to_be_up 5
#
coverage: # coverage:
runs-on: ubuntu-latest # runs-on: ubuntu-latest
needs: tests # needs: tests
steps: # steps:
- name: Check out the repository # - name: Check out the repository
uses: actions/checkout@v3.0.2 # uses: actions/checkout@v3.0.2
with: # with:
# Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud # # Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud
fetch-depth: 0 # fetch-depth: 0
#
- name: Set up Python # - name: Set up Python
uses: actions/setup-python@v4.2.0 # uses: actions/setup-python@v4.2.0
with: # with:
python-version: "3.11" # python-version: "3.11"
#
- name: Upgrade pip # - name: Upgrade pip
run: | # run: |
pip install --constraint=.github/workflows/constraints.txt pip # pip install --constraint=.github/workflows/constraints.txt pip
pip --version # pip --version
#
- name: Install Poetry # - name: Install Poetry
run: | # run: |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry # pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry
poetry --version # poetry --version
#
- name: Install Nox # - name: Install Nox
run: | # run: |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox # pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox
pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry # pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry
nox --version # nox --version
#
- name: Download coverage data # - name: Download coverage data
uses: actions/download-artifact@v3.0.1 # uses: actions/download-artifact@v3.0.1
with: # with:
name: coverage-data # name: coverage-data
#
- name: Combine coverage data and display human readable report # - name: Combine coverage data and display human readable report
run: | # run: |
find . -name \*.pyc -delete # find . -name \*.pyc -delete
nox --force-color --session=coverage # nox --force-color --session=coverage
#
- name: Create coverage report # - name: Create coverage report
run: | # run: |
nox --force-color --session=coverage -- xml # nox --force-color --session=coverage -- xml
#
- name: Upload coverage report # - name: Upload coverage report
uses: codecov/codecov-action@v3.1.0 # uses: codecov/codecov-action@v3.1.0
#
- name: SonarCloud Scan # - name: SonarCloud Scan
uses: sonarsource/sonarcloud-github-action@master # uses: sonarsource/sonarcloud-github-action@master
# thought about just skipping dependabot # # thought about just skipping dependabot
# if: ${{ github.actor != 'dependabot[bot]' }} # # if: ${{ github.actor != 'dependabot[bot]' }}
# but figured all pull requests seems better, since none of them will have access to sonarcloud. # # 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 # # 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' }} # # if: ${{ github.event_name != 'pull_request' }}
# so just skip everything but main # # so just skip everything but main
if: github.ref_name == 'main' # if: github.ref_name == 'main'
env: # env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# part about saving PR number and then using it from auto-merge-dependabot-prs from: # # 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 # # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run
- name: Save PR number # - name: Save PR number
if: ${{ github.event_name == 'pull_request' }} # if: ${{ github.event_name == 'pull_request' }}
env: # env:
PR_NUMBER: ${{ github.event.number }} # PR_NUMBER: ${{ github.event.number }}
run: | # run: |
mkdir -p ./pr # mkdir -p ./pr
echo "$PR_NUMBER" > ./pr/pr_number # echo "$PR_NUMBER" > ./pr/pr_number
- uses: actions/upload-artifact@v3 # - uses: actions/upload-artifact@v3
with: # with:
name: pr_number # name: pr_number
path: pr/ # path: pr/
build-and-push-image: build-and-push-image:
if: github.ref_name == 'main' && ${{ github.event_name == 'push' }} if: github.ref_name == 'main' && ${{ github.event_name == 'push' }}
@ -284,6 +284,11 @@ jobs:
packages: write packages: write
steps: 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: Get current date - name: Get current date
id: date id: date
run: echo "::set-output name=date::$(date +%s)" run: echo "::set-output name=date::$(date +%s)"