mirror of https://github.com/docker/buildx.git
				
				
				
			e2e: add bake build and display metadata json
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									299fd19c49
								
							
						
					
					
						commit
						ecf215b927
					
				|  | @ -31,6 +31,7 @@ jobs: | ||||||
|           - mnode-false |           - mnode-false | ||||||
|           - mnode-true |           - mnode-true | ||||||
|         platforms: |         platforms: | ||||||
|  |           - linux/amd64 | ||||||
|           - linux/amd64,linux/arm64 |           - linux/amd64,linux/arm64 | ||||||
|         include: |         include: | ||||||
|           - driver: kubernetes |           - driver: kubernetes | ||||||
|  |  | ||||||
|  | @ -10,13 +10,20 @@ set -eu -o pipefail | ||||||
| : ${MULTI_NODE=0} | : ${MULTI_NODE=0} | ||||||
| : ${PLATFORMS=linux/amd64,linux/arm64} | : ${PLATFORMS=linux/amd64,linux/arm64} | ||||||
| 
 | 
 | ||||||
|  | function buildxCmd { | ||||||
|  |   (set -x ; $BUILDX_CMD "$@") | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function clean { | function clean { | ||||||
|   rm -rf "$context" |   rm -rf "$context" | ||||||
|   ${BUILDX_CMD} rm "$builderName" |   if [ "$builderName" != "default" ]; then | ||||||
|  |     buildxCmd rm "$builderName" | ||||||
|  |   fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| context=$(mktemp -d -t buildx-output.XXXXXXXXXX) | context=$(mktemp -d -t buildx-output.XXXXXXXXXX) | ||||||
| dockerfile=${context}/Dockerfile | dockerfile=${context}/Dockerfile | ||||||
|  | bakedef=${context}/docker-bake.hcl | ||||||
| trap clean EXIT | trap clean EXIT | ||||||
| 
 | 
 | ||||||
| builderName=buildx-test-$(openssl rand -hex 16) | builderName=buildx-test-$(openssl rand -hex 16) | ||||||
|  | @ -44,15 +51,12 @@ if [ "$DRIVER" != "docker" ]; then | ||||||
|       if [ "$firstNode" = "0" ]; then |       if [ "$firstNode" = "0" ]; then | ||||||
|         createFlags="$createFlags --append" |         createFlags="$createFlags --append" | ||||||
|       fi |       fi | ||||||
|       ( |       buildxCmd create ${createFlags} \ | ||||||
|         set -x |  | ||||||
|         ${BUILDX_CMD} create ${createFlags} \ |  | ||||||
|         --name="${builderName}" \ |         --name="${builderName}" \ | ||||||
|         --node="${builderName}-${platform/\//-}" \ |         --node="${builderName}-${platform/\//-}" \ | ||||||
|         --driver="${DRIVER}" \ |         --driver="${DRIVER}" \ | ||||||
|         --driver-opt="${driverOpt}" \ |         --driver-opt="${driverOpt}" \ | ||||||
|         --platform="${platform}" |         --platform="${platform}" | ||||||
|       ) |  | ||||||
|       firstNode=0 |       firstNode=0 | ||||||
|     done |     done | ||||||
|   else |   else | ||||||
|  | @ -60,27 +64,37 @@ if [ "$DRIVER" != "docker" ]; then | ||||||
|     if [ -f "$BUILDKIT_CFG" ]; then |     if [ -f "$BUILDKIT_CFG" ]; then | ||||||
|       createFlags="$createFlags --config=${BUILDKIT_CFG}" |       createFlags="$createFlags --config=${BUILDKIT_CFG}" | ||||||
|     fi |     fi | ||||||
|     ( |     buildxCmd create ${createFlags} \ | ||||||
|       set -x |  | ||||||
|       ${BUILDX_CMD} create ${createFlags} \ |  | ||||||
|       --name="${builderName}" \ |       --name="${builderName}" \ | ||||||
|       --driver="${DRIVER}" \ |       --driver="${DRIVER}" \ | ||||||
|       --driver-opt="${driverOpt}" \ |       --driver-opt="${driverOpt}" \ | ||||||
|       --platform="${PLATFORMS}" |       --platform="${PLATFORMS}" | ||||||
|     ) |  | ||||||
|   fi |   fi | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | function buildOutput { | ||||||
|  |   local name=$1 | ||||||
|  |   if [ "$DRIVER" != "docker" ]; then | ||||||
|  |     if [ "${MULTI_NODE}" = "1" ]; then | ||||||
|  |       echo "type=cacheonly" | ||||||
|  |     else | ||||||
|  |       echo "type=oci,dest=${context}/${name}.tar" | ||||||
|  |     fi | ||||||
|  |   else | ||||||
|  |     echo "type=docker,name=${name}" | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
| # multi-platform not supported by docker driver | # multi-platform not supported by docker driver | ||||||
| buildPlatformFlag= | buildPlatformFlag= | ||||||
|  | bakePlatformFlag= | ||||||
| if [ "$DRIVER" != "docker" ]; then | if [ "$DRIVER" != "docker" ]; then | ||||||
|   buildPlatformFlag=--platform="${PLATFORMS}" |   buildPlatformFlag=--platform="${PLATFORMS}" | ||||||
|  |   bakePlatformFlag=--set="*.platform=${PLATFORMS}" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| set -x |  | ||||||
| 
 |  | ||||||
| # inspect and bootstrap | # inspect and bootstrap | ||||||
| ${BUILDX_CMD} inspect --bootstrap --builder="${builderName}" | buildxCmd inspect --bootstrap --builder="${builderName}" | ||||||
| 
 | 
 | ||||||
| # create dockerfile | # create dockerfile | ||||||
| cat > "${dockerfile}" <<EOL | cat > "${dockerfile}" <<EOL | ||||||
|  | @ -88,14 +102,60 @@ FROM busybox as build | ||||||
| ARG TARGETPLATFORM | ARG TARGETPLATFORM | ||||||
| ARG BUILDPLATFORM | ARG BUILDPLATFORM | ||||||
| RUN echo "I am running on \$BUILDPLATFORM, building for \$TARGETPLATFORM" > /log | RUN echo "I am running on \$BUILDPLATFORM, building for \$TARGETPLATFORM" > /log | ||||||
| FROM busybox | 
 | ||||||
|  | FROM busybox AS log | ||||||
| COPY --from=build /log /log | COPY --from=build /log /log | ||||||
| RUN cat /log | RUN cat /log | ||||||
| RUN uname -a | RUN uname -a | ||||||
|  | 
 | ||||||
|  | FROM busybox AS hello | ||||||
|  | RUN echo hello > /hello | ||||||
|  | 
 | ||||||
|  | FROM scratch | ||||||
|  | COPY --from=log /log /log | ||||||
|  | COPY --from=hello /hello /hello | ||||||
| EOL | EOL | ||||||
| 
 | 
 | ||||||
| # build | # build | ||||||
| ${BUILDX_CMD} build ${buildPlatformFlag} \ | buildxCmd build ${buildPlatformFlag} \ | ||||||
|   --output="type=cacheonly" \ |   --output="$(buildOutput buildx-test-build)" \ | ||||||
|   --builder="${builderName}" \ |   --builder="${builderName}" \ | ||||||
|  |   --metadata-file="${context}/metadata-build.json" \ | ||||||
|   "${context}" |   "${context}" | ||||||
|  | cat "${context}/metadata-build.json" | ||||||
|  | 
 | ||||||
|  | # create bake def | ||||||
|  | cat > "${bakedef}" <<EOL | ||||||
|  | group "default" { | ||||||
|  |   targets = ["release"] | ||||||
|  | } | ||||||
|  | group "all" { | ||||||
|  |   targets = ["log", "hello"] | ||||||
|  | } | ||||||
|  | target "release" { | ||||||
|  |   output = ["$(buildOutput buildx-test-bake-release)"] | ||||||
|  | } | ||||||
|  | target "log" { | ||||||
|  |   output = ["$(buildOutput buildx-test-bake-log)"] | ||||||
|  | } | ||||||
|  | target "hello" { | ||||||
|  |   output = ["$(buildOutput buildx-test-bake-hello)"] | ||||||
|  | } | ||||||
|  | EOL | ||||||
|  | 
 | ||||||
|  | # bake default target | ||||||
|  | buildxCmd bake ${bakePlatformFlag} \ | ||||||
|  |   --file="${bakedef}" \ | ||||||
|  |   --builder="${builderName}" \ | ||||||
|  |   --set "*.context=${context}" \ | ||||||
|  |   --metadata-file="${context}/metadata-bake-def.json" | ||||||
|  | cat "${context}/metadata-bake-def.json" | ||||||
|  | 
 | ||||||
|  | # bake all target | ||||||
|  | buildxCmd bake ${bakePlatformFlag} \ | ||||||
|  |   --file="${bakedef}" \ | ||||||
|  |   --builder="${builderName}" \ | ||||||
|  |   --set "*.context=${context}" \ | ||||||
|  |   --metadata-file="${context}/metadata-bake-all.json" \ | ||||||
|  |   all | ||||||
|  | cat "${context}/metadata-bake-all.json" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue