Files
firezone/.github/workflows/_integration_tests.yml
Reactor Scram 1e4ed7bad6 refactor(ci): move DNS control method up to docker-compose.yml (#4341)
This is part of a yak shave towards CI testing of #3812 

Moving the DNS control method out of `docker-compose.yml` and up to the
integration tests themselves allows us to test these scenarios:

- `systemd-resolved`
- `etc-resolv-conf`
- `systemd-resolved` but we're in a container where that won't work, so
we should gracefully degrade to just allowing IP/CIDR resources
2024-04-02 17:11:29 +00:00

152 lines
4.9 KiB
YAML

name: Integration Tests
run-name: Triggered from ${{ github.event_name }} by ${{ github.actor }}
on:
workflow_call:
inputs:
domain_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/domain'
domain_tag:
required: false
type: string
default: ${{ github.sha }}
api_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/api'
api_tag:
required: false
type: string
default: ${{ github.sha }}
web_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/web'
web_tag:
required: false
type: string
default: ${{ github.sha }}
elixir_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/elixir'
elixir_tag:
required: false
type: string
default: ${{ github.sha }}
relay_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/relay'
relay_tag:
required: false
type: string
default: ${{ github.sha }}
gateway_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/gateway'
gateway_tag:
required: false
type: string
default: ${{ github.sha }}
client_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/client'
client_tag:
required: false
type: string
default: ${{ github.sha }}
http_test_server_image:
required: false
type: string
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/http-test-server'
http_test_server_tag:
required: false
type: string
default: ${{ github.sha }}
jobs:
integration-tests:
name: integration-tests-${{ matrix.test }}
runs-on: ubuntu-22.04
permissions:
contents: read
id-token: write
pull-requests: write
env:
DOMAIN_IMAGE: ${{ inputs.domain_image }}
DOMAIN_TAG: ${{ inputs.domain_tag }}
API_IMAGE: ${{ inputs.api_image }}
API_TAG: ${{ inputs.api_tag }}
WEB_IMAGE: ${{ inputs.web_image }}
WEB_TAG: ${{ inputs.web_tag }}
RELAY_IMAGE: ${{ inputs.relay_image }}
RELAY_TAG: ${{ inputs.relay_tag }}
GATEWAY_IMAGE: ${{ inputs.gateway_image }}
GATEWAY_TAG: ${{ inputs.gateway_tag }}
CLIENT_IMAGE: ${{ inputs.client_image }}
CLIENT_TAG: ${{ inputs.client_tag }}
ELIXIR_IMAGE: ${{ inputs.elixir_image }}
ELIXIR_TAG: ${{ inputs.elixir_tag }}
HTTP_TEST_SERVER_IMAGE: ${{ inputs.http_test_server_image }}
HTTP_TEST_SERVER_TAG: ${{ inputs.http_test_server_tag }}
strategy:
fail-fast: false
matrix:
test: [
direct-curl-portal-restart,
relayed-curl-portal-restart,
relayed-curl-relay-restart,
direct-curl-portal-down,
relayed-curl-portal-down,
direct-curl-portal-relay-down,
direct-download-roaming-network,
dns-etc-resolvconf,
dns-nm,
dns-failsafe, # Uses the default DNS control method
systemd/dns-systemd-resolved,
]
include:
- test: direct-download-roaming-network
dns-control: etc-resolv-conf
- test: dns-etc-resolvconf
dns-control: etc-resolv-conf
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/gcp-docker-login
id: login
with:
project: firezone-staging
- name: Seed database
run: docker compose run elixir /bin/sh -c 'cd apps/domain && mix ecto.seed'
- name: Start docker compose in the background
run: |
# Overrides the Client's env var in docker-compose.yml
echo "FIREZONE_DNS_CONTROL=${{ matrix.dns-control }}" >> .env
# Start one-by-one to avoid variability in service startup order
docker compose up -d dns.httpbin httpbin download.httpbin
docker compose up -d api web domain --no-build
docker compose up -d relay --no-build
docker compose up -d gateway --no-build
docker compose up -d client --no-build
docker compose exec -it client env
- run: ./scripts/tests/${{ matrix.test }}.sh
- name: Show Client logs
if: "!cancelled()"
run: docker compose logs client
- name: Show Relay logs
if: "!cancelled()"
run: docker compose logs relay
- name: Show Gateway logs
if: "!cancelled()"
run: docker compose logs gateway
- name: Show API logs
if: "!cancelled()"
run: docker compose logs api