Skip to content

Commit

Permalink
split out e2e tests into its own gha file (#301)
Browse files Browse the repository at this point in the history
* split out e2e tests into its own gha file
  • Loading branch information
eljohnson92 authored May 3, 2024
1 parent f898f2b commit 8da4cc8
Show file tree
Hide file tree
Showing 12 changed files with 183 additions and 104 deletions.
126 changes: 37 additions & 89 deletions .github/workflows/build_test_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,49 @@ on:
push:
branches:
- main
paths-ignore:
- '**/**.md'
- 'docs/**'
pull_request:
branches:
- "*"
paths-ignore:
- '**/**.md'
- 'docs/**'
workflow_dispatch:

permissions:
contents: read
pull-requests: read
actions: read

concurrency:
group: build-test-ci-${{ github.ref }}-1
group: build-test-ci-${{ github.ref }}
cancel-in-progress: true

jobs:
changes:
runs-on: ubuntu-latest
outputs:
# Expose matched filters as job 'src' output variable
src: ${{ steps.filter.outputs.src }}
steps:
- uses: actions/checkout@v4
- name: Harden Runner
uses: step-security/harden-runner@v2
with:
disable-sudo: true
egress-policy: block
allowed-endpoints: >
api.github.com:443
github.com:443
- uses: dorny/paths-filter@v3
id: filter
with:
predicate-quantifier: 'every'
filters: |
src:
- '!**/**.md'
- '!docs/**'
go-build-test:
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.src == 'true' }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@v2
Expand Down Expand Up @@ -71,90 +91,18 @@ jobs:
slug: linode/cluster-api-provider-linode

e2e-test:
needs: [go-build-test, docker-build]
runs-on: ubuntu-latest
if: github.event.pull_request.draft == false
env:
GITHUB_TOKEN: ${{ secrets.github_token }}
LINODE_TOKEN: ${{ secrets.LINODE_TOKEN }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@v2
with:
disable-sudo: true
egress-policy: block
allowed-endpoints: >
api.linode.com:443
api.github.com:443
github.com:443
gcr.io:443
ghcr.io:443
proxy.golang.org:443
sum.golang.org:443
*.githubusercontent.com:443
docker.io:443
registry-1.docker.io:443
auth.docker.io:443
production.cloudflare.docker.com:443
storage.googleapis.com:443
registry.k8s.io:443
*.pkg.dev:443
*.amazonaws.com:443
*.blob.core.windows.net:443
quay.io:443
*.quay.io:443
api.snapcraft.io:443
cloud.tilt.dev:443
kubernetes-sigs.github.io:443
charts.jetstack.io:443
helm.cilium.io:443
linode.github.io:443
- uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
check-latest: true

- name: Docker cache
uses: ScribeMD/[email protected]
with:
key: docker-${{ runner.os }}-${{ hashFiles('go.sum') }}

- name: Complete E2E Test
if: github.ref == 'refs/heads/main'
run: make e2etest
env:
E2E_FLAGS: '--assert-timeout 15m0s'
INSTALL_K3S_PROVIDER: true
INSTALL_RKE2_PROVIDER: true
LINODE_REGION: us-sea
LINODE_CONTROL_PLANE_MACHINE_TYPE: g6-standard-2
LINODE_MACHINE_TYPE: g6-standard-2
CLUSTERCTL_CONFIG: /home/runner/work/cluster-api-provider-linode/cluster-api-provider-linode/e2e/gha-clusterctl-config.yaml


- name: Quick E2E Test
if: github.ref != 'refs/heads/main'
run: make e2etest
env:
E2E_FLAGS: '--selector quick'

- name: Copy logs
if: ${{ always() }}
run: docker cp tilt-control-plane:/var/log .logs

- uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: logs
path: .logs/*
overwrite: true
needs: changes
if: ${{ github.event.pull_request.draft == false && needs.changes.outputs.src == 'true' }}
uses: ./.github/workflows/e2e-test.yaml
secrets: inherit
with:
e2e-selector: ${{ github.ref == 'refs/heads/main' && 'all' || 'quick' }}
e2e-flags: ${{ github.ref == 'refs/heads/main' && '--assert-timeout 15m0s' || '' }}

docker-build:
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.src == 'true' }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@v2
Expand Down
119 changes: 119 additions & 0 deletions .github/workflows/e2e-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: Run e2e tests

on:
workflow_call:
inputs:
e2e-selector:
default: quick
description: "Selector for which tests to run, defaults to 'quick'"
required: true
type: string
e2e-flags:
type: string
description: "Flags to pass to chainsaw when running e2e tests"
workflow_dispatch:
inputs:
e2e-selector:
default: quick
description: "Selector for which tests to run, defaults to 'quick'"
type: choice
required: true
options:
- quick
- flavors
- k3s
- rke2
- default-cluster
- linodecluster
- linodemachine
- linodeobj
- linodevpc
- all
e2e-flags:
type: string
description: "Flags to pass to chainsaw when running e2e tests"

permissions:
contents: read
pull-requests: read
actions: read

concurrency:
group: e2e-${{ github.ref }}
cancel-in-progress: true

jobs:
e2e-test:
name: ${{ format('{0}-e2e-tests', inputs.e2e-selector) }}
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.github_token }}
LINODE_TOKEN: ${{ secrets.LINODE_TOKEN }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@v2
with:
disable-sudo: true
egress-policy: block
allowed-endpoints: >
api.linode.com:443
api.github.com:443
github.com:443
gcr.io:443
ghcr.io:443
proxy.golang.org:443
sum.golang.org:443
*.githubusercontent.com:443
docker.io:443
registry-1.docker.io:443
auth.docker.io:443
production.cloudflare.docker.com:443
storage.googleapis.com:443
registry.k8s.io:443
*.pkg.dev:443
*.amazonaws.com:443
*.blob.core.windows.net:443
quay.io:443
*.quay.io:443
api.snapcraft.io:443
cloud.tilt.dev:443
kubernetes-sigs.github.io:443
charts.jetstack.io:443
helm.cilium.io:443
linode.github.io:443
- uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
check-latest: true

- name: Docker cache
uses: ScribeMD/[email protected]
with:
key: docker-${{ runner.os }}-${{ hashFiles('go.sum') }}

- name: Run E2E Test
env:
E2E_FLAGS: ${{ inputs.e2e-flags }}
E2E_SELECTOR: ${{ inputs.e2e-selector }}
INSTALL_K3S_PROVIDER: true
INSTALL_RKE2_PROVIDER: true
LINODE_REGION: us-sea
LINODE_CONTROL_PLANE_MACHINE_TYPE: g6-standard-2
LINODE_MACHINE_TYPE: g6-standard-2
CLUSTERCTL_CONFIG: /home/runner/work/cluster-api-provider-linode/cluster-api-provider-linode/e2e/gha-clusterctl-config.yaml
run: make e2etest

- name: Copy logs
if: ${{ always() }}
run: docker cp tilt-control-plane:/var/log .logs

- uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: logs
path: .logs/*
overwrite: true
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ SHELL = /usr/bin/env bash -o pipefail
CONTAINER_TOOL ?= docker
MDBOOK_DEV_HOST = 0.0.0.0
MDBOOK_DEV_PORT = 3000
E2E_SELECTOR ?= all

# ENVTEST_K8S_VERSION
# - refers to the version of kubebuilder assets to be downloaded by envtest binary.
Expand Down Expand Up @@ -119,7 +120,7 @@ gosec: ## Run gosec against code.

.PHONY: lint
lint: ## Run lint against code.
docker run --rm -w /workdir -v $(PWD):/workdir golangci/golangci-lint:v1.57.2 golangci-lint run -c .golangci.yml
docker run --rm -w /workdir -v $(PWD):/workdir golangci/golangci-lint:v1.57.2 golangci-lint run -c .golangci.yml --fix

.PHONY: nilcheck
nilcheck: nilaway ## Run nil check against code.
Expand Down Expand Up @@ -147,7 +148,7 @@ test: generate fmt vet envtest ## Run tests.

.PHONY: e2etest
e2etest: generate local-release local-deploy chainsaw
GIT_REF=$(GIT_REF) $(CHAINSAW) test ./e2e $(E2E_FLAGS)
GIT_REF=$(GIT_REF) $(CHAINSAW) test ./e2e --selector $(E2E_SELECTOR) $(E2E_FLAGS)

local-deploy: kind ctlptl tilt kustomize clusterctl
@echo -n "LINODE_TOKEN=$(LINODE_TOKEN)" > config/default/.env.linode
Expand Down
29 changes: 16 additions & 13 deletions docs/src/developers/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,27 +207,30 @@ make e2etest
```
*Note: By default `make e2etest` runs all the e2e tests defined under `/e2e` dir*

In order to run specific test, you need to pass flags to chainsaw by setting env var `E2E_FLAGS`
In order to run specific test, you need to pass flags to chainsaw by setting env var `E2E_SELECTOR`

Additional settings can be passed to chainsaw by setting env var `E2E_FLAGS`

Example: Only running e2e tests for flavors *(default, k3s, rke2)*
```bash
make e2etest E2E_FLAGS='--selector flavors --assert-timeout 10m0s'
make e2etest E2E_SELECTOR='flavors' E2E_FLAGS='--assert-timeout 10m0s'
```
*Note: We need to bump up the assert timeout to 10 mins to allow the cluster to complete building and become available*

There are other selectors you can use to invoke specfic tests. Please look at the table below for all the selectors available:

| Tests | Selector |
| ------------- | ------------- |
| All Controllers | `quick` |
| All Flavors (default, k3s, rke2) | `flavors` |
| K3S Cluster | `k3s` |
| RKE2 Cluster | `rke2` |
| Default (kubeadm) Cluster | `default-cluster` |
| Linode Cluster Controller | `linodecluster` |
| Linode Machine Controller | `linodemachine` |
| Linode Obj Controller | `linodeobj` |
| Linode VPC Controller | `linodevpc` |
| Tests | Selector |
|----------------------------------|-------------------|
| All Tests | `all` |
| All Controllers | `quick` |
| All Flavors (default, k3s, rke2) | `flavors` |
| K3S Cluster | `k3s` |
| RKE2 Cluster | `rke2` |
| Default (kubeadm) Cluster | `default-cluster` |
| Linode Cluster Controller | `linodecluster` |
| Linode Machine Controller | `linodemachine` |
| Linode Obj Controller | `linodeobj` |
| Linode VPC Controller | `linodevpc` |

*Note: For any flavor e2e tests, please set the required env variables*

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ metadata:
name: default-capl-cluster
# Labels to allow the test to be triggered based on selector flag
labels:
all:
default-cluster:
flavors:
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ metadata:
name: k3s-capl-cluster
# Labels to allow the test to be triggered based on selector flag
labels:
all:
k3s:
flavors:
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ metadata:
name: rke2-capl-cluster
# Labels to allow the test to be triggered based on selector flag
labels:
all:
rke2:
flavors:
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ metadata:
name: minimal-linodecluster
# Label to trigger the test on every PR
labels:
all:
quick:
linodecluster:
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ metadata:
name: minimal-linodemachine
# Label to trigger the test on every PR
labels:
all:
quick:
linodemachine:
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ metadata:
name: vpc-integration
# Label to trigger the test on every PR
labels:
all:
quick:
linodemachine:
linodevpc:
Expand Down
Loading

0 comments on commit 8da4cc8

Please sign in to comment.