40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/moby/buildkit/client/llb"
|
|
"github.com/moby/buildkit/client/llb/llbbuild"
|
|
"github.com/moby/buildkit/util/system"
|
|
)
|
|
|
|
const url = "https://gist.githubusercontent.com/tonistiigi/03b4049f8cc3de059bd2a1a1d8643714/raw/b5960995d570d8c6d94db527e805edc6d5854268/buildprs.go"
|
|
|
|
func main() {
|
|
build := goBuildBase().
|
|
Run(llb.Shlex("apk add --no-cache curl")).
|
|
Run(llb.Shlexf("curl -o /buildprs.go \"%s\"", url))
|
|
|
|
buildkitRepo := "github.com/moby/buildkit"
|
|
|
|
build = build.Run(llb.Shlex("sh -c \"go run /buildprs.go > /out/buildkit.llb.definition\""))
|
|
build.AddMount("/go/src/"+buildkitRepo, llb.Git(buildkitRepo, "master"))
|
|
pb := build.AddMount("/out", llb.Scratch())
|
|
|
|
built := pb.With(llbbuild.Build())
|
|
|
|
dt, err := llb.Image("docker.io/library/alpine:latest").Run(llb.Shlex("ls -l /out"), llb.AddMount("/out", built, llb.Readonly)).Marshal()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
llb.WriteTo(dt, os.Stdout)
|
|
}
|
|
|
|
func goBuildBase() llb.State {
|
|
goAlpine := llb.Image("docker.io/library/golang:1.9-alpine")
|
|
return goAlpine.
|
|
AddEnv("PATH", "/usr/local/go/bin:"+system.DefaultPathEnv).
|
|
AddEnv("GOPATH", "/go").
|
|
Run(llb.Shlex("apk add --no-cache g++ linux-headers make")).Root()
|
|
}
|