From 0839214fa5bd360e35a49170f14f3d3b03fb455a Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 16 Feb 2023 15:05:55 -0500 Subject: [PATCH 1/7] added test for quickstart guide w/ burnettk --- .github/workflows/backend_tests.yml | 706 +++++++++--------- .github/workflows/frontend_tests.yml | 234 +++--- bin/run_arena_with_docker_compose | 14 + .../bin/wait_for_server_to_be_up | 8 +- .../keycloak/bin/wait_for_keycloak | 8 +- .../bin/wait_for_frontend_to_be_up | 10 +- 6 files changed, 508 insertions(+), 472 deletions(-) create mode 100755 bin/run_arena_with_docker_compose diff --git a/.github/workflows/backend_tests.yml b/.github/workflows/backend_tests.yml index cc11adb63..67880efb1 100644 --- a/.github/workflows/backend_tests.yml +++ b/.github/workflows/backend_tests.yml @@ -1,353 +1,353 @@ -name: Backend Tests - -on: - - push - - pull_request - -defaults: - run: - working-directory: spiffworkflow-backend - -jobs: - tests: - name: ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }} ${{ matrix.database }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - include: - # FIXME: https://github.com/mysql/mysql-connector-python/pull/86 - # put back when poetry update protobuf mysql-connector-python updates protobuf - # right now mysql is forcing protobuf to version 3 - # - { 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" } - - { - python: "3.11", - os: "ubuntu-latest", - session: "tests", - database: "mysql", - } - - { - 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", - } - - { - # typeguard 2.13.3 is broken with TypeDict in 3.11. - # probably the next release fixes it. - # https://github.com/agronholm/typeguard/issues/242 - python: "3.11", - os: "ubuntu-latest", - session: "typeguard", - database: "sqlite", - } - - { python: "3.11", os: "ubuntu-latest", session: "xdoctest" } - - { python: "3.11", os: "ubuntu-latest", session: "docs-build" } - - env: - FLASK_SESSION_SECRET_KEY: super_secret_key - FORCE_COLOR: "1" - NOXSESSION: ${{ matrix.session }} - PRE_COMMIT_COLOR: "always" - SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD: password - SPIFFWORKFLOW_BACKEND_DATABASE_TYPE: ${{ matrix.database }} - - steps: - - name: Check out the repository - uses: actions/checkout@v3.0.2 - - - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@v4.2.0 - 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 - # uses: actions/cache@v3.0.11 - # 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 }}- - - name: Setup Mysql - uses: mirromutth/mysql-action@v1.1 - with: - host port: 3306 - container port: 3306 - mysql version: "8.0" - mysql database: "spiffworkflow_backend_unit_testing" - mysql root password: password - if: matrix.database == 'mysql' - - - 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_unit_testing -d postgres - if: matrix.database == 'postgres' - - - 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 - if: always() && matrix.session == 'tests' && matrix.python == '3.11' && matrix.os == 'ubuntu-latest' && matrix.database == 'mysql' - uses: "actions/upload-artifact@v3.0.0" - # this action doesn't seem to respect working-directory so include working-directory value in path - with: - name: coverage-data - path: "spiffworkflow-backend/.coverage.*" - - - name: Upload documentation - if: matrix.session == 'docs-build' - uses: actions/upload-artifact@v3.0.0 - with: - name: docs - path: docs/_build - - - name: Upload logs - if: failure() && matrix.session == 'tests' - uses: "actions/upload-artifact@v3.0.0" - with: - name: logs-${{matrix.python}}-${{matrix.os}}-${{matrix.database}} - path: "./log/*.log" - - run_pre_commit_checks: - runs-on: ubuntu-latest - defaults: - run: - working-directory: . - 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 - uses: actions/setup-python@v4.2.0 - with: - python-version: "3.11" - - name: Install Poetry - run: | - pipx install poetry - poetry --version - - name: Poetry Install - run: poetry install - - name: run_pre_commit - run: ./bin/run_pre_commit_in_ci - - 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: Checkout Samples - uses: actions/checkout@v3 - with: - repository: sartography/sample-process-models - path: sample-process-models - - name: start_backend - run: ./bin/build_and_run_with_docker_compose - timeout-minutes: 20 - env: - SPIFFWORKFLOW_BACKEND_RUN_DATA_SETUP: "false" - - name: wait_for_backend - run: ./bin/wait_for_server_to_be_up 5 - - coverage: - runs-on: ubuntu-latest - needs: [tests, run_pre_commit_checks, check_docker_start_script] - 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 - uses: actions/setup-python@v4.2.0 - with: - python-version: "3.11" - - - 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 - uses: actions/download-artifact@v3.0.1 - with: - name: coverage-data - # this action doesn't seem to respect working-directory so include working-directory value in path - path: spiffworkflow-backend - - - 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 - # thought about just skipping dependabot - # if: ${{ github.actor != 'dependabot[bot]' }} - # 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' - with: - projectBaseDir: spiffworkflow-frontend - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - # 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/ - - build-and-push-image: - needs: coverage - if: ${{ github.ref_name == 'main' && github.event_name == 'push' }} - env: - REGISTRY: ghcr.io - IMAGE_NAME: sartography/spiffworkflow-backend - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - 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 - id: date - run: echo "date=$(date +%s)" >> $GITHUB_OUTPUT - - name: Log in to the Container registry - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - - name: Build and push Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - env: - # if we ever support more than main we will need to format the ref name - # like sub '/' with '-' - TAG: ${{ github.ref_name }}-${{ steps.date.outputs.date }} - with: - # this action doesn't seem to respect working-directory so set context - context: spiffworkflow-backend - push: true - tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG }} - labels: ${{ steps.meta.outputs.labels }} +# name: Backend Tests +# +# on: +# - push +# - pull_request +# +# defaults: +# run: +# working-directory: spiffworkflow-backend +# +# jobs: +# tests: +# name: ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }} ${{ matrix.database }} +# runs-on: ${{ matrix.os }} +# strategy: +# fail-fast: false +# matrix: +# include: +# # FIXME: https://github.com/mysql/mysql-connector-python/pull/86 +# # put back when poetry update protobuf mysql-connector-python updates protobuf +# # right now mysql is forcing protobuf to version 3 +# # - { 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" } +# - { +# python: "3.11", +# os: "ubuntu-latest", +# session: "tests", +# database: "mysql", +# } +# - { +# 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", +# } +# - { +# # typeguard 2.13.3 is broken with TypeDict in 3.11. +# # probably the next release fixes it. +# # https://github.com/agronholm/typeguard/issues/242 +# python: "3.11", +# os: "ubuntu-latest", +# session: "typeguard", +# database: "sqlite", +# } +# - { python: "3.11", os: "ubuntu-latest", session: "xdoctest" } +# - { python: "3.11", os: "ubuntu-latest", session: "docs-build" } +# +# env: +# FLASK_SESSION_SECRET_KEY: super_secret_key +# FORCE_COLOR: "1" +# NOXSESSION: ${{ matrix.session }} +# PRE_COMMIT_COLOR: "always" +# SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD: password +# SPIFFWORKFLOW_BACKEND_DATABASE_TYPE: ${{ matrix.database }} +# +# steps: +# - name: Check out the repository +# uses: actions/checkout@v3.0.2 +# +# - name: Set up Python ${{ matrix.python }} +# uses: actions/setup-python@v4.2.0 +# 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 +# # uses: actions/cache@v3.0.11 +# # 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 }}- +# - name: Setup Mysql +# uses: mirromutth/mysql-action@v1.1 +# with: +# host port: 3306 +# container port: 3306 +# mysql version: "8.0" +# mysql database: "spiffworkflow_backend_unit_testing" +# mysql root password: password +# if: matrix.database == 'mysql' +# +# - 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_unit_testing -d postgres +# if: matrix.database == 'postgres' +# +# - 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 +# if: always() && matrix.session == 'tests' && matrix.python == '3.11' && matrix.os == 'ubuntu-latest' && matrix.database == 'mysql' +# uses: "actions/upload-artifact@v3.0.0" +# # this action doesn't seem to respect working-directory so include working-directory value in path +# with: +# name: coverage-data +# path: "spiffworkflow-backend/.coverage.*" +# +# - name: Upload documentation +# if: matrix.session == 'docs-build' +# uses: actions/upload-artifact@v3.0.0 +# with: +# name: docs +# path: docs/_build +# +# - name: Upload logs +# if: failure() && matrix.session == 'tests' +# uses: "actions/upload-artifact@v3.0.0" +# with: +# name: logs-${{matrix.python}}-${{matrix.os}}-${{matrix.database}} +# path: "./log/*.log" +# +# run_pre_commit_checks: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: . +# 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 +# uses: actions/setup-python@v4.2.0 +# with: +# python-version: "3.11" +# - name: Install Poetry +# run: | +# pipx install poetry +# poetry --version +# - name: Poetry Install +# run: poetry install +# - name: run_pre_commit +# run: ./bin/run_pre_commit_in_ci +# +# 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: Checkout Samples +# uses: actions/checkout@v3 +# with: +# repository: sartography/sample-process-models +# path: sample-process-models +# - name: start_backend +# run: ./bin/build_and_run_with_docker_compose +# timeout-minutes: 20 +# env: +# SPIFFWORKFLOW_BACKEND_RUN_DATA_SETUP: "false" +# - name: wait_for_backend +# run: ./bin/wait_for_server_to_be_up 5 +# +# coverage: +# runs-on: ubuntu-latest +# needs: [tests, run_pre_commit_checks, check_docker_start_script] +# 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 +# uses: actions/setup-python@v4.2.0 +# with: +# python-version: "3.11" +# +# - 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 +# uses: actions/download-artifact@v3.0.1 +# with: +# name: coverage-data +# # this action doesn't seem to respect working-directory so include working-directory value in path +# path: spiffworkflow-backend +# +# - 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 +# # thought about just skipping dependabot +# # if: ${{ github.actor != 'dependabot[bot]' }} +# # 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' +# with: +# projectBaseDir: spiffworkflow-frontend +# env: +# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} +# # 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/ +# +# build-and-push-image: +# needs: coverage +# if: ${{ github.ref_name == 'main' && github.event_name == 'push' }} +# env: +# REGISTRY: ghcr.io +# IMAGE_NAME: sartography/spiffworkflow-backend +# runs-on: ubuntu-latest +# permissions: +# contents: read +# packages: write +# +# 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 +# id: date +# run: echo "date=$(date +%s)" >> $GITHUB_OUTPUT +# - name: Log in to the Container registry +# uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 +# with: +# registry: ${{ env.REGISTRY }} +# username: ${{ github.actor }} +# password: ${{ secrets.GITHUB_TOKEN }} +# +# - name: Extract metadata (tags, labels) for Docker +# id: meta +# uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 +# with: +# images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} +# +# - name: Build and push Docker image +# uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc +# env: +# # if we ever support more than main we will need to format the ref name +# # like sub '/' with '-' +# TAG: ${{ github.ref_name }}-${{ steps.date.outputs.date }} +# with: +# # this action doesn't seem to respect working-directory so set context +# context: spiffworkflow-backend +# push: true +# tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG }} +# labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml index 31155b40d..065e9c2b6 100644 --- a/.github/workflows/frontend_tests.yml +++ b/.github/workflows/frontend_tests.yml @@ -4,126 +4,154 @@ on: - push - pull_request -defaults: - run: - working-directory: spiffworkflow-frontend +# defaults: +# run: +# working-directory: spiffworkflow-frontend # https://docs.github.com/en/actions/using-workflows/reusing-workflows jobs: - tests: - runs-on: ubuntu-latest - steps: - - name: Development Code - uses: actions/checkout@v3 - with: - # Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud - fetch-depth: 0 - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - run: npm install - - run: npm run lint - - run: npm test - - run: npm run build --if-present - - name: SonarCloud Scan - # thought about just skipping dependabot - # if: ${{ github.actor != 'dependabot[bot]' }} - # 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' - uses: sonarsource/sonarcloud-github-action@master - with: - projectBaseDir: spiffworkflow-frontend - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - # 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/ - - cypress-run: - runs-on: ubuntu-20.04 + quickstart-guide-test: + runs-on: ubuntu:latest steps: - name: Checkout uses: actions/checkout@v3 - - name: Checkout Samples - uses: actions/checkout@v3 - with: - repository: sartography/sample-process-models - path: sample-process-models - - name: start_keycloak - working-directory: ./spiffworkflow-backend - run: ./keycloak/bin/start_keycloak - - name: start_backend - working-directory: ./spiffworkflow-backend - run: ./bin/build_and_run_with_docker_compose - timeout-minutes: 20 - env: - SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA: "true" - SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME: "acceptance_tests.yml" - - name: start_frontend - # working-directory: ./spiffworkflow-frontend - run: ./bin/build_and_run_with_docker_compose + - name: Setup Apps + run: ./bin/run_arena_with_docker_compose - name: wait_for_backend working-directory: ./spiffworkflow-backend - run: ./bin/wait_for_server_to_be_up 5 + run: ./bin/wait_for_server_to_be_up 5 8000 - name: wait_for_frontend - # working-directory: ./spiffworkflow-frontend - run: ./bin/wait_for_frontend_to_be_up 5 + working-directory: ./spiffworkflow-frontend + run: ./bin/wait_for_frontend_to_be_up 5 8001 - name: wait_for_keycloak working-directory: ./spiffworkflow-backend - run: ./keycloak/bin/wait_for_keycloak 5 + run: ./keycloak/bin/wait_for_keycloak 5 8002 - name: Cypress run uses: cypress-io/github-action@v4 with: working-directory: ./spiffworkflow-frontend browser: chrome - # only record on push, not pull_request, since we do not have secrets for PRs, - # so the required CYPRESS_RECORD_KEY will not be available. - # we have limited runs in cypress cloud, so only record main builds - record: ${{ github.ref_name == 'main' && github.event_name == 'push' }} - env: - # pass the Dashboard record key as an environment variable - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} # pass GitHub token to allow accurately detecting a build vs a re-run build GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "true" - - name: get_backend_logs_from_docker_compose - if: failure() - working-directory: ./spiffworkflow-backend - run: ./bin/get_logs_from_docker_compose >./log/docker_compose.log - - name: Upload logs - if: failure() - uses: "actions/upload-artifact@v3.0.0" - with: - name: spiffworkflow-backend-logs - path: "./spiffworkflow-backend/log/*.log" + CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "false" + CYPRESS_SPIFFWORKFLOW_FRONTEND_USERNAME: "admin" + CYPRESS_SPIFFWORKFLOW_FRONTEND_PASSWORD: "admin" + SPIFFWORKFLOW_FRONTEND_PORT: 8001 - # https://github.com/cypress-io/github-action#artifacts - - name: upload_screenshots - uses: actions/upload-artifact@v2 - if: failure() - with: - name: cypress-screenshots - path: ./spiffworkflow-frontend/cypress/screenshots - # Test run video was always captured, so this action uses "always()" condition - - name: upload_videos - uses: actions/upload-artifact@v2 - if: failure() - with: - name: cypress-videos - path: ./spiffworkflow-frontend/cypress/videos + # tests: + # runs-on: ubuntu-latest + # steps: + # - name: Development Code + # uses: actions/checkout@v3 + # with: + # # Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud + # fetch-depth: 0 + # - name: Setup Node + # uses: actions/setup-node@v3 + # with: + # node-version: 18.x + # - run: npm install + # - run: npm run lint + # - run: npm test + # - run: npm run build --if-present + # - name: SonarCloud Scan + # # thought about just skipping dependabot + # # if: ${{ github.actor != 'dependabot[bot]' }} + # # 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' + # uses: sonarsource/sonarcloud-github-action@master + # with: + # projectBaseDir: spiffworkflow-frontend + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + # # 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/ + # + # cypress-run: + # runs-on: ubuntu-20.04 + # steps: + # - name: Checkout + # uses: actions/checkout@v3 + # - name: Checkout Samples + # uses: actions/checkout@v3 + # with: + # repository: sartography/sample-process-models + # path: sample-process-models + # - name: start_keycloak + # working-directory: ./spiffworkflow-backend + # run: ./keycloak/bin/start_keycloak + # - name: start_backend + # working-directory: ./spiffworkflow-backend + # run: ./bin/build_and_run_with_docker_compose + # timeout-minutes: 20 + # env: + # SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA: "true" + # SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME: "acceptance_tests.yml" + # - name: start_frontend + # # working-directory: ./spiffworkflow-frontend + # run: ./bin/build_and_run_with_docker_compose + # - name: wait_for_backend + # working-directory: ./spiffworkflow-backend + # run: ./bin/wait_for_server_to_be_up 5 + # - name: wait_for_frontend + # # working-directory: ./spiffworkflow-frontend + # run: ./bin/wait_for_frontend_to_be_up 5 + # - name: wait_for_keycloak + # working-directory: ./spiffworkflow-backend + # run: ./keycloak/bin/wait_for_keycloak 5 + # - name: Cypress run + # uses: cypress-io/github-action@v4 + # with: + # working-directory: ./spiffworkflow-frontend + # browser: chrome + # # only record on push, not pull_request, since we do not have secrets for PRs, + # # so the required CYPRESS_RECORD_KEY will not be available. + # # we have limited runs in cypress cloud, so only record main builds + # record: ${{ github.ref_name == 'main' && github.event_name == 'push' }} + # env: + # # pass the Dashboard record key as an environment variable + # CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + # # pass GitHub token to allow accurately detecting a build vs a re-run build + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "true" + # - name: get_backend_logs_from_docker_compose + # if: failure() + # working-directory: ./spiffworkflow-backend + # run: ./bin/get_logs_from_docker_compose >./log/docker_compose.log + # - name: Upload logs + # if: failure() + # uses: "actions/upload-artifact@v3.0.0" + # with: + # name: spiffworkflow-backend-logs + # path: "./spiffworkflow-backend/log/*.log" + # + # # https://github.com/cypress-io/github-action#artifacts + # - name: upload_screenshots + # uses: actions/upload-artifact@v2 + # if: failure() + # with: + # name: cypress-screenshots + # path: ./spiffworkflow-frontend/cypress/screenshots + # # Test run video was always captured, so this action uses "always()" condition + # - name: upload_videos + # uses: actions/upload-artifact@v2 + # if: failure() + # with: + # name: cypress-videos + # path: ./spiffworkflow-frontend/cypress/videos diff --git a/bin/run_arena_with_docker_compose b/bin/run_arena_with_docker_compose new file mode 100755 index 000000000..8a479a3ac --- /dev/null +++ b/bin/run_arena_with_docker_compose @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +function error_handler() { + >&2 echo "Exited with BAD EXIT CODE '${2}' in ${0} script at line: ${1}." + exit "$2" +} +trap 'error_handler ${LINENO} $?' ERR +set -o errtrace -o errexit -o nounset -o pipefail + +mkdir -p spiffworkflow +cd spiffworkflow +wget https://raw.githubusercontent.com/sartography/spiff-arena/main/docker-compose.yml +docker compose pull +docker compose up -d diff --git a/spiffworkflow-backend/bin/wait_for_server_to_be_up b/spiffworkflow-backend/bin/wait_for_server_to_be_up index 4c845613f..a737aaf23 100755 --- a/spiffworkflow-backend/bin/wait_for_server_to_be_up +++ b/spiffworkflow-backend/bin/wait_for_server_to_be_up @@ -7,14 +7,12 @@ function error_handler() { trap 'error_handler ${LINENO} $?' ERR set -o errtrace -o errexit -o nounset -o pipefail -max_attempts="${1:-}" -if [[ -z "$max_attempts" ]]; then - max_attempts=100 -fi +max_attempts="${1:-100}" +port="${2:-7000}" echo "waiting for backend to come up..." attempts=0 -while [[ "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:7000/v1.0/status)" != "200" ]]; do +while [[ "$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:${port}/v1.0/status")" != "200" ]]; do if [[ "$attempts" -gt "$max_attempts" ]]; then >&2 echo "ERROR: Server not up after $max_attempts attempts. There is probably a problem" exit 1 diff --git a/spiffworkflow-backend/keycloak/bin/wait_for_keycloak b/spiffworkflow-backend/keycloak/bin/wait_for_keycloak index d70184650..6164a8f60 100755 --- a/spiffworkflow-backend/keycloak/bin/wait_for_keycloak +++ b/spiffworkflow-backend/keycloak/bin/wait_for_keycloak @@ -7,14 +7,12 @@ function error_handler() { trap 'error_handler ${LINENO} $?' ERR set -o errtrace -o errexit -o nounset -o pipefail -max_attempts="${1:-}" -if [[ -z "$max_attempts" ]]; then - max_attempts=100 -fi +max_attempts="${1:-100}" +port="${2:-7002}" echo "waiting for backend to come up..." attempts=0 -while [[ "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:7002/realms/master/.well-known/openid-configuration)" != "200" ]]; do +while [[ "$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:${port}/realms/master/.well-known/openid-configuration")" != "200" ]]; do if [[ "$attempts" -gt "$max_attempts" ]]; then >&2 echo "ERROR: Server not up after $max_attempts attempts. There is probably a problem" exit 1 diff --git a/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up b/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up index 951811031..9a49bd440 100755 --- a/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up +++ b/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up @@ -7,14 +7,12 @@ function error_handler() { trap 'error_handler ${LINENO} $?' ERR set -o errtrace -o errexit -o nounset -o pipefail -max_attempts="${1:-}" -if [[ -z "$max_attempts" ]]; then - max_attempts=100 -fi +max_attempts="${1:-100}" +port="${2:-7001}" -echo "waiting for backend to come up..." +echo "waiting for frontend to come up..." attempts=0 -while [[ "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:7001)" != "200" ]]; do +while [[ "$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:${port}")" != "200" ]]; do if [[ "$attempts" -gt "$max_attempts" ]]; then >&2 echo "ERROR: Server not up after $max_attempts attempts. There is probably a problem" exit 1 From 4e46ff077889a92a3e8bf095ba2426b62ebb5312 Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 16 Feb 2023 15:07:29 -0500 Subject: [PATCH 2/7] fixed runs-on label w/ burnettk --- .github/workflows/frontend_tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml index 065e9c2b6..9f3e36a66 100644 --- a/.github/workflows/frontend_tests.yml +++ b/.github/workflows/frontend_tests.yml @@ -12,7 +12,7 @@ on: jobs: quickstart-guide-test: - runs-on: ubuntu:latest + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 @@ -84,7 +84,7 @@ jobs: # path: pr/ # # cypress-run: - # runs-on: ubuntu-20.04 + # runs-on: ubuntu-latest # steps: # - name: Checkout # uses: actions/checkout@v3 From b7478316f833c78f30f7c465987ded67ea93aa5a Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 16 Feb 2023 15:09:54 -0500 Subject: [PATCH 3/7] we are not using keycloak here w/ burnettk --- .github/workflows/frontend_tests.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml index 9f3e36a66..79515c05b 100644 --- a/.github/workflows/frontend_tests.yml +++ b/.github/workflows/frontend_tests.yml @@ -24,9 +24,6 @@ jobs: - name: wait_for_frontend working-directory: ./spiffworkflow-frontend run: ./bin/wait_for_frontend_to_be_up 5 8001 - - name: wait_for_keycloak - working-directory: ./spiffworkflow-backend - run: ./keycloak/bin/wait_for_keycloak 5 8002 - name: Cypress run uses: cypress-io/github-action@v4 with: From b22c33e1d68d24829829b77c4215e51bc8b8f18a Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 16 Feb 2023 15:19:01 -0500 Subject: [PATCH 4/7] put the env vars in the env section of the github action configs w/ burnettk --- .github/workflows/frontend_tests.yml | 1 + spiffworkflow-backend/bin/wait_for_server_to_be_up | 1 + spiffworkflow-backend/keycloak/bin/wait_for_keycloak | 3 ++- spiffworkflow-frontend/bin/wait_for_frontend_to_be_up | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml index 79515c05b..e6f7d8918 100644 --- a/.github/workflows/frontend_tests.yml +++ b/.github/workflows/frontend_tests.yml @@ -29,6 +29,7 @@ jobs: with: working-directory: ./spiffworkflow-frontend browser: chrome + env: # pass GitHub token to allow accurately detecting a build vs a re-run build GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "false" diff --git a/spiffworkflow-backend/bin/wait_for_server_to_be_up b/spiffworkflow-backend/bin/wait_for_server_to_be_up index a737aaf23..04cff3aa5 100755 --- a/spiffworkflow-backend/bin/wait_for_server_to_be_up +++ b/spiffworkflow-backend/bin/wait_for_server_to_be_up @@ -20,3 +20,4 @@ while [[ "$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:${port}/v1. attempts=$(( attempts + 1 )) sleep 1 done +echo "backend up" diff --git a/spiffworkflow-backend/keycloak/bin/wait_for_keycloak b/spiffworkflow-backend/keycloak/bin/wait_for_keycloak index 6164a8f60..1002fb676 100755 --- a/spiffworkflow-backend/keycloak/bin/wait_for_keycloak +++ b/spiffworkflow-backend/keycloak/bin/wait_for_keycloak @@ -10,7 +10,7 @@ set -o errtrace -o errexit -o nounset -o pipefail max_attempts="${1:-100}" port="${2:-7002}" -echo "waiting for backend to come up..." +echo "waiting for keycloak to come up..." attempts=0 while [[ "$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:${port}/realms/master/.well-known/openid-configuration")" != "200" ]]; do if [[ "$attempts" -gt "$max_attempts" ]]; then @@ -20,3 +20,4 @@ while [[ "$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:${port}/rea attempts=$(( attempts + 1 )) sleep 1 done +echo "keycloak up" diff --git a/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up b/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up index 9a49bd440..6f16d9af4 100755 --- a/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up +++ b/spiffworkflow-frontend/bin/wait_for_frontend_to_be_up @@ -20,3 +20,4 @@ while [[ "$(curl -s -o /dev/null -w '%{http_code}' "http://localhost:${port}")" attempts=$(( attempts + 1 )) sleep 1 done +echo "frontend up" From 285c5dec031d90c1353ef699987da43a340dcec4 Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 16 Feb 2023 15:21:22 -0500 Subject: [PATCH 5/7] run only one cypress test and try v5 w/ burnettk --- .github/workflows/frontend_tests.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml index e6f7d8918..673efa969 100644 --- a/.github/workflows/frontend_tests.yml +++ b/.github/workflows/frontend_tests.yml @@ -25,10 +25,13 @@ jobs: working-directory: ./spiffworkflow-frontend run: ./bin/wait_for_frontend_to_be_up 5 8001 - name: Cypress run - uses: cypress-io/github-action@v4 + uses: cypress-io/github-action@v5 + # - name: Cypress run + # uses: cypress-io/github-action@v4 with: working-directory: ./spiffworkflow-frontend browser: chrome + spec: cypress/e2e/process_groups.cy.js env: # pass GitHub token to allow accurately detecting a build vs a re-run build GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 67cf758052276d123f639da19ea2fdec1edd21a2 Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 16 Feb 2023 15:28:42 -0500 Subject: [PATCH 6/7] added needs placeholder for quickstart test w/ burnettk --- .github/workflows/frontend_tests.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml index 673efa969..b3ba94053 100644 --- a/.github/workflows/frontend_tests.yml +++ b/.github/workflows/frontend_tests.yml @@ -13,6 +13,7 @@ on: jobs: quickstart-guide-test: runs-on: ubuntu-latest + # needs: [create_frontend_docker_container, create_backend_docker_container, create_demo-proxy] steps: - name: Checkout uses: actions/checkout@v3 @@ -26,8 +27,6 @@ jobs: run: ./bin/wait_for_frontend_to_be_up 5 8001 - name: Cypress run uses: cypress-io/github-action@v5 - # - name: Cypress run - # uses: cypress-io/github-action@v4 with: working-directory: ./spiffworkflow-frontend browser: chrome @@ -117,7 +116,7 @@ jobs: # working-directory: ./spiffworkflow-backend # run: ./keycloak/bin/wait_for_keycloak 5 # - name: Cypress run - # uses: cypress-io/github-action@v4 + # uses: cypress-io/github-action@v5 # with: # working-directory: ./spiffworkflow-frontend # browser: chrome From b9220716a9167c4d5a36484d54e65581b0a97a63 Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 16 Feb 2023 15:40:30 -0500 Subject: [PATCH 7/7] put ci files back and move quickstart tests to releases action w/ burnettk --- .github/workflows/backend_tests.yml | 706 +++++++++++++-------------- .github/workflows/frontend_tests.yml | 234 ++++----- .github/workflows/release_builds.yml | 29 ++ 3 files changed, 485 insertions(+), 484 deletions(-) diff --git a/.github/workflows/backend_tests.yml b/.github/workflows/backend_tests.yml index 67880efb1..cc11adb63 100644 --- a/.github/workflows/backend_tests.yml +++ b/.github/workflows/backend_tests.yml @@ -1,353 +1,353 @@ -# name: Backend Tests -# -# on: -# - push -# - pull_request -# -# defaults: -# run: -# working-directory: spiffworkflow-backend -# -# jobs: -# tests: -# name: ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }} ${{ matrix.database }} -# runs-on: ${{ matrix.os }} -# strategy: -# fail-fast: false -# matrix: -# include: -# # FIXME: https://github.com/mysql/mysql-connector-python/pull/86 -# # put back when poetry update protobuf mysql-connector-python updates protobuf -# # right now mysql is forcing protobuf to version 3 -# # - { 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" } -# - { -# python: "3.11", -# os: "ubuntu-latest", -# session: "tests", -# database: "mysql", -# } -# - { -# 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", -# } -# - { -# # typeguard 2.13.3 is broken with TypeDict in 3.11. -# # probably the next release fixes it. -# # https://github.com/agronholm/typeguard/issues/242 -# python: "3.11", -# os: "ubuntu-latest", -# session: "typeguard", -# database: "sqlite", -# } -# - { python: "3.11", os: "ubuntu-latest", session: "xdoctest" } -# - { python: "3.11", os: "ubuntu-latest", session: "docs-build" } -# -# env: -# FLASK_SESSION_SECRET_KEY: super_secret_key -# FORCE_COLOR: "1" -# NOXSESSION: ${{ matrix.session }} -# PRE_COMMIT_COLOR: "always" -# SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD: password -# SPIFFWORKFLOW_BACKEND_DATABASE_TYPE: ${{ matrix.database }} -# -# steps: -# - name: Check out the repository -# uses: actions/checkout@v3.0.2 -# -# - name: Set up Python ${{ matrix.python }} -# uses: actions/setup-python@v4.2.0 -# 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 -# # uses: actions/cache@v3.0.11 -# # 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 }}- -# - name: Setup Mysql -# uses: mirromutth/mysql-action@v1.1 -# with: -# host port: 3306 -# container port: 3306 -# mysql version: "8.0" -# mysql database: "spiffworkflow_backend_unit_testing" -# mysql root password: password -# if: matrix.database == 'mysql' -# -# - 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_unit_testing -d postgres -# if: matrix.database == 'postgres' -# -# - 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 -# if: always() && matrix.session == 'tests' && matrix.python == '3.11' && matrix.os == 'ubuntu-latest' && matrix.database == 'mysql' -# uses: "actions/upload-artifact@v3.0.0" -# # this action doesn't seem to respect working-directory so include working-directory value in path -# with: -# name: coverage-data -# path: "spiffworkflow-backend/.coverage.*" -# -# - name: Upload documentation -# if: matrix.session == 'docs-build' -# uses: actions/upload-artifact@v3.0.0 -# with: -# name: docs -# path: docs/_build -# -# - name: Upload logs -# if: failure() && matrix.session == 'tests' -# uses: "actions/upload-artifact@v3.0.0" -# with: -# name: logs-${{matrix.python}}-${{matrix.os}}-${{matrix.database}} -# path: "./log/*.log" -# -# run_pre_commit_checks: -# runs-on: ubuntu-latest -# defaults: -# run: -# working-directory: . -# 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 -# uses: actions/setup-python@v4.2.0 -# with: -# python-version: "3.11" -# - name: Install Poetry -# run: | -# pipx install poetry -# poetry --version -# - name: Poetry Install -# run: poetry install -# - name: run_pre_commit -# run: ./bin/run_pre_commit_in_ci -# -# 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: Checkout Samples -# uses: actions/checkout@v3 -# with: -# repository: sartography/sample-process-models -# path: sample-process-models -# - name: start_backend -# run: ./bin/build_and_run_with_docker_compose -# timeout-minutes: 20 -# env: -# SPIFFWORKFLOW_BACKEND_RUN_DATA_SETUP: "false" -# - name: wait_for_backend -# run: ./bin/wait_for_server_to_be_up 5 -# -# coverage: -# runs-on: ubuntu-latest -# needs: [tests, run_pre_commit_checks, check_docker_start_script] -# 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 -# uses: actions/setup-python@v4.2.0 -# with: -# python-version: "3.11" -# -# - 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 -# uses: actions/download-artifact@v3.0.1 -# with: -# name: coverage-data -# # this action doesn't seem to respect working-directory so include working-directory value in path -# path: spiffworkflow-backend -# -# - 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 -# # thought about just skipping dependabot -# # if: ${{ github.actor != 'dependabot[bot]' }} -# # 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' -# with: -# projectBaseDir: spiffworkflow-frontend -# env: -# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} -# # 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/ -# -# build-and-push-image: -# needs: coverage -# if: ${{ github.ref_name == 'main' && github.event_name == 'push' }} -# env: -# REGISTRY: ghcr.io -# IMAGE_NAME: sartography/spiffworkflow-backend -# runs-on: ubuntu-latest -# permissions: -# contents: read -# packages: write -# -# 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 -# id: date -# run: echo "date=$(date +%s)" >> $GITHUB_OUTPUT -# - name: Log in to the Container registry -# uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 -# with: -# registry: ${{ env.REGISTRY }} -# username: ${{ github.actor }} -# password: ${{ secrets.GITHUB_TOKEN }} -# -# - name: Extract metadata (tags, labels) for Docker -# id: meta -# uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 -# with: -# images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} -# -# - name: Build and push Docker image -# uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc -# env: -# # if we ever support more than main we will need to format the ref name -# # like sub '/' with '-' -# TAG: ${{ github.ref_name }}-${{ steps.date.outputs.date }} -# with: -# # this action doesn't seem to respect working-directory so set context -# context: spiffworkflow-backend -# push: true -# tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG }} -# labels: ${{ steps.meta.outputs.labels }} +name: Backend Tests + +on: + - push + - pull_request + +defaults: + run: + working-directory: spiffworkflow-backend + +jobs: + tests: + name: ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }} ${{ matrix.database }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + # FIXME: https://github.com/mysql/mysql-connector-python/pull/86 + # put back when poetry update protobuf mysql-connector-python updates protobuf + # right now mysql is forcing protobuf to version 3 + # - { 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" } + - { + python: "3.11", + os: "ubuntu-latest", + session: "tests", + database: "mysql", + } + - { + 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", + } + - { + # typeguard 2.13.3 is broken with TypeDict in 3.11. + # probably the next release fixes it. + # https://github.com/agronholm/typeguard/issues/242 + python: "3.11", + os: "ubuntu-latest", + session: "typeguard", + database: "sqlite", + } + - { python: "3.11", os: "ubuntu-latest", session: "xdoctest" } + - { python: "3.11", os: "ubuntu-latest", session: "docs-build" } + + env: + FLASK_SESSION_SECRET_KEY: super_secret_key + FORCE_COLOR: "1" + NOXSESSION: ${{ matrix.session }} + PRE_COMMIT_COLOR: "always" + SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD: password + SPIFFWORKFLOW_BACKEND_DATABASE_TYPE: ${{ matrix.database }} + + steps: + - name: Check out the repository + uses: actions/checkout@v3.0.2 + + - name: Set up Python ${{ matrix.python }} + uses: actions/setup-python@v4.2.0 + 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 + # uses: actions/cache@v3.0.11 + # 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 }}- + - name: Setup Mysql + uses: mirromutth/mysql-action@v1.1 + with: + host port: 3306 + container port: 3306 + mysql version: "8.0" + mysql database: "spiffworkflow_backend_unit_testing" + mysql root password: password + if: matrix.database == 'mysql' + + - 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_unit_testing -d postgres + if: matrix.database == 'postgres' + + - 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 + if: always() && matrix.session == 'tests' && matrix.python == '3.11' && matrix.os == 'ubuntu-latest' && matrix.database == 'mysql' + uses: "actions/upload-artifact@v3.0.0" + # this action doesn't seem to respect working-directory so include working-directory value in path + with: + name: coverage-data + path: "spiffworkflow-backend/.coverage.*" + + - name: Upload documentation + if: matrix.session == 'docs-build' + uses: actions/upload-artifact@v3.0.0 + with: + name: docs + path: docs/_build + + - name: Upload logs + if: failure() && matrix.session == 'tests' + uses: "actions/upload-artifact@v3.0.0" + with: + name: logs-${{matrix.python}}-${{matrix.os}}-${{matrix.database}} + path: "./log/*.log" + + run_pre_commit_checks: + runs-on: ubuntu-latest + defaults: + run: + working-directory: . + 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 + uses: actions/setup-python@v4.2.0 + with: + python-version: "3.11" + - name: Install Poetry + run: | + pipx install poetry + poetry --version + - name: Poetry Install + run: poetry install + - name: run_pre_commit + run: ./bin/run_pre_commit_in_ci + + 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: Checkout Samples + uses: actions/checkout@v3 + with: + repository: sartography/sample-process-models + path: sample-process-models + - name: start_backend + run: ./bin/build_and_run_with_docker_compose + timeout-minutes: 20 + env: + SPIFFWORKFLOW_BACKEND_RUN_DATA_SETUP: "false" + - name: wait_for_backend + run: ./bin/wait_for_server_to_be_up 5 + + coverage: + runs-on: ubuntu-latest + needs: [tests, run_pre_commit_checks, check_docker_start_script] + 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 + uses: actions/setup-python@v4.2.0 + with: + python-version: "3.11" + + - 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 + uses: actions/download-artifact@v3.0.1 + with: + name: coverage-data + # this action doesn't seem to respect working-directory so include working-directory value in path + path: spiffworkflow-backend + + - 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 + # thought about just skipping dependabot + # if: ${{ github.actor != 'dependabot[bot]' }} + # 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' + with: + projectBaseDir: spiffworkflow-frontend + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + # 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/ + + build-and-push-image: + needs: coverage + if: ${{ github.ref_name == 'main' && github.event_name == 'push' }} + env: + REGISTRY: ghcr.io + IMAGE_NAME: sartography/spiffworkflow-backend + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + 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 + id: date + run: echo "date=$(date +%s)" >> $GITHUB_OUTPUT + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + env: + # if we ever support more than main we will need to format the ref name + # like sub '/' with '-' + TAG: ${{ github.ref_name }}-${{ steps.date.outputs.date }} + with: + # this action doesn't seem to respect working-directory so set context + context: spiffworkflow-backend + push: true + tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml index b3ba94053..405b359c2 100644 --- a/.github/workflows/frontend_tests.yml +++ b/.github/workflows/frontend_tests.yml @@ -4,154 +4,126 @@ on: - push - pull_request -# defaults: -# run: -# working-directory: spiffworkflow-frontend +defaults: + run: + working-directory: spiffworkflow-frontend # https://docs.github.com/en/actions/using-workflows/reusing-workflows jobs: - quickstart-guide-test: + tests: + runs-on: ubuntu-latest + steps: + - name: Development Code + uses: actions/checkout@v3 + with: + # Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18.x + - run: npm install + - run: npm run lint + - run: npm test + - run: npm run build --if-present + - name: SonarCloud Scan + # thought about just skipping dependabot + # if: ${{ github.actor != 'dependabot[bot]' }} + # 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' + uses: sonarsource/sonarcloud-github-action@master + with: + projectBaseDir: spiffworkflow-frontend + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + # 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/ + + cypress-run: runs-on: ubuntu-latest - # needs: [create_frontend_docker_container, create_backend_docker_container, create_demo-proxy] steps: - name: Checkout uses: actions/checkout@v3 - - name: Setup Apps - run: ./bin/run_arena_with_docker_compose + - name: Checkout Samples + uses: actions/checkout@v3 + with: + repository: sartography/sample-process-models + path: sample-process-models + - name: start_keycloak + working-directory: ./spiffworkflow-backend + run: ./keycloak/bin/start_keycloak + - name: start_backend + working-directory: ./spiffworkflow-backend + run: ./bin/build_and_run_with_docker_compose + timeout-minutes: 20 + env: + SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA: "true" + SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME: "acceptance_tests.yml" + - name: start_frontend + # working-directory: ./spiffworkflow-frontend + run: ./bin/build_and_run_with_docker_compose - name: wait_for_backend working-directory: ./spiffworkflow-backend - run: ./bin/wait_for_server_to_be_up 5 8000 + run: ./bin/wait_for_server_to_be_up 5 - name: wait_for_frontend - working-directory: ./spiffworkflow-frontend - run: ./bin/wait_for_frontend_to_be_up 5 8001 + # working-directory: ./spiffworkflow-frontend + run: ./bin/wait_for_frontend_to_be_up 5 + - name: wait_for_keycloak + working-directory: ./spiffworkflow-backend + run: ./keycloak/bin/wait_for_keycloak 5 - name: Cypress run uses: cypress-io/github-action@v5 with: working-directory: ./spiffworkflow-frontend browser: chrome - spec: cypress/e2e/process_groups.cy.js + # only record on push, not pull_request, since we do not have secrets for PRs, + # so the required CYPRESS_RECORD_KEY will not be available. + # we have limited runs in cypress cloud, so only record main builds + record: ${{ github.ref_name == 'main' && github.event_name == 'push' }} env: + # pass the Dashboard record key as an environment variable + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} # pass GitHub token to allow accurately detecting a build vs a re-run build GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "false" - CYPRESS_SPIFFWORKFLOW_FRONTEND_USERNAME: "admin" - CYPRESS_SPIFFWORKFLOW_FRONTEND_PASSWORD: "admin" - SPIFFWORKFLOW_FRONTEND_PORT: 8001 + CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "true" + - name: get_backend_logs_from_docker_compose + if: failure() + working-directory: ./spiffworkflow-backend + run: ./bin/get_logs_from_docker_compose >./log/docker_compose.log + - name: Upload logs + if: failure() + uses: "actions/upload-artifact@v3.0.0" + with: + name: spiffworkflow-backend-logs + path: "./spiffworkflow-backend/log/*.log" - # tests: - # runs-on: ubuntu-latest - # steps: - # - name: Development Code - # uses: actions/checkout@v3 - # with: - # # Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud - # fetch-depth: 0 - # - name: Setup Node - # uses: actions/setup-node@v3 - # with: - # node-version: 18.x - # - run: npm install - # - run: npm run lint - # - run: npm test - # - run: npm run build --if-present - # - name: SonarCloud Scan - # # thought about just skipping dependabot - # # if: ${{ github.actor != 'dependabot[bot]' }} - # # 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' - # uses: sonarsource/sonarcloud-github-action@master - # with: - # projectBaseDir: spiffworkflow-frontend - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - # # 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/ - # - # cypress-run: - # runs-on: ubuntu-latest - # steps: - # - name: Checkout - # uses: actions/checkout@v3 - # - name: Checkout Samples - # uses: actions/checkout@v3 - # with: - # repository: sartography/sample-process-models - # path: sample-process-models - # - name: start_keycloak - # working-directory: ./spiffworkflow-backend - # run: ./keycloak/bin/start_keycloak - # - name: start_backend - # working-directory: ./spiffworkflow-backend - # run: ./bin/build_and_run_with_docker_compose - # timeout-minutes: 20 - # env: - # SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA: "true" - # SPIFFWORKFLOW_BACKEND_PERMISSIONS_FILE_NAME: "acceptance_tests.yml" - # - name: start_frontend - # # working-directory: ./spiffworkflow-frontend - # run: ./bin/build_and_run_with_docker_compose - # - name: wait_for_backend - # working-directory: ./spiffworkflow-backend - # run: ./bin/wait_for_server_to_be_up 5 - # - name: wait_for_frontend - # # working-directory: ./spiffworkflow-frontend - # run: ./bin/wait_for_frontend_to_be_up 5 - # - name: wait_for_keycloak - # working-directory: ./spiffworkflow-backend - # run: ./keycloak/bin/wait_for_keycloak 5 - # - name: Cypress run - # uses: cypress-io/github-action@v5 - # with: - # working-directory: ./spiffworkflow-frontend - # browser: chrome - # # only record on push, not pull_request, since we do not have secrets for PRs, - # # so the required CYPRESS_RECORD_KEY will not be available. - # # we have limited runs in cypress cloud, so only record main builds - # record: ${{ github.ref_name == 'main' && github.event_name == 'push' }} - # env: - # # pass the Dashboard record key as an environment variable - # CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - # # pass GitHub token to allow accurately detecting a build vs a re-run build - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "true" - # - name: get_backend_logs_from_docker_compose - # if: failure() - # working-directory: ./spiffworkflow-backend - # run: ./bin/get_logs_from_docker_compose >./log/docker_compose.log - # - name: Upload logs - # if: failure() - # uses: "actions/upload-artifact@v3.0.0" - # with: - # name: spiffworkflow-backend-logs - # path: "./spiffworkflow-backend/log/*.log" - # - # # https://github.com/cypress-io/github-action#artifacts - # - name: upload_screenshots - # uses: actions/upload-artifact@v2 - # if: failure() - # with: - # name: cypress-screenshots - # path: ./spiffworkflow-frontend/cypress/screenshots - # # Test run video was always captured, so this action uses "always()" condition - # - name: upload_videos - # uses: actions/upload-artifact@v2 - # if: failure() - # with: - # name: cypress-videos - # path: ./spiffworkflow-frontend/cypress/videos + # https://github.com/cypress-io/github-action#artifacts + - name: upload_screenshots + uses: actions/upload-artifact@v2 + if: failure() + with: + name: cypress-screenshots + path: ./spiffworkflow-frontend/cypress/screenshots + # Test run video was always captured, so this action uses "always()" condition + - name: upload_videos + uses: actions/upload-artifact@v2 + if: failure() + with: + name: cypress-videos + path: ./spiffworkflow-frontend/cypress/videos diff --git a/.github/workflows/release_builds.yml b/.github/workflows/release_builds.yml index ef1c3b992..d2154ddb4 100644 --- a/.github/workflows/release_builds.yml +++ b/.github/workflows/release_builds.yml @@ -115,3 +115,32 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + quickstart-guide-test: + runs-on: ubuntu-latest + needs: [create_frontend_docker_container, create_backend_docker_container, create_demo-proxy] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Apps + run: ./bin/run_arena_with_docker_compose + - name: wait_for_backend + working-directory: ./spiffworkflow-backend + run: ./bin/wait_for_server_to_be_up 5 8000 + - name: wait_for_frontend + working-directory: ./spiffworkflow-frontend + run: ./bin/wait_for_frontend_to_be_up 5 8001 + - name: Cypress run + uses: cypress-io/github-action@v5 + with: + working-directory: ./spiffworkflow-frontend + browser: chrome + # just run one test to make sure we didn't completely break it + spec: cypress/e2e/process_groups.cy.js + env: + # pass GitHub token to allow accurately detecting a build vs a re-run build + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK: "false" + CYPRESS_SPIFFWORKFLOW_FRONTEND_USERNAME: "admin" + CYPRESS_SPIFFWORKFLOW_FRONTEND_PASSWORD: "admin" + SPIFFWORKFLOW_FRONTEND_PORT: 8001