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