diff --git a/.github/workflows/update-builder.yaml b/.github/workflows/update-builder.yaml index b14707d1..7960647a 100644 --- a/.github/workflows/update-builder.yaml +++ b/.github/workflows/update-builder.yaml @@ -16,4 +16,13 @@ jobs: - name: Build and Push env: GITHUB_TOKEN: ${{ github.token }} - run: make wf-update-builder + run: | + docker run -d -p 5000:5000 --name registry registry:2.7 + echo '{"insecure-registries" : "localhost:5000" }' | \ + sudo tee /etc/docker/daemon.json + mkdir -p "$HOME/.config/containers/" + echo -e '\n[[registry]]\nlocation = "localhost:5000"\ninsecure = true\n' >> \ + "$HOME/.config/containers/registries.conf" + skopeo login ghcr.io -u gh-action -p "$GITHUB_TOKEN" + make wf-update-builder + diff --git a/hack/cmd/update-builder/main.go b/hack/cmd/update-builder/main.go index 8c14b160..522e6f5d 100644 --- a/hack/cmd/update-builder/main.go +++ b/hack/cmd/update-builder/main.go @@ -132,6 +132,11 @@ func buildBuilderImage(ctx context.Context, variant, arch string) (string, error return "", fmt.Errorf("cannot parse builder.toml: %w", err) } + err = fixupStacks(ctx, &builderConfig) + if err != nil { + return "", fmt.Errorf("cannot fix up stacks: %w", err) + } + // temporary fix, for some reason paketo does not distribute several buildpacks for ARM64 // we need ot fix that up if arch == "arm64" { @@ -1038,3 +1043,47 @@ func fixupGoDistPkgRefs(buildpackToml, arch string) error { return nil } + +func fixupStacks(ctx context.Context, builderConfig *builder.Config) error { + var err error + + oldBuild := builderConfig.Stack.BuildImage + parts := strings.Split(oldBuild, "/") + newBuilder := "localhost:5000/" + parts[len(parts)-1] + err = copyImage(ctx, oldBuild, newBuilder) + if err != nil { + return fmt.Errorf("cannot mirror build image: %w", err) + } + builderConfig.Stack.BuildImage = newBuilder + builderConfig.Build.Image = newBuilder + + oldRun := builderConfig.Stack.RunImage + parts = strings.Split(oldRun, "/") + newRun := "ghcr.io/knative/" + parts[len(parts)-1] + err = copyImage(ctx, oldRun, newRun) + if err != nil { + return fmt.Errorf("cannot mirror build image: %w", err) + } + + builderConfig.Stack.RunImage = newRun + builderConfig.Run.Images = []builder.RunImageConfig{{ + Image: newRun, + }} + return nil +} + +func copyImage(ctx context.Context, srcRef, destRef string) error { + _, _ = fmt.Fprintf(os.Stderr, "copying: %s => %s\n", srcRef, destRef) + cmd := exec.CommandContext(ctx, "skopeo", "copy", + "--multi-arch=all", + "docker://"+srcRef, + "docker://"+destRef, + ) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + err := cmd.Run() + if err != nil { + return fmt.Errorf("error while running skopeo: %w", err) + } + return nil +}