ci: gha test workflow for integration and unit test
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
a0a16bbed6
commit
2e04be3fb9
|
@ -0,0 +1,27 @@
|
||||||
|
name: 'Setup Runner'
|
||||||
|
description: 'Composite action to set up the GitHub Runner for jobs in the test.yml workflow'
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
sudo modprobe ip_vs
|
||||||
|
sudo modprobe ipv6
|
||||||
|
sudo modprobe ip6table_filter
|
||||||
|
sudo modprobe -r overlay
|
||||||
|
sudo modprobe overlay redirect_dir=off
|
||||||
|
shell: bash
|
||||||
|
- run: |
|
||||||
|
if [ ! -e /etc/docker/daemon.json ]; then
|
||||||
|
echo '{}' | tee /etc/docker/daemon.json >/dev/null
|
||||||
|
fi
|
||||||
|
DOCKERD_CONFIG=$(jq '.+{"experimental":true,"live-restore":true,"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' /etc/docker/daemon.json)
|
||||||
|
sudo tee /etc/docker/daemon.json <<<"$DOCKERD_CONFIG" >/dev/null
|
||||||
|
sudo service docker restart
|
||||||
|
shell: bash
|
||||||
|
- run: |
|
||||||
|
./contrib/check-config.sh || true
|
||||||
|
shell: bash
|
||||||
|
- run: |
|
||||||
|
docker info
|
||||||
|
shell: bash
|
|
@ -0,0 +1,268 @@
|
||||||
|
name: test
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
- '[0-9]+.[0-9]{2}'
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
env:
|
||||||
|
GO_VERSION: 1.19.1
|
||||||
|
GOTESTLIST_VERSION: v0.2.0
|
||||||
|
ITG_CLI_MATRIX_SIZE: 6
|
||||||
|
BUILDX: docker buildx
|
||||||
|
USE_BUILDX: 1
|
||||||
|
DOCKER_EXPERIMENTAL: 1
|
||||||
|
DOCKER_GRAPHDRIVER: overlay2
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-dev:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
mode:
|
||||||
|
- ""
|
||||||
|
- systemd
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Prepare
|
||||||
|
run: |
|
||||||
|
if [ "${{ matrix.mode }}" = "systemd" ]; then
|
||||||
|
echo "SYSTEMD=true" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Build dev image
|
||||||
|
uses: docker/bake-action@v2
|
||||||
|
with:
|
||||||
|
targets: dev
|
||||||
|
set: |
|
||||||
|
*.cache-from=type=gha,scope=dev${{ matrix.mode }}
|
||||||
|
*.cache-to=type=gha,scope=dev${{ matrix.mode }},mode=max
|
||||||
|
*.output=type=cacheonly
|
||||||
|
|
||||||
|
unit:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
needs:
|
||||||
|
- build-dev
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
-
|
||||||
|
name: Set up runner
|
||||||
|
uses: ./.github/actions/setup-runner
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Build dev image
|
||||||
|
uses: docker/bake-action@v2
|
||||||
|
with:
|
||||||
|
targets: dev
|
||||||
|
set: |
|
||||||
|
dev.cache-from=type=gha,scope=dev
|
||||||
|
-
|
||||||
|
name: Test
|
||||||
|
run: |
|
||||||
|
make -o build test-unit
|
||||||
|
|
||||||
|
docker-py:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
needs:
|
||||||
|
- build-dev
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
-
|
||||||
|
name: Set up runner
|
||||||
|
uses: ./.github/actions/setup-runner
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Build dev image
|
||||||
|
uses: docker/bake-action@v2
|
||||||
|
with:
|
||||||
|
targets: dev
|
||||||
|
set: |
|
||||||
|
dev.cache-from=type=gha,scope=dev
|
||||||
|
-
|
||||||
|
name: Test
|
||||||
|
run: |
|
||||||
|
make -o build test-docker-py
|
||||||
|
-
|
||||||
|
name: Test daemon logs
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
cat bundles/test-docker-py/docker.log
|
||||||
|
|
||||||
|
integration-flaky:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
needs:
|
||||||
|
- build-dev
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
-
|
||||||
|
name: Set up runner
|
||||||
|
uses: ./.github/actions/setup-runner
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Build dev image
|
||||||
|
uses: docker/bake-action@v2
|
||||||
|
with:
|
||||||
|
targets: dev
|
||||||
|
set: |
|
||||||
|
dev.cache-from=type=gha,scope=dev
|
||||||
|
-
|
||||||
|
name: Test
|
||||||
|
run: |
|
||||||
|
make -o build test-integration-flaky
|
||||||
|
env:
|
||||||
|
TEST_SKIP_INTEGRATION_CLI: 1
|
||||||
|
|
||||||
|
integration:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
needs:
|
||||||
|
- build-dev
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
- ubuntu-20.04
|
||||||
|
- ubuntu-22.04
|
||||||
|
mode:
|
||||||
|
- ""
|
||||||
|
- rootless
|
||||||
|
- systemd
|
||||||
|
#- rootless-systemd FIXME: https://github.com/moby/moby/issues/44084
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
-
|
||||||
|
name: Set up runner
|
||||||
|
uses: ./.github/actions/setup-runner
|
||||||
|
-
|
||||||
|
name: Prepare
|
||||||
|
run: |
|
||||||
|
CACHE_DEV_SCOPE=dev
|
||||||
|
if [[ "${{ matrix.mode }}" == *"rootless"* ]]; then
|
||||||
|
echo "DOCKER_ROOTLESS=1" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
if [[ "${{ matrix.mode }}" == *"systemd"* ]]; then
|
||||||
|
echo "SYSTEMD=true" >> $GITHUB_ENV
|
||||||
|
CACHE_DEV_SCOPE="${CACHE_DEV_SCOPE}systemd"
|
||||||
|
fi
|
||||||
|
echo "CACHE_DEV_SCOPE=${CACHE_DEV_SCOPE}" >> $GITHUB_ENV
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Build dev image
|
||||||
|
uses: docker/bake-action@v2
|
||||||
|
with:
|
||||||
|
targets: dev
|
||||||
|
set: |
|
||||||
|
dev.cache-from=type=gha,scope=${{ env.CACHE_DEV_SCOPE }}
|
||||||
|
-
|
||||||
|
name: Test
|
||||||
|
run: |
|
||||||
|
make -o build test-integration
|
||||||
|
env:
|
||||||
|
TEST_SKIP_INTEGRATION_CLI: 1
|
||||||
|
-
|
||||||
|
name: Test daemon logs
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
cat bundles/test-integration/docker.log
|
||||||
|
|
||||||
|
integration-cli-prepare:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.tests.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
-
|
||||||
|
name: Set up Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: ${{ env.GO_VERSION }}
|
||||||
|
-
|
||||||
|
name: Install gotestlist
|
||||||
|
run:
|
||||||
|
go install github.com/crazy-max/gotestlist/cmd/gotestlist@${{ env.GOTESTLIST_VERSION }}
|
||||||
|
-
|
||||||
|
name: Create matrix
|
||||||
|
id: tests
|
||||||
|
working-directory: ./integration-cli
|
||||||
|
run: |
|
||||||
|
# Distribute integration-cli tests for the matrix in integration-test job.
|
||||||
|
# Also prepend ./... to the matrix. This is a special case to run "Test integration" step exclusively.
|
||||||
|
matrix="$(gotestlist -d ${{ env.ITG_CLI_MATRIX_SIZE }} ./...)"
|
||||||
|
matrix="$(echo "$matrix" | jq -c '. |= ["./..."] + .')"
|
||||||
|
echo "::set-output name=matrix::$matrix"
|
||||||
|
-
|
||||||
|
name: Show matrix
|
||||||
|
run: |
|
||||||
|
echo ${{ steps.tests.outputs.matrix }}
|
||||||
|
|
||||||
|
integration-cli:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
needs:
|
||||||
|
- build-dev
|
||||||
|
- integration-cli-prepare
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
test: ${{ fromJson(needs.integration-cli-prepare.outputs.matrix) }}
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
-
|
||||||
|
name: Set up runner
|
||||||
|
uses: ./.github/actions/setup-runner
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Build dev image
|
||||||
|
uses: docker/bake-action@v2
|
||||||
|
with:
|
||||||
|
targets: dev
|
||||||
|
set: |
|
||||||
|
dev.cache-from=type=gha,scope=dev
|
||||||
|
-
|
||||||
|
name: Test
|
||||||
|
run: |
|
||||||
|
make -o build test-integration
|
||||||
|
env:
|
||||||
|
TEST_SKIP_INTEGRATION: 1
|
||||||
|
TESTFLAGS: "-test.run (${{ matrix.test }})/"
|
||||||
|
-
|
||||||
|
name: Test daemon logs
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
cat bundles/test-integration/docker.log
|
10
Makefile
10
Makefile
|
@ -118,7 +118,7 @@ DOCKER_IMAGE := docker-dev
|
||||||
DOCKER_PORT_FORWARD := $(if $(DOCKER_PORT),-p "$(DOCKER_PORT)",)
|
DOCKER_PORT_FORWARD := $(if $(DOCKER_PORT),-p "$(DOCKER_PORT)",)
|
||||||
DELVE_PORT_FORWARD := $(if $(DELVE_PORT),-p "$(DELVE_PORT)",)
|
DELVE_PORT_FORWARD := $(if $(DELVE_PORT),-p "$(DELVE_PORT)",)
|
||||||
|
|
||||||
DOCKER_FLAGS := $(DOCKER) run --rm -i --privileged $(DOCKER_CONTAINER_NAME) $(DOCKER_ENVS) $(DOCKER_MOUNT) $(DOCKER_PORT_FORWARD) $(DELVE_PORT_FORWARD)
|
DOCKER_FLAGS := $(DOCKER) run --rm --privileged $(DOCKER_CONTAINER_NAME) $(DOCKER_ENVS) $(DOCKER_MOUNT) $(DOCKER_PORT_FORWARD) $(DELVE_PORT_FORWARD)
|
||||||
BUILD_APT_MIRROR := $(if $(DOCKER_BUILD_APT_MIRROR),--build-arg APT_MIRROR=$(DOCKER_BUILD_APT_MIRROR))
|
BUILD_APT_MIRROR := $(if $(DOCKER_BUILD_APT_MIRROR),--build-arg APT_MIRROR=$(DOCKER_BUILD_APT_MIRROR))
|
||||||
export BUILD_APT_MIRROR
|
export BUILD_APT_MIRROR
|
||||||
|
|
||||||
|
@ -137,6 +137,14 @@ ifeq ($(INTERACTIVE), 1)
|
||||||
DOCKER_FLAGS += -t
|
DOCKER_FLAGS += -t
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# on GitHub Runners input device is not a TTY but we allocate a pseudo-one,
|
||||||
|
# otherwise keep STDIN open even if not attached if not a GitHub Runner.
|
||||||
|
ifeq ($(GITHUB_ACTIONS),true)
|
||||||
|
DOCKER_FLAGS += -t
|
||||||
|
else
|
||||||
|
DOCKER_FLAGS += -i
|
||||||
|
endif
|
||||||
|
|
||||||
DOCKER_RUN_DOCKER := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)"
|
DOCKER_RUN_DOCKER := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)"
|
||||||
|
|
||||||
DOCKER_BUILD_ARGS += --build-arg=GO_VERSION
|
DOCKER_BUILD_ARGS += --build-arg=GO_VERSION
|
||||||
|
|
|
@ -35,3 +35,24 @@ target "cross" {
|
||||||
}
|
}
|
||||||
target = "cross"
|
target = "cross"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# dev
|
||||||
|
#
|
||||||
|
|
||||||
|
variable "DEV_IMAGE" {
|
||||||
|
default = "docker-dev"
|
||||||
|
}
|
||||||
|
variable "SYSTEMD" {
|
||||||
|
default = "false"
|
||||||
|
}
|
||||||
|
|
||||||
|
target "dev" {
|
||||||
|
inherits = ["_common"]
|
||||||
|
target = "final"
|
||||||
|
args = {
|
||||||
|
SYSTEMD = SYSTEMD
|
||||||
|
}
|
||||||
|
tags = [DEV_IMAGE]
|
||||||
|
output = ["type=docker"]
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue