-
Notifications
You must be signed in to change notification settings - Fork 614
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: apostasie <[email protected]>
- Loading branch information
Showing
14 changed files
with
174 additions
and
84 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,13 +11,26 @@ on: | |
|
||
env: | ||
GO_VERSION: 1.23.x | ||
SHORT_TIMEOUT: 5 | ||
LONG_TIMEOUT: 60 | ||
|
||
jobs: | ||
lint: | ||
runs-on: ubuntu-24.04 | ||
timeout-minutes: 20 | ||
lint-go: | ||
timeout-minutes: "${{ fromJSON(env.SHORT_TIMEOUT) }}" | ||
runs-on: "${{ matrix.os }}" | ||
strategy: | ||
matrix: | ||
include: | ||
- os: ubuntu-24.04 | ||
goos: linux | ||
- os: ubuntu-24.04 | ||
goos: freebsd | ||
- os: windows-2022 | ||
goos: windows | ||
env: | ||
GOOS: "${{ matrix.goos }}" | ||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- uses: actions/setup-go@v5 | ||
|
@@ -26,24 +39,44 @@ jobs: | |
check-latest: true | ||
cache: true | ||
- name: golangci-lint | ||
uses: golangci/golangci-lint-action@v6.1.1 | ||
uses: golangci/golangci-lint-action@v6 | ||
with: | ||
version: v1.60.1 | ||
args: --verbose | ||
- name: yamllint-lint | ||
|
||
lint-other: | ||
timeout-minutes: "${{ fromJSON(env.SHORT_TIMEOUT) }}" | ||
runs-on: ubuntu-24.04 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- uses: actions/setup-go@v5 | ||
with: | ||
go-version: ${{ env.GO_VERSION }} | ||
check-latest: true | ||
cache: true | ||
- name: yaml | ||
run: make lint-yaml | ||
- name: shellcheck | ||
- name: shell | ||
run: make lint-shell | ||
- name: go imports ordering | ||
run: | | ||
go install -v github.com/incu6us/goimports-reviser/v3@latest | ||
make lint-imports | ||
test-unit: | ||
runs-on: ubuntu-24.04 | ||
timeout-minutes: 20 | ||
timeout-minutes: "${{ fromJSON(env.SHORT_TIMEOUT) }}" | ||
runs-on: "${{ matrix.os }}" | ||
strategy: | ||
matrix: | ||
include: | ||
# FIXME: currently disabled as a lot more work is required to make these tests pass on windows | ||
#- os: windows-2022 | ||
# goos: windows | ||
- os: ubuntu-24.04 | ||
goos: linux | ||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- uses: actions/setup-go@v5 | ||
|
@@ -52,11 +85,11 @@ jobs: | |
check-latest: true | ||
cache: true | ||
- name: "Run unit tests" | ||
run: go test -v ./pkg/... | ||
run: make test-unit | ||
|
||
test-integration: | ||
timeout-minutes: "${{ fromJSON(env.LONG_TIMEOUT) }}" | ||
runs-on: "${{ matrix.runner }}" | ||
timeout-minutes: 40 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
|
@@ -78,7 +111,7 @@ jobs: | |
UBUNTU_VERSION: "${{ matrix.ubuntu }}" | ||
CONTAINERD_VERSION: "${{ matrix.containerd }}" | ||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- name: "Prepare integration test environment" | ||
|
@@ -99,16 +132,15 @@ jobs: | |
docker run --privileged --rm tonistiigi/binfmt --install linux/arm64 | ||
docker run --privileged --rm tonistiigi/binfmt --install linux/arm/v7 | ||
- name: "Run integration tests" | ||
uses: nick-fields/retry@v3 | ||
with: | ||
timeout_minutes: 30 | ||
max_attempts: 2 | ||
retry_on: error | ||
command: docker run -t --rm --privileged test-integration | ||
run: | | ||
docker run -t --rm --privileged test-integration ./test-integration.sh | ||
- name: "Run integration tests (flaky)" | ||
run: | | ||
docker run -t --rm --privileged test-integration ./test-integration.sh -test.only-flaky | ||
test-integration-ipv6: | ||
timeout-minutes: "${{ fromJSON(env.LONG_TIMEOUT) }}" | ||
runs-on: "ubuntu-${{ matrix.ubuntu }}" | ||
timeout-minutes: 40 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
|
@@ -120,7 +152,7 @@ jobs: | |
UBUNTU_VERSION: "${{ matrix.ubuntu }}" | ||
CONTAINERD_VERSION: "${{ matrix.containerd }}" | ||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- name: Enable ipv4 and ipv6 forwarding | ||
|
@@ -133,7 +165,7 @@ jobs: | |
echo '{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64", "experimental": true, "ip6tables": true}' | sudo tee /etc/docker/daemon.json | ||
sudo systemctl restart docker | ||
- name: "Prepare integration test environment" | ||
run: docker build -t test-integration-ipv6 --target test-integration-ipv6 --build-arg UBUNTU_VERSION=${UBUNTU_VERSION} --build-arg CONTAINERD_VERSION=${CONTAINERD_VERSION} . | ||
run: docker build -t test-integration --target test-integration --build-arg UBUNTU_VERSION=${UBUNTU_VERSION} --build-arg CONTAINERD_VERSION=${CONTAINERD_VERSION} . | ||
- name: "Remove snap loopback devices (conflicts with our loopback devices in TestRunDevice)" | ||
run: | | ||
sudo systemctl disable --now snapd.service snapd.socket | ||
|
@@ -151,20 +183,15 @@ jobs: | |
docker run --privileged --rm tonistiigi/binfmt --install linux/arm/v7 | ||
- name: "Run integration tests" | ||
# The nested IPv6 network inside docker and qemu is complex and needs a bunch of sysctl config. | ||
# Therefore it's hard to debug why the IPv6 tests fail in such an isolation layer. | ||
# Therefore, it's hard to debug why the IPv6 tests fail in such an isolation layer. | ||
# On the other side, using the host network is easier at configuration. | ||
# Besides, each job is running on a different instance, which means using host network here | ||
# is safe and has no side effects on others. | ||
uses: nick-fields/retry@v3 | ||
with: | ||
timeout_minutes: 30 | ||
max_attempts: 2 | ||
retry_on: error | ||
command: docker run --network host -t --rm --privileged test-integration-ipv6 | ||
run: docker run --network host -t --rm --privileged test-integration ./test-integration.sh -test.only-ipv6 | ||
|
||
test-integration-rootless: | ||
timeout-minutes: "${{ fromJSON(env.LONG_TIMEOUT) }}" | ||
runs-on: "ubuntu-${{ matrix.ubuntu }}" | ||
timeout-minutes: 60 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
|
@@ -207,7 +234,7 @@ jobs: | |
} | ||
EOT | ||
sudo systemctl restart apparmor.service | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- name: "Register QEMU (tonistiigi/binfmt)" | ||
|
@@ -230,21 +257,18 @@ jobs: | |
fi | ||
echo "WORKAROUND_ISSUE_622=${WORKAROUND_ISSUE_622}" >> "$GITHUB_ENV" | ||
- name: "Test (network driver=slirp4netns, port driver=builtin)" | ||
uses: nick-fields/retry@v3 | ||
with: | ||
timeout_minutes: 30 | ||
max_attempts: 2 | ||
retry_on: error | ||
command: docker run -t --rm --privileged -e WORKAROUND_ISSUE_622=${WORKAROUND_ISSUE_622} ${TEST_TARGET} | ||
run: docker run -t --rm --privileged -e WORKAROUND_ISSUE_622=${WORKAROUND_ISSUE_622} ${TEST_TARGET} /test-integration-rootless.sh ./test-integration.sh | ||
- name: "Test (network driver=slirp4netns, port driver=builtin) (flaky)" | ||
run: docker run -t --rm --privileged -e WORKAROUND_ISSUE_622=${WORKAROUND_ISSUE_622} ${TEST_TARGET} /test-integration-rootless.sh ./test-integration.sh -test.only-flaky | ||
|
||
cross: | ||
timeout-minutes: "${{ fromJSON(env.SHORT_TIMEOUT) }}" | ||
runs-on: ubuntu-24.04 | ||
timeout-minutes: 40 | ||
strategy: | ||
matrix: | ||
go-version: ["1.22.x", "1.23.x"] | ||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- uses: actions/setup-go@v5 | ||
|
@@ -256,10 +280,10 @@ jobs: | |
run: GO_VERSION="$(echo ${{ matrix.go-version }} | sed -e s/.x//)" make binaries | ||
|
||
test-integration-docker-compatibility: | ||
timeout-minutes: "${{ fromJSON(env.LONG_TIMEOUT) }}" | ||
runs-on: ubuntu-24.04 | ||
timeout-minutes: 45 | ||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- uses: actions/setup-go@v5 | ||
|
@@ -284,31 +308,22 @@ jobs: | |
- name: "Prepare integration test environment" | ||
run: | | ||
sudo apt-get install -y expect | ||
go install -v gotest.tools/gotestsum@v1 | ||
- name: "Ensure that the integration test suite is compatible with Docker" | ||
uses: nick-fields/retry@v3 | ||
with: | ||
timeout_minutes: 30 | ||
max_attempts: 2 | ||
retry_on: error | ||
# See https://github.com/containerd/nerdctl/blob/main/docs/testing/README.md#about-parallelization | ||
command: go test -p 1 -timeout 20m -v -exec sudo ./cmd/nerdctl/... -args -test.target=docker -test.allow-kill-daemon | ||
run: ./test-integration.sh -test.target=docker | ||
- name: "Ensure that the IPv6 integration test suite is compatible with Docker" | ||
uses: nick-fields/retry@v3 | ||
with: | ||
timeout_minutes: 30 | ||
max_attempts: 2 | ||
retry_on: error | ||
# See https://github.com/containerd/nerdctl/blob/main/docs/testing/README.md#about-parallelization | ||
command: go test -p 1 -timeout 20m -v -exec sudo ./cmd/nerdctl/... -args -test.target=docker -test.allow-kill-daemon -test.only-ipv6 | ||
run: ./test-integration.sh -test.target=docker -test.only-ipv6 | ||
- name: "Ensure that the integration test suite is compatible with Docker (flaky only)" | ||
run: ./test-integration.sh -test.target=docker -test.only-flaky | ||
|
||
test-integration-windows: | ||
timeout-minutes: "${{ fromJSON(env.LONG_TIMEOUT) }}" | ||
runs-on: windows-2022 | ||
timeout-minutes: 30 | ||
defaults: | ||
run: | ||
shell: bash | ||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
- uses: actions/setup-go@v5 | ||
|
@@ -317,7 +332,8 @@ jobs: | |
cache: true | ||
check-latest: true | ||
- run: go install ./cmd/nerdctl | ||
- uses: actions/[email protected] | ||
- run: go install -v gotest.tools/gotestsum@v1 | ||
- uses: actions/checkout@v4 | ||
with: | ||
repository: containerd/containerd | ||
ref: v1.7.22 | ||
|
@@ -330,19 +346,21 @@ jobs: | |
env: | ||
ctrdVersion: 1.7.22 | ||
run: powershell hack/configure-windows-ci.ps1 | ||
# TODO: Run unit tests | ||
- name: "Run integration tests" | ||
# See https://github.com/containerd/nerdctl/blob/main/docs/testing/README.md#about-parallelization | ||
run: go test -p 1 -v ./cmd/nerdctl/... | ||
run: | | ||
./test-integration.sh | ||
- name: "Run integration tests (flaky)" | ||
run: | | ||
./test-integration.sh -test.only-flaky | ||
test-integration-freebsd: | ||
timeout-minutes: "${{ fromJSON(env.LONG_TIMEOUT) }}" | ||
name: FreeBSD | ||
# ubuntu-24.04 lacks the vagrant package | ||
runs-on: ubuntu-22.04 | ||
timeout-minutes: 20 | ||
|
||
steps: | ||
- uses: actions/checkout@v4.2.1 | ||
- uses: actions/checkout@v4 | ||
- uses: actions/cache@v4 | ||
with: | ||
path: /root/.vagrant.d | ||
|
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
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
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
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
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
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
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
Oops, something went wrong.