Goth integration tests (nightly) #653
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Goth integration tests (nightly) | |
on: | |
workflow_dispatch: | |
inputs: | |
warning: | |
description: 'Choosing the branch is not supported yet.' | |
required: true | |
default: 'Predefined branches will be used' | |
schedule: | |
# run this workflow every day at 3:00 AM UTC | |
- cron: '0 3 * * *' | |
jobs: | |
prepare-matrix: | |
name: Prepare matrix JSON | |
runs-on: ubuntu-latest | |
outputs: | |
matrix-json: ${{ steps.get-matrix.outputs.matrix }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
# finds branches with names matching the release branch convention (e.g. release/v0.7) and returns one with highest version | |
- name: Get latest stable branch | |
id: latest-stable | |
# second sed expression removes leading whitespaces and '*' characters (git uses it to indicate the current branch) | |
run: | | |
branch=$(git branch -a | sed -e 's:remotes/origin/::' -e 's:^[ \t*]*::' | grep -E '^release\/v[0-9]+(\.[0-9]+)+$' | sort -Vr | head -1) | |
echo "::set-output name=branch::$branch" | |
# prepares JSON object representing strategy matrix which contains two 'branch' variants: master and latest stable | |
- name: Get matrix JSON | |
id: get-matrix | |
run: echo "::set-output name=matrix::{\"include\":[{\"branch\":\"master\"},{\"branch\":\"${{ steps.latest-stable.outputs.branch }}\"}]}" | |
integration-test: | |
needs: prepare-matrix | |
strategy: | |
matrix: ${{ fromJson(needs.prepare-matrix.outputs.matrix-json) }} | |
fail-fast: false | |
runs-on: [goth, ubuntu-18.04] | |
name: Integration Tests (nightly) @ ${{ matrix.branch }} | |
defaults: | |
run: | |
working-directory: './goth_tests' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
ref: ${{ matrix.branch }} | |
- name: Configure Python | |
uses: actions/setup-python@v2 | |
with: | |
python-version: '3.8.0' | |
- name: Configure Poetry | |
uses: Gr1N/setup-poetry@v8 | |
with: | |
poetry-version: 1.2.2 | |
- name: Install dependencies | |
run: | | |
poetry config experimental.new-installer false | |
poetry install --no-root | |
- name: Disconnect Docker containers from default network | |
continue-on-error: true | |
# related to this issue: https://github.com/moby/moby/issues/23302 | |
run: | | |
docker network inspect docker_default | |
sudo apt-get install -y jq | |
docker network inspect docker_default | jq ".[0].Containers | map(.Name)[]" | tee /dev/stderr | xargs --max-args 1 -- docker network disconnect -f docker_default | |
- name: Remove Docker containers | |
continue-on-error: true | |
run: docker rm -f $(docker ps -a -q) | |
- name: Restart Docker daemon | |
# related to this issue: https://github.com/moby/moby/issues/23302 | |
run: sudo systemctl restart docker | |
- name: Log in to GitHub Docker repository | |
run: echo ${{ secrets.GITHUB_TOKEN }} | docker login docker.pkg.github.com -u ${{github.actor}} --password-stdin | |
- name: Run test suite | |
env: | |
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
poetry run poe goth-assets | |
# Runs on branches defined within matrix | |
poetry run poe goth-tests --config-override docker-compose.build-environment.branch=${{ matrix.branch }} | |
- name: Convert branch name to valid file name ( replace / with - ) | |
id: branch_as | |
if: always() | |
run: echo "::set-output name=file_name::$(echo '${{ matrix.branch }}' | sed 's/\//-/g')" | |
- name: Upload test logs | |
uses: actions/upload-artifact@v2 | |
if: always() | |
with: | |
name: goth-logs_${{ steps.branch_as.outputs.file_name }} | |
path: /tmp/goth-tests | |
# Only relevant for self-hosted runners | |
- name: Remove test logs | |
if: always() | |
run: rm -rf /tmp/goth-tests | |
# Only relevant for self-hosted runners | |
- name: Remove Poetry virtual env | |
if: always() | |
# Python version below should agree with the version set up by this job. | |
# In the future we'll be able to use the `--all` flag here to remove envs for | |
# all Python versions (https://github.com/python-poetry/poetry/issues/3208). | |
run: poetry env remove python3.8 | |
- name: Send Discord notification on failure | |
uses: Ilshidur/action-discord@0.3.2 | |
if: failure() | |
env: | |
BRANCH_NAME: ${{ matrix.branch }} | |
DISCORD_AVATAR: https://i.imgur.com/EOX16Mx.jpg | |
DISCORD_USERNAME: 'Goth night watch' | |
DISCORD_WEBHOOK: ${{ secrets.GOTH_DISCORD_WEBHOOK }} | |
REPO_NAME: ${{ github.repository }} | |
WORKFLOW_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
with: | |
# <@&717621825957396540> = @core | |
args: '<@&717621825957396540> Goth nightly run failed for `{{ REPO_NAME }}` on branch `{{ BRANCH_NAME }}`! <{{ WORKFLOW_URL }}>' |