Skip to content

Commit

Permalink
split out e2e tests into its own gha file
Browse files Browse the repository at this point in the history
  • Loading branch information
eljohnson92 committed May 2, 2024
1 parent 2f81203 commit 2f56996
Show file tree
Hide file tree
Showing 11 changed files with 166 additions and 91 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
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,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 +147,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
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
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ metadata:
name: minimal-linodeobjectstoragebucket
# Label to trigger the test on every PR
labels:
all:
quick:
linodeobj:
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ metadata:
name: minimal-linodevpc
# Label to trigger the test on every PR
labels:
all:
quick:
linodevpc:
spec:
Expand Down

0 comments on commit 2f56996

Please sign in to comment.