Files
NLnetLabs-krill/.github/workflows/e2e.yml
T
Ximon Eighteen 7031576f63 Create a Krill DEB package via GH actions:
- Assumes that the target system has ca-certificates installed already.
  - Vendor OpenSSL to support Ubuntu 16.04 which only has OpenSSL 1.0.0.
  - Use an Ubuntu 16.04 compatible version of libgcc1 (don't use cargo-deb $auto
    depends as the GH 16.04 runner has a much newer libgcc1 package than stock
    Ubuntu 16.04).
  - Use GH caching to avoid repeat compilation of unchanging cargo deb and krill
    dependencies.
  - Sanity check the created DEB in targeted O/S versions.
2020-06-23 12:28:17 +02:00

158 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: marocchino/setup-terraform@v1
with:
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"