Skip to content

Commit e72dcee

Browse files
authored
Merge pull request #11 from AkihiroSuda/dev
--build: build e2e requirements
2 parents d4c644b + 12a160e commit e72dcee

File tree

5 files changed

+227
-126
lines changed

5 files changed

+227
-126
lines changed

.github/workflows/main.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ on:
77
pull_request:
88
jobs:
99
main:
10-
runs-on: ubuntu-22.04
10+
runs-on: ubuntu-24.04
1111
steps:
1212
- uses: actions/checkout@v4
1313
with:
1414
fetch-depth: 1
15-
- uses: actions/setup-go@v4
15+
- uses: actions/setup-go@v5
1616
with:
17-
go-version: 1.21.x
17+
go-version: 1.24.x
1818
- run: go test -v ./...
1919
- run: go install .

README.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ This driver was written for the sake of running the tests with [rootless kind](h
1818
```bash
1919
go install github.com/rootless-containers/kubetest2-kindinv@master
2020

21-
cd ${GOPATH}/src/k8s.io/kubernetes
22-
make WHAT=test/e2e/e2e.test
23-
make ginkgo
24-
make kubectl
25-
2621
kubetest2 kindinv \
2722
--run-id=foo \
2823
--gcp-project=${CLOUDSDK_CORE_PROJECT} \

deployer/deployer.go

Lines changed: 63 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"os"
3030
"os/exec"
3131
"path/filepath"
32+
"runtime"
3233
"strconv"
3334
"strings"
3435
"time"
@@ -40,6 +41,8 @@ import (
4041
"sigs.k8s.io/boskos/client"
4142
"sigs.k8s.io/kubetest2/pkg/artifacts"
4243
"sigs.k8s.io/kubetest2/pkg/boskos"
44+
ktexec "sigs.k8s.io/kubetest2/pkg/exec"
45+
"sigs.k8s.io/kubetest2/pkg/fs"
4346
"sigs.k8s.io/kubetest2/pkg/types"
4447
)
4548

@@ -524,7 +527,7 @@ func (d *deployer) Down() error {
524527
if err := d.DumpClusterLogs(); err != nil {
525528
klog.Warningf("Dumping cluster logs at the begin of Down() failed: %s", err)
526529
}
527-
530+
528531
instName, fwRuleName, nwName := d.instanceName(), d.firewallRuleName(), d.networkName()
529532
gcloudCmds := [][]string{
530533
{"--quiet", "compute", "instances", "delete", "--zone=" + d.GCPZone, instName},
@@ -579,36 +582,42 @@ func (d *deployer) DumpClusterLogs() error {
579582
return nil
580583
}
581584

582-
func (d *deployer) Build() error {
583-
ctx := context.TODO()
584-
runDir := d.commonOptions.RunDir()
585+
// buildE2ERequirements was taken from https://github.com/kubernetes-sigs/kubetest2/pull/275
586+
func (d *deployer) buildE2ERequirements() error {
587+
const target = "all"
588+
klog.V(0).Infof("Build(): build e2e requirements...\n")
589+
e2ePath := "test/e2e/e2e.test"
590+
kubectlPath := "cmd/kubectl"
591+
ginkgoPath := "vendor/github.com/onsi/ginkgo/v2/ginkgo"
592+
593+
// make sure we have e2e requirements
594+
cmd := ktexec.Command("make", target,
595+
fmt.Sprintf("WHAT=%s %s %s", kubectlPath, e2ePath, ginkgoPath))
596+
cmd.SetDir(d.KubeRoot)
597+
ktexec.InheritOutput(cmd)
598+
if err := cmd.Run(); err != nil {
599+
return err
600+
}
585601

586-
// Prepare `runDir/{e2e.test, ginkgo}`
587-
for _, f := range []string{"e2e.test", "ginkgo", "kubectl"} {
588-
src := filepath.Join(d.KubeRoot, "_output", "bin", f)
589-
if _, err := os.Stat(src); err != nil {
590-
if !errors.Is(err, os.ErrNotExist) {
591-
return err
592-
}
593-
switch f {
594-
case "e2e.test":
595-
klog.Warning(fmt.Errorf("%w (Hint: `make WHAT=test/e2e/e2e.test -C $(go env GOPATH)/src/k8s.io/kubernetes`)", err))
596-
continue
597-
case "ginkgo":
598-
klog.Warning(fmt.Errorf("%w (Hint: `make ginkgo -C $(go env GOPATH)/src/k8s.io/kubernetes`)", err))
599-
continue
600-
default:
601-
klog.Warning(err)
602-
continue
603-
}
604-
}
605-
dst := filepath.Join(runDir, f)
606-
cmd := exec.CommandContext(ctx, "cp", "-af", src, dst)
607-
if err := execCmd(cmd); err != nil {
608-
return err
602+
//move files
603+
const dockerizedOutput = "_output/dockerized"
604+
for _, binary := range commonTestBinaries {
605+
source := filepath.Join(d.KubeRoot, "_output/bin", binary)
606+
dest := filepath.Join(d.KubeRoot, dockerizedOutput, "bin", runtime.GOOS, runtime.GOARCH, binary)
607+
if err := fs.CopyFile(source, dest); err != nil {
608+
klog.Warningf("failed to copy %s to %s: %v", source, dest, err)
609609
}
610610
}
611611

612+
storeCommonBinaries(d.KubeRoot, d.commonOptions.RunDir())
613+
return nil
614+
}
615+
616+
func (d *deployer) Build() error {
617+
ctx := context.TODO()
618+
if err := d.buildE2ERequirements(); err != nil {
619+
return fmt.Errorf("failed to build e2e requirements: %w", err)
620+
}
612621
isUp, err := d.IsUp()
613622
if err != nil {
614623
return err
@@ -689,3 +698,30 @@ func bindFlags(d *deployer) *pflag.FlagSet {
689698

690699
return flags
691700
}
701+
702+
// commonTestBinaries is from https://github.com/kubernetes-sigs/kubetest2/blob/1ad71e1e364e6a6e75b102194eaed191fbae630c/pkg/build/build.go#L76-L82
703+
var commonTestBinaries = []string{
704+
"kubectl",
705+
"e2e.test",
706+
"ginkgo",
707+
}
708+
709+
// storeCommonBinaries will best effort try to store commonly built binaries
710+
// to the output directory.
711+
// From https://github.com/kubernetes-sigs/kubetest2/blob/1ad71e1e364e6a6e75b102194eaed191fbae630c/pkg/build/build.go#L84-L101
712+
func storeCommonBinaries(kuberoot string, outroot string) {
713+
const dockerizedOutput = "_output/dockerized"
714+
root := filepath.Join(kuberoot, dockerizedOutput, "bin", runtime.GOOS, runtime.GOARCH)
715+
for _, binary := range commonTestBinaries {
716+
source := filepath.Join(root, binary)
717+
dest := filepath.Join(outroot, binary)
718+
if _, err := os.Stat(source); err == nil {
719+
klog.V(2).Infof("copying %s to %s ...", source, dest)
720+
if err := fs.CopyFile(source, dest); err != nil {
721+
klog.Warningf("failed to copy %s to %s: %v", source, dest, err)
722+
}
723+
} else {
724+
klog.Warningf("could not find %s: %v", source, err)
725+
}
726+
}
727+
}

go.mod

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,53 @@
11
module github.com/rootless-containers/kubetest2-kindinv
22

3-
go 1.21
3+
go 1.24.0
44

55
require (
6-
github.com/octago/sflags v0.2.0
7-
github.com/spf13/pflag v1.0.5
8-
k8s.io/klog/v2 v2.110.1
9-
sigs.k8s.io/boskos v0.0.0-20231114232203-490321190b7d
10-
sigs.k8s.io/kubetest2 v0.0.0-20231218114518-71238a9645df
6+
github.com/octago/sflags v0.3.1
7+
github.com/spf13/pflag v1.0.7
8+
k8s.io/klog/v2 v2.130.1
9+
sigs.k8s.io/boskos v0.0.0-20250612085457-e9e53220ffb6
10+
sigs.k8s.io/kubetest2 v0.0.0-20250722085027-1ad71e1e364e
1111
)
1212

1313
require (
1414
github.com/beorn7/perks v1.0.1 // indirect
15-
github.com/cespare/xxhash/v2 v2.2.0 // indirect
16-
github.com/go-logr/logr v1.4.1 // indirect
17-
github.com/golang/protobuf v1.5.3 // indirect
18-
github.com/google/uuid v1.5.0 // indirect
15+
github.com/bombsimon/logrusr/v4 v4.1.0 // indirect
16+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
17+
github.com/fsnotify/fsnotify v1.9.0 // indirect
18+
github.com/go-logr/logr v1.4.3 // indirect
19+
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
20+
github.com/google/uuid v1.6.0 // indirect
1921
github.com/hashicorp/errwrap v1.1.0 // indirect
2022
github.com/hashicorp/go-multierror v1.1.1 // indirect
2123
github.com/inconshreveable/mousetrap v1.1.0 // indirect
2224
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
23-
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
24-
github.com/prometheus/client_golang v1.15.1 // indirect
25-
github.com/prometheus/client_model v0.4.0 // indirect
26-
github.com/prometheus/common v0.42.0 // indirect
27-
github.com/prometheus/procfs v0.9.0 // indirect
28-
github.com/rogpeppe/go-internal v1.12.0 // indirect
29-
github.com/sirupsen/logrus v1.9.0 // indirect
30-
github.com/spf13/cobra v1.8.0 // indirect
31-
go4.org v0.0.0-20201209231011-d4a079459e60 // indirect
32-
golang.org/x/sys v0.13.0 // indirect
33-
google.golang.org/protobuf v1.30.0 // indirect
34-
gopkg.in/yaml.v2 v2.4.0 // indirect
35-
k8s.io/apimachinery v0.27.4 // indirect
36-
k8s.io/test-infra v0.0.0-20230925162246-48fa0b922a3c // indirect
37-
k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
38-
sigs.k8s.io/yaml v1.3.0 // indirect
25+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
26+
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
27+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
28+
github.com/prometheus/client_golang v1.23.0 // indirect
29+
github.com/prometheus/client_model v0.6.2 // indirect
30+
github.com/prometheus/common v0.65.0 // indirect
31+
github.com/prometheus/procfs v0.17.0 // indirect
32+
github.com/sagikazarmark/locafero v0.10.0 // indirect
33+
github.com/sirupsen/logrus v1.9.3 // indirect
34+
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
35+
github.com/spf13/afero v1.14.0 // indirect
36+
github.com/spf13/cast v1.9.2 // indirect
37+
github.com/spf13/cobra v1.9.1 // indirect
38+
github.com/spf13/viper v1.20.1 // indirect
39+
github.com/subosito/gotenv v1.6.0 // indirect
40+
go.yaml.in/yaml/v2 v2.4.2 // indirect
41+
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
42+
golang.org/x/net v0.42.0 // indirect
43+
golang.org/x/sys v0.34.0 // indirect
44+
golang.org/x/text v0.27.0 // indirect
45+
golang.org/x/tools v0.35.0 // indirect
46+
google.golang.org/protobuf v1.36.6 // indirect
47+
gopkg.in/yaml.v3 v3.0.1 // indirect
48+
k8s.io/apimachinery v0.33.3 // indirect
49+
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
50+
sigs.k8s.io/controller-runtime v0.21.0 // indirect
51+
sigs.k8s.io/prow v0.0.0-20250709203327-d01b8af18f00 // indirect
52+
sigs.k8s.io/yaml v1.6.0 // indirect
3953
)

0 commit comments

Comments
 (0)