mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	hack: base build scripts
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
		
							
								
								
									
										1
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | FROM alpine | ||||||
							
								
								
									
										13
									
								
								gometalinter.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								gometalinter.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | { | ||||||
|  |   "Vendor": true, | ||||||
|  |   "Deadline": "8m", | ||||||
|  |   "Exclude": [".*.pb.go"], | ||||||
|  |   "DisableAll": true, | ||||||
|  |   "Enable": [ | ||||||
|  |     "gofmt", | ||||||
|  |     "goimports", | ||||||
|  |     "ineffassign", | ||||||
|  |     "vet", | ||||||
|  |     "deadcode" | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								hack/dockerfiles/lint.Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								hack/dockerfiles/lint.Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | # syntax=docker/dockerfile:1.0-experimental | ||||||
|  |  | ||||||
|  | FROM golang:1.12-alpine | ||||||
|  | RUN  apk add --no-cache git | ||||||
|  | RUN  go get -u gopkg.in/alecthomas/gometalinter.v1 \ | ||||||
|  |   && mv /go/bin/gometalinter.v1 /go/bin/gometalinter \ | ||||||
|  |   && gometalinter --install | ||||||
|  | WORKDIR /go/src/github.com/moby/buildkit | ||||||
|  | RUN --mount=target=/go/src/github.com/tonistiigi/buildx \ | ||||||
|  | 	gometalinter --config=gometalinter.json ./... | ||||||
							
								
								
									
										18
									
								
								hack/dockerfiles/vendor.Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								hack/dockerfiles/vendor.Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | # syntax = docker/dockerfile:1.0-experimental | ||||||
|  | FROM golang:1.12-alpine AS vendored | ||||||
|  | RUN  apk add --no-cache git | ||||||
|  | WORKDIR /src | ||||||
|  | RUN --mount=target=/src,rw \ | ||||||
|  |   --mount=target=/go/pkg/mod,type=cache \ | ||||||
|  |   go mod tidy && go mod vendor && \ | ||||||
|  |   mkdir /out && cp -r go.mod go.sum vendor /out | ||||||
|  |  | ||||||
|  | FROM scratch AS update | ||||||
|  | COPY --from=vendored /out /out | ||||||
|  |  | ||||||
|  | FROM vendored AS validate | ||||||
|  | RUN --mount=target=.,rw \ | ||||||
|  |   git add -A && \ | ||||||
|  |   rm -rf vendor && \ | ||||||
|  |   cp -rf /out/* . && \ | ||||||
|  |   ./hack/validate-vendor check | ||||||
							
								
								
									
										37
									
								
								hack/lint
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								hack/lint
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | . $(dirname $0)/util | ||||||
|  | set -eu -o pipefail -x | ||||||
|  |  | ||||||
|  | : ${CONTINUOUS_INTEGRATION=} | ||||||
|  |  | ||||||
|  | progressFlag="" | ||||||
|  | if [ "$CONTINUOUS_INTEGRATION" == "true" ]; then progressFlag="--progress=plain"; fi | ||||||
|  |  | ||||||
|  | lintDocker() { | ||||||
|  |   export DOCKER_BUILDKIT=1 | ||||||
|  |   iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX) | ||||||
|  |   docker build --iidfile $iidfile -f ./hack/dockerfiles/lint.Dockerfile --force-rm . | ||||||
|  |   iid=$(cat $iidfile) | ||||||
|  |   docker rmi $iid | ||||||
|  |   rm -f $iidfile | ||||||
|  | } | ||||||
|  |  | ||||||
|  | lint() { | ||||||
|  |   buildctl build $progressFlag --frontend=dockerfile.v0 \ | ||||||
|  |     --local context=. --local dockerfile=. \ | ||||||
|  |     --frontend-opt filename=./hack/dockerfiles/lint.Dockerfile | ||||||
|  | } | ||||||
|  |  | ||||||
|  | case $buildmode in | ||||||
|  | "buildkit") | ||||||
|  |   lint | ||||||
|  |   ;; | ||||||
|  | "docker-buildkit") | ||||||
|  |   lintDocker | ||||||
|  |   ;; | ||||||
|  | *) | ||||||
|  | 	echo "buildctl or docker with buildkit support is required" | ||||||
|  |   exit 1 | ||||||
|  |   ;; | ||||||
|  | esac | ||||||
							
								
								
									
										45
									
								
								hack/update-vendor
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										45
									
								
								hack/update-vendor
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | . $(dirname $0)/util | ||||||
|  | set -eu -o pipefail -x | ||||||
|  |  | ||||||
|  | : ${CONTINUOUS_INTEGRATION=} | ||||||
|  |  | ||||||
|  | progressFlag="" | ||||||
|  | if [ "$CONTINUOUS_INTEGRATION" == "true" ]; then progressFlag="--progress=plain"; fi | ||||||
|  |  | ||||||
|  | case $buildmode in | ||||||
|  | "buildkit") | ||||||
|  |    output=$(mktemp -d -t buildctl-output.XXXXXXXXXX) | ||||||
|  |   buildctl build $progressFlag --frontend=dockerfile.v0 --local context=. --local dockerfile=. \ | ||||||
|  |     --frontend-opt target=update \ | ||||||
|  |     --frontend-opt filename=./hack/dockerfiles/vendor.Dockerfile \ | ||||||
|  |     --output type=local,dest=$output | ||||||
|  |   rm -rf ./vendor | ||||||
|  |   cp -R "$output/out/" . | ||||||
|  |   rm -rf $output | ||||||
|  |   ;; | ||||||
|  | *) | ||||||
|  |   iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX) | ||||||
|  |   case $buildmode in | ||||||
|  |   "docker-buildkit") | ||||||
|  |     export DOCKER_BUILDKIT=1 | ||||||
|  |     docker build --iidfile $iidfile -f ./hack/dockerfiles/vendor.Dockerfile --target update --force-rm . | ||||||
|  |     ;; | ||||||
|  |   *) | ||||||
|  | 		echo "buildctl or docker with buildkit support is required" | ||||||
|  | 	  exit 1 | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|  |   iid=$(cat $iidfile) | ||||||
|  |   cid=$(docker create $iid noop) | ||||||
|  |   rm -rf ./vendor | ||||||
|  |  | ||||||
|  |   docker cp $cid:/out/go.mod . | ||||||
|  |   docker cp $cid:/out/go.sum . | ||||||
|  |   docker cp $cid:/out/vendor . | ||||||
|  |  | ||||||
|  |   docker rm $cid | ||||||
|  |   rm -f $iidfile | ||||||
|  |   ;; | ||||||
|  | esac | ||||||
							
								
								
									
										21
									
								
								hack/util
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								hack/util
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | #!/usr/bin/env sh | ||||||
|  |  | ||||||
|  | : ${PREFER_BUILDCTL=} | ||||||
|  | : ${PREFER_LEGACY=} | ||||||
|  |  | ||||||
|  | newerEqualThan() { # $1=minimum wanted version $2=actual-version | ||||||
|  |   [ "$1" = "$(printf "$1\n$2" | sort -V | head -n 1)" ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | buildmode="legacy" | ||||||
|  | if [ "$PREFER_BUILDCTL" = "1" ]; then | ||||||
|  |   buildmode="buildkit"; | ||||||
|  | else | ||||||
|  |   serverVersion=$(docker info --format '{{.ServerVersion}}') | ||||||
|  |   experimental=$(docker info --format '{{.ExperimentalBuild}}') | ||||||
|  |   if [ "$PREFER_LEGACY" != "1" ] && ( newerEqualThan "18.09" $serverVersion || \ | ||||||
|  |     ( newerEqualThan "18.06" $serverVersion && [ "true" = "$experimental" ] ) || \ | ||||||
|  |     [ "$DOCKER_BUILDKIT" = "1" ]); then | ||||||
|  |     buildmode="docker-buildkit"; | ||||||
|  |   fi | ||||||
|  | fi | ||||||
							
								
								
									
										49
									
								
								hack/validate-vendor
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										49
									
								
								hack/validate-vendor
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | #!/usr/bin/env sh | ||||||
|  |  | ||||||
|  | set -eu | ||||||
|  |  | ||||||
|  | : ${CONTINUOUS_INTEGRATION=} | ||||||
|  | : ${DOCKER_BUILDKIT=} | ||||||
|  |  | ||||||
|  | progressFlag="" | ||||||
|  | if [ "$CONTINUOUS_INTEGRATION" = "true" ]; then progressFlag="--progress=plain"; fi | ||||||
|  |  | ||||||
|  | case ${1:-} in | ||||||
|  | '') | ||||||
|  |   . $(dirname $0)/util | ||||||
|  |   case $buildmode in | ||||||
|  |   "buildkit") | ||||||
|  |     buildctl build $progressFlag --frontend=dockerfile.v0 --local context=. --local dockerfile=. --frontend-opt filename=./hack/dockerfiles/vendor.Dockerfile --frontend-opt target=validate | ||||||
|  |     ;; | ||||||
|  |   "docker-buildkit") | ||||||
|  |     export DOCKER_BUILDKIT=1 | ||||||
|  |     iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX) | ||||||
|  |     docker build --iidfile $iidfile -f ./hack/dockerfiles/vendor.Dockerfile --target validate --force-rm . || exit 1 | ||||||
|  |     iid=$(cat $iidfile) | ||||||
|  |     docker rmi $iid | ||||||
|  |     rm -f $iidfile | ||||||
|  |     ;; | ||||||
|  |   *) | ||||||
|  | 		echo "buildkit support is required" | ||||||
|  |     exit 1 | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|  |   ;; | ||||||
|  | check) | ||||||
|  |   status="$(git status --porcelain -- go.mod go.sum vendor 2>/dev/null)" | ||||||
|  |   diffs=$(echo "$status" | grep -v '^[RAD] ' || true) | ||||||
|  |   if [ "$diffs" ]; then | ||||||
|  |       { | ||||||
|  | 	set +x | ||||||
|  |         echo 'The result of "make vendor" differs' | ||||||
|  |         echo | ||||||
|  |         echo "$diffs" | ||||||
|  |         echo | ||||||
|  |         echo 'Please vendor your package with "make vendor"' | ||||||
|  |         echo | ||||||
|  |       } >&2 | ||||||
|  |       exit 1 | ||||||
|  |   fi | ||||||
|  |   echo 'Congratulations! All vendoring changes are done the right way.' | ||||||
|  |   ;; | ||||||
|  | esac | ||||||
		Reference in New Issue
	
	Block a user
	 Tonis Tiigi
					Tonis Tiigi