Skip to content

Commit 5a93e04

Browse files
committed
Proofing
Signed-off-by: apostasie <[email protected]>
1 parent a3f85af commit 5a93e04

File tree

14 files changed

+475
-33
lines changed

14 files changed

+475
-33
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
name: proofing
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- 'release/**'
8+
pull_request:
9+
10+
env:
11+
GOTOOLCHAIN: local
12+
13+
jobs:
14+
proofing:
15+
name: "proofing"
16+
timeout-minutes: 15
17+
runs-on: ubuntu-24.04
18+
defaults:
19+
run:
20+
shell: bash
21+
steps:
22+
- name: "Checkout project"
23+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
24+
with:
25+
fetch-depth: 1
26+
27+
- name: "Install go"
28+
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
29+
with:
30+
go-version: 1.24
31+
check-latest: true
32+
33+
- name: setup
34+
run: |
35+
set -x
36+
37+
CLI=docker ./mod/proofing/spoof.sh server::start ./pkg/testutil/images.env
38+
39+
# Check the server is reachable
40+
curl -iv https://proofing:443/v2 || true
41+
42+
# Restart services so they catch-up on the system store changes?
43+
sudo systemctl stop containerd || true
44+
sudo systemctl start containerd || true
45+
systemctl --user stop containerd || true
46+
systemctl --user start containerd || true
47+
sudo systemctl stop docker || true
48+
sudo systemctl start docker || true
49+
50+
make binaries
51+
sudo -E PATH="_output:$PATH" nerdctl pull debian
52+
sudo -E PATH="_output:$PATH" nerdctl tag debian proofing:443/debian || true
53+
sudo -E PATH="_output:$PATH" nerdctl --insecure-registry push proofing:443/debian || true
54+
sudo -E PATH="_output:$PATH" nerdctl push proofing:443/debian || true
55+
56+
PATH="_output:$PATH" nerdctl pull debian
57+
PATH="_output:$PATH" nerdctl tag debian proofing:443/debian || true
58+
PATH="_output:$PATH" nerdctl --insecure-registry push proofing:443/debian || true
59+
PATH="_output:$PATH" nerdctl push proofing:443/debian || true
60+
61+
# sudo -E PATH="_output:$PATH" ./mod/proofing/spoof.sh server::seed ./pkg/testutil/images.env
62+
- name: test in container
63+
run: |
64+
set -x
65+
66+
docker run -ti debian bash -c -- '
67+
ip="$(cat /etc/hosts | grep proofing | awk '{print $1}')"
68+
./mod/proofing/spoof.sh guest::configure ./pkg/testutil/images.env "$ip"
69+
curl -iv "https://docker.io/v2"
70+
curl -iv "https://proofing/v2"
71+
'

cmd/nerdctl/builder/builder_builder_test.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/containerd/nerdctl/mod/tigron/test"
3131

3232
"github.com/containerd/nerdctl/v2/pkg/buildkitutil"
33+
"github.com/containerd/nerdctl/v2/pkg/referenceutil"
3334
"github.com/containerd/nerdctl/v2/pkg/testutil"
3435
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
3536
)
@@ -152,14 +153,19 @@ CMD ["echo", "nerdctl-builder-debug-test-string"]`, testutil.CommonImage)
152153
// FIXME: this test should be rewritten to dynamically retrieve the ids, and use images
153154
// available on all platforms
154155
oldImage := testutil.BusyboxImage
155-
oldImageSha := "7b3ccabffc97de872a30dfd234fd972a66d247c8cfc69b0550f276481852627c"
156+
parsedOldImage, err := referenceutil.Parse(oldImage)
157+
assert.NilError(helpers.T(), err)
158+
oldImageSha := parsedOldImage.Digest.String()
159+
156160
newImage := testutil.AlpineImage
157-
newImageSha := "ec14c7992a97fc11425907e908340c6c3d6ff602f5f13d899e6b7027c9b4133a"
161+
parsedNewImage, err := referenceutil.Parse(newImage)
162+
assert.NilError(helpers.T(), err)
163+
newImageSha := parsedNewImage.Digest.String()
158164

159165
helpers.Ensure("pull", "--quiet", oldImage)
160-
helpers.Ensure("tag", oldImage, newImage)
166+
helpers.Ensure("tag", oldImage, parsedNewImage.Domain+"/"+parsedNewImage.Path+":"+parsedNewImage.Tag)
161167

162-
dockerfile := fmt.Sprintf(`FROM %s`, newImage)
168+
dockerfile := fmt.Sprintf(`FROM %s`, parsedNewImage.Domain+"/"+parsedNewImage.Path+":"+parsedNewImage.Tag)
163169
data.Temp().Save(dockerfile, "Dockerfile")
164170
data.Labels().Set("oldImageSha", oldImageSha)
165171
data.Labels().Set("newImageSha", newImageSha)

cmd/nerdctl/container/container_run_mount_linux_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/containerd/containerd/v2/core/mount"
3030
"github.com/containerd/nerdctl/mod/tigron/expect"
3131
"github.com/containerd/nerdctl/mod/tigron/test"
32+
"github.com/containerd/nerdctl/mod/tigron/tig"
3233

3334
"github.com/containerd/nerdctl/v2/cmd/nerdctl/helpers"
3435
"github.com/containerd/nerdctl/v2/pkg/rootlessutil"
@@ -307,7 +308,7 @@ func TestRunBindMountTmpfs(t *testing.T) {
307308
}
308309

309310
func mountExistsWithOpt(mountPoint, mountOpt string) test.Comparator {
310-
return func(stdout, info string, t *testing.T) {
311+
return func(stdout string, t tig.T) {
311312
lines := strings.Split(strings.TrimSpace(stdout), "\n")
312313
mountOutput := []string{}
313314
for _, line := range lines {

cmd/nerdctl/image/image_history_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,22 +134,22 @@ func TestImageHistory(t *testing.T) {
134134
Expected: test.Expects(0, nil, func(stdout string, t tig.T) {
135135
history, err := decode(stdout)
136136
assert.NilError(t, err, "decode should not fail")
137-
assert.Equal(t, history[1].Snapshot, "sha256:56bf55b8eed1f0b4794a30386e4d1d3da949c25bcb5155e898097cd75dc77c2a")
137+
assert.Equal(t, history[1].Snapshot, "sha256:a16e98724c05975ee8c40d8fe389c3481373d34ab20a1cf52ea2accc43f71f4c")
138138
assert.Equal(t, history[1].CreatedBy, "/bin/sh -c #(nop) ADD file:3b16ffee2b26d8af5db152fcc582aaccd9e1ec9e3343874e9969a205550fe07d in / ")
139139
}),
140140
},
141141
{
142142
Description: "Quiet has no effect with format, so, go no-json, no-trunc",
143143
Command: test.Command("image", "history", "--human=false", "--no-trunc", "--quiet", testutil.CommonImage),
144144
Expected: test.Expects(0, nil, func(stdout string, t tig.T) {
145-
assert.Equal(t, stdout, "<missing>\nsha256:56bf55b8eed1f0b4794a30386e4d1d3da949c25bcb5155e898097cd75dc77c2a\n")
145+
assert.Equal(t, stdout, "<missing>\nsha256:a16e98724c05975ee8c40d8fe389c3481373d34ab20a1cf52ea2accc43f71f4c\n")
146146
}),
147147
},
148148
{
149149
Description: "With quiet, trunc has no effect",
150150
Command: test.Command("image", "history", "--human=false", "--no-trunc", "--quiet", testutil.CommonImage),
151151
Expected: test.Expects(0, nil, func(stdout string, t tig.T) {
152-
assert.Equal(t, stdout, "<missing>\nsha256:56bf55b8eed1f0b4794a30386e4d1d3da949c25bcb5155e898097cd75dc77c2a\n")
152+
assert.Equal(t, stdout, "<missing>\nsha256:a16e98724c05975ee8c40d8fe389c3481373d34ab20a1cf52ea2accc43f71f4c\n")
153153
}),
154154
},
155155
},

cmd/nerdctl/image/image_pull_linux_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/containerd/nerdctl/mod/tigron/test"
3030
"github.com/containerd/nerdctl/mod/tigron/tig"
3131

32+
"github.com/containerd/nerdctl/v2/pkg/referenceutil"
3233
"github.com/containerd/nerdctl/v2/pkg/testutil"
3334
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
3435
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest/registry"
@@ -114,6 +115,7 @@ func TestImagePullPlainHttpWithDefaultPort(t *testing.T) {
114115
nerdtest.Setup()
115116

116117
var reg *registry.Server
118+
im, _ := referenceutil.Parse(testutil.CommonImage)
117119
dockerfile := fmt.Sprintf(`FROM %s
118120
CMD ["echo", "nerdctl-build-test-string"]
119121
`, testutil.CommonImage)
@@ -131,7 +133,7 @@ CMD ["echo", "nerdctl-build-test-string"]
131133
reg = nerdtest.RegistryWithNoAuth(data, helpers, 80, false)
132134
reg.Setup(data, helpers)
133135
testImageRef := fmt.Sprintf("%s/%s:%s",
134-
reg.IP.String(), data.Identifier(), strings.Split(testutil.CommonImage, ":")[1])
136+
reg.IP.String(), data.Identifier(), im.Tag)
135137
buildCtx := data.Temp().Path()
136138

137139
helpers.Ensure("build", "-t", testImageRef, buildCtx)

cmd/nerdctl/image/image_push_linux_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/containerd/nerdctl/mod/tigron/test"
3030
"github.com/containerd/nerdctl/mod/tigron/tig"
3131

32+
"github.com/containerd/nerdctl/v2/pkg/referenceutil"
3233
"github.com/containerd/nerdctl/v2/pkg/testutil"
3334
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
3435
"github.com/containerd/nerdctl/v2/pkg/testutil/testregistry"
@@ -38,6 +39,7 @@ func TestPush(t *testing.T) {
3839
nerdtest.Setup()
3940

4041
var registryNoAuthHTTPRandom, registryNoAuthHTTPDefault, registryTokenAuthHTTPSRandom *testregistry.RegistryServer
42+
commonImage, _ := referenceutil.Parse(testutil.CommonImage)
4143

4244
testCase := &test.Case{
4345
Require: require.Linux,
@@ -67,7 +69,7 @@ func TestPush(t *testing.T) {
6769
Setup: func(data test.Data, helpers test.Helpers) {
6870
helpers.Ensure("pull", "--quiet", testutil.CommonImage)
6971
testImageRef := fmt.Sprintf("%s:%d/%s:%s",
70-
registryNoAuthHTTPRandom.IP.String(), registryNoAuthHTTPRandom.Port, data.Identifier(), strings.Split(testutil.CommonImage, ":")[1])
72+
registryNoAuthHTTPRandom.IP.String(), registryNoAuthHTTPRandom.Port, data.Identifier(), commonImage.Tag)
7173
data.Labels().Set("testImageRef", testImageRef)
7274
helpers.Ensure("tag", testutil.CommonImage, testImageRef)
7375
},

hack/provisioning/linux/cni.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,4 @@ provision::cni(){
4848
cd - >/dev/null
4949
}
5050

51-
provision::cni "$1" "$2" "$3"
51+
provision::cni "$@"

hack/provisioning/linux/containerd.sh

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,23 @@ provision::containerd::uninstall(){
4242
provision::containerd::rootful(){
4343
local version="$1"
4444
local arch="$2"
45-
local bin_sha="$3"
46-
local service_sha="$4"
4745

4846
# Be tolerant with passed versions - with or without leading "v"
4947
[ "${version:0:1}" != "v" ] || version="${version:1}"
5048

5149
cd "$(fs::mktemp "containerd-install")"
5250

5351
# Get the binary and install it
54-
http::get::secure \
52+
http::get \
5553
containerd.tar.gz \
56-
https://github.com/containerd/containerd/releases/download/v"$version"/containerd-"$version"-linux-"$arch".tar.gz \
57-
"$bin_sha"
54+
https://github.com/containerd/containerd/releases/download/v"$version"/containerd-"$version"-linux-"$arch".tar.gz
5855

59-
sudo tar::expand /usr/local containerd.tar.gz
56+
sudo tar -C /usr/local -xvf containerd.tar.gz
6057

6158
# Get the systemd unit
62-
http::get::secure \
59+
http::get \
6360
containerd.service \
64-
https://raw.githubusercontent.com/containerd/containerd/refs/tags/v"$version"/containerd.service \
65-
"$service_sha"
61+
https://raw.githubusercontent.com/containerd/containerd/refs/tags/v"$version"/containerd.service
6662

6763
sudo cp containerd.service /lib/systemd/system/containerd.service
6864

@@ -73,4 +69,4 @@ provision::containerd::rootful(){
7369
cd - >/dev/null || true
7470
}
7571

76-
provision::containerd::rootful "$1" "$2" "$3" "$4"
72+
provision::containerd::rootful "$@"

hack/test-integration.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ if [[ "$(id -u)" = "0" ]]; then
2626
fi
2727
fi
2828

29+
# If we are being asked to use the proofing system, configure it
30+
if [ "${PROOFING_IP:-}" != "" ]; then
31+
"$root"/../mod/proofing/spoof.sh guest::configure "$root"/pkg/testutil/images.env "$PROOFING_IP"
32+
fi
33+
2934
readonly timeout="60m"
3035
readonly retries="2"
3136
readonly needsudo="${WITH_SUDO:-}"

mod/proofing/.env

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# This is the minimal env file you need to have
2+
# You must at least point to a usable docker registry image
3+
REGISTRY=registry:3.0.0@sha256:1fc7de654f2ac1247f0b67e8a459e273b0993be7d2beda1f3f56fbf1001ed3e7
4+
5+
# You can then add below whatever image you want mocked, for any origin.
6+
# Short syntax is accepted (eg: `busybox`, or `library:busybox`) though you MUST provide a tag AND a digest
7+
8+
# Examples:
9+
# NANOSERVER=mcr.microsoft.com/windows/nanoserver:ltsc2022@sha256:16b61ffac72961551c4b5312a7ab3da7c3dc3258510e40bee309e6e51f006ac6
10+
# DEBIAN=debian:bookworm-slim@sha256:b1211f6d19afd012477bd34fdcabb6b663d680e0f4b0537da6e6b0fd057a3ec3

0 commit comments

Comments
 (0)