Convert legacy docker tests from bash to golang #1599
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: E2E Test Coverage | |
on: | |
push: | |
paths-ignore: | |
- "**.md" | |
- "channel.yaml" | |
- "install.sh" | |
- "tests/**" | |
- "!tests/e2e**" | |
- "!tests/docker**" | |
- ".github/**" | |
- "!.github/actions/**" | |
- "!.github/workflows/e2e.yaml" | |
pull_request: | |
paths-ignore: | |
- "**.md" | |
- "channel.yaml" | |
- "install.sh" | |
- "tests/**" | |
- "!tests/e2e**" | |
- "!tests/docker**" | |
- ".github/**" | |
- "!.github/actions/**" | |
- "!.github/workflows/e2e.yaml" | |
workflow_dispatch: {} | |
permissions: | |
contents: read | |
jobs: | |
build: | |
uses: ./.github/workflows/build-k3s.yaml | |
with: | |
upload-image: true | |
e2e: | |
name: "E2E Tests" | |
needs: build | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 40 | |
strategy: | |
fail-fast: false | |
matrix: | |
etest: [startup, s3, btrfs, externalip, privateregistry, embeddedmirror, wasm] | |
max-parallel: 3 | |
steps: | |
- name: "Checkout" | |
uses: actions/checkout@v4 | |
with: {fetch-depth: 1} | |
- name: Set up vagrant and libvirt | |
uses: ./.github/actions/vagrant-setup | |
- name: "Vagrant Cache" | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.vagrant.d/boxes | |
key: vagrant-box-ubuntu-2404 | |
- name: "Vagrant Plugin(s)" | |
run: vagrant plugin install vagrant-k3s vagrant-reload vagrant-scp | |
- name: Install Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version-file: 'go.mod' | |
cache: false | |
- name: Install Kubectl | |
run: | | |
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" | |
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl | |
- name: "Download k3s binary" | |
uses: actions/download-artifact@v4 | |
with: | |
name: k3s | |
path: ./dist/artifacts | |
- name: Run ${{ matrix.etest }} Test | |
env: | |
E2E_GOCOVER: "true" | |
run: | | |
chmod +x ./dist/artifacts/k3s | |
cd tests/e2e/${{ matrix.etest }} | |
go test -v -timeout=45m ./${{ matrix.etest}}_test.go -ci -local | |
- name: On Failure, Launch Debug Session | |
uses: lhotari/action-upterm@v1 | |
if: ${{ failure() }} | |
with: | |
## If no one connects after 5 minutes, shut down server. | |
wait-timeout-minutes: 5 | |
- name: Upload Results To Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: tests/e2e/${{ matrix.etest }}/coverage.out | |
flags: e2etests # optional | |
verbose: true # optional (default = false) | |
docker: | |
needs: build | |
name: Docker Tests | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
dtest: [basics, bootstraptoken, cacerts, compat, lazypull, upgrade] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: "Download k3s image" | |
uses: actions/download-artifact@v4 | |
with: | |
name: k3s | |
path: ./dist/artifacts | |
- name: Load k3s image | |
run: docker image load -i ./dist/artifacts/k3s-image.tar | |
- name: Run ${{ matrix.dtest }} Test | |
run: | | |
chmod +x ./dist/artifacts/k3s | |
. ./scripts/version.sh | |
. ./tests/docker/test-helpers | |
. ./tests/docker/test-run-${{ matrix.dtest }} | |
echo "Did test-run-${{ matrix.dtest }} pass $?" | |
build-go-tests: | |
name: "Build Go Tests" | |
runs-on: ubuntu-latest | |
outputs: | |
branch_name: ${{ steps.branch_step.outputs.BRANCH_NAME }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Go | |
uses: ./.github/actions/setup-go | |
- name: Build Go Tests | |
run: | | |
mkdir -p ./dist/artifacts | |
go test -c -ldflags="-w -s" -o ./dist/artifacts ./tests/docker/... | |
- name: Upload Go Tests | |
uses: actions/upload-artifact@v4 | |
with: | |
name: docker-go-tests | |
path: ./dist/artifacts/*.test | |
compression-level: 9 | |
retention-days: 1 | |
# For upgrade and skew tests, we need to know the branch name this run is based off. | |
# Since this is predetermined, we can run this step before the docker-go job, saving time. | |
# For PRs we can use the base_ref (ie the target branch of the PR). | |
# For pushes to k3s-io/k3s, the branch_name is a valid ref, master or release-x.y. | |
# For pushes to a fork, we need to determine the branch name by finding the parent branch from git show-branch history. | |
- name: Determine branch name | |
id: branch_step | |
run: | | |
if [ ${{ github.repository }} = "k3s-io/k3s" ]; then | |
BRANCH_NAME=$(echo ${{ github.base_ref || github.ref_name }}) | |
elif [ -z "${{ github.base_ref }}" ]; then | |
# We are in a fork, and need some git history to determine the branch name | |
git fetch origin --depth=100 +refs/heads/*:refs/remotes/origin/* | |
BRANCH_NAME=$(git show-branch -a 2> /dev/null | grep '\*' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\/\)\(.*\)\].*/\2/' | sed 's/[\^~].*//') | |
else | |
BRANCH_NAME=${{ github.base_ref }} | |
fi | |
echo "Branch Name is $BRANCH_NAME" | |
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_OUTPUT | |
docker-go: | |
needs: [build, build-go-tests] | |
name: Docker Tests In GO | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
dtest: [basics, bootstraptoken, cacerts, etcd, lazypull, skew, upgrade] | |
env: | |
BRANCH_NAME: ${{ needs.build-go-tests.outputs.branch_name }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: "Download K3s image" | |
uses: actions/download-artifact@v4 | |
with: | |
name: k3s | |
path: ./dist/artifacts | |
- name: Load and set K3s image | |
run: | | |
docker image load -i ./dist/artifacts/k3s-image.tar | |
IMAGE_TAG=$(docker image ls --format '{{.Repository}}:{{.Tag}}' | grep 'rancher/k3s') | |
echo "K3S_IMAGE=$IMAGE_TAG" >> $GITHUB_ENV | |
- name: Download Go Tests | |
uses: actions/download-artifact@v4 | |
with: | |
name: docker-go-tests | |
path: ./dist/artifacts | |
- name: Run ${{ matrix.dtest }} Test | |
# Put the compied test binary back in the same place as the test source | |
run: | | |
chmod +x ./dist/artifacts/${{ matrix.dtest }}.test | |
mv ./dist/artifacts/${{ matrix.dtest }}.test ./tests/docker/${{ matrix.dtest }}/ | |
cd ./tests/docker/${{ matrix.dtest }} | |
if [ ${{ matrix.dtest }} = "upgrade" ] || [ ${{ matrix.dtest }} = "skew" ]; then | |
./${{ matrix.dtest }}.test -k3sImage=$K3S_IMAGE -branch=$BRANCH_NAME | |
else | |
./${{ matrix.dtest }}.test -k3sImage=$K3S_IMAGE | |
fi |