Files
NLnetLabs-krill/.github/workflows/e2e.yml
T
ximon18andGitHub 463c12ec85 FIX: use official Terraform GH Action instead of deprecated community action
Hopefully also addresses the failure with the community plugin due to the GH Actions security patch which discontinued the GH Actions add-path functionality.
2020-11-24 10:18:03 +01:00

159 lines
4.8 KiB
YAML

# This workflow deploys Krill and various Relying Parties (such as Routinator)
# in a local Docker private network and verifies that, for example, ROAs
# published by Krill can be retrieved by the RPs.
#
# This test was originally designed to work on remote cloud VMs such as
# DigitalOcean or Amazon Web Services as the GitHub Runner hosts were too
# small. However, the test now works on GH Runners, but for historical reasons
# the test is still orchestrated by Terraform even though there is no longer any
# cloud deployment involved.
#
# Commit 9a88f9c is the last version of this workflow that was configured to
# use cloud deployment.
#
# The actual E2E test framework is not part of the Krill repository as it is
# quite big. The framework is at https://github.com/NLnetLabs/rpki-deploy in the
# terraform/krill-e2e-test subdirectory.
name: E2E Test
on:
push:
branches:
- master
paths:
- '**'
- '!.github/workflows/ci.yml'
- '!.github/workflows/e2e test cache rebuild.yml'
- '!.github/workflows/pkg.yml'
- '!Changelog.md'
- '!doc/**'
- '!LICENSE'
- '!README.md'
- '!tests/**'
- 'tests/e2e/**'
- '!test-resources/**'
pull_request:
branches:
- master
jobs:
krill_e2e_test:
name: deploy_and_test
runs-on: ubuntu-18.04
steps:
- name: Checkout Krill
uses: actions/checkout@v2
with:
path: krill
fetch-depth: 1
- name: Determine E2E test framework branch to use
id: pick_e2e_branch
shell: bash
run: |
BRANCH=${GITHUB_REF#refs/heads/}
if git ls-remote --exit-code --heads https://github.com/NLnetLabs/rpki-deploy ${BRANCH}; then
echo "::set-output name=branch::${BRANCH}"
else
echo "::set-output name=success::master"
fi
- name: Checkout the E2E test framework
uses: actions/checkout@v2
with:
repository: nlnetlabs/rpki-deploy
path: rpki-deploy
fetch-depth: 1
ref: ${{ steps.pick_e2e_branch.outputs.branch }}
- name: Checkout RTRLIB (v0.7.0 tag)
uses: actions/checkout@v2
with:
repository: rtrlib/rtrlib
ref: v0.7.0
path: rtrlib
- name: Print GITHUB_WORKSPACE contents
run: ls -la ${GITHUB_WORKSPACE}
- name: Install Python 3 venv package
run: |
set -x
sudo apt-get update
sudo apt-get install -y python3-venv
- name: Install RTRLIB with NDEBUG
working-directory: ./rtrlib
run: |
set -x
cmake -D CMAKE_C_FLAGS='-DNDEBUG' -D CMAKE_BUILD_TYPE=Release -D RTRLIB_TRANSPORT_SSH=No .
make
sudo make install
sudo ldconfig
- name: Install Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: "0.12.19"
# Strictly speaking this is not required when testing locally, but currently
# the test fails without it.
- name: Install Terraform plugins
run: |
set -x
mkdir -p $HOME/.terraform.d/plugins/
cp ${GITHUB_WORKSPACE}/rpki-deploy/terraform/plugins/terraform-provider-dockermachine $HOME/.terraform.d/plugins/
- name: Print application versions
run: |
set -x
docker --version
docker-compose --version
python3 --version
terraform --version
# Don't lock the state file, otherwise if the user cancels the build via the
# GitHub Actions UI the terraform destroy cleanup step will fail.
- name: Deploy
working-directory: ./rpki-deploy/terraform/krill-e2e-test/run_on_localhost
timeout-minutes: 30
run: |
set -x
terraform init
terraform apply -lock=false -auto-approve -var "krill_build_path=${GITHUB_WORKSPACE}/krill"
env:
TF_VAR_run_tests: false
- name: Run tests
working-directory: ./rpki-deploy/terraform/krill-e2e-test/run_on_localhost
run: |
set -x
terraform apply -auto-approve \
-var "krill_build_path=${GITHUB_WORKSPACE}/krill" \
-var "test_suite_path=${GITHUB_WORKSPACE}/krill/tests/e2e"
env:
TF_VAR_run_tests: true
- name: Upload HTML test report
uses: actions/upload-artifact@v1
with:
name: test-report
path: /tmp/report.html
- name: Dump diagnostics on failure
if: failure()
working-directory: ./rpki-deploy/terraform/krill-e2e-test/run_on_do
run: |
set -x
terraform output docker_env_vars
eval $(terraform output docker_env_vars)
pushd ../lib/docker
docker system info
docker system events --since 60m --until 1s
- name: Undeploy
if: always()
working-directory: ./rpki-deploy/terraform/krill-e2e-test/run_on_localhost
run: terraform destroy -auto-approve -var "krill_build_path=${GITHUB_WORKSPACE}/krill"