# 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"