You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
| #!/usr/bin/env bash
 | |
| 
 | |
| set -eu -o pipefail
 | |
| 
 | |
| : ${BUILDX_CMD=docker buildx}
 | |
| : ${BUILDKIT_IMAGE=moby/buildkit:buildx-stable-1}
 | |
| : ${BUILDKIT_CFG=}
 | |
| : ${DRIVER=docker-container}
 | |
| : ${DRIVER_OPT=}
 | |
| : ${MULTI_NODE=0}
 | |
| : ${PLATFORMS=linux/amd64,linux/arm64}
 | |
| 
 | |
| function clean {
 | |
|   rm -rf "$context"
 | |
|   ${BUILDX_CMD} rm "$builderName"
 | |
| }
 | |
| 
 | |
| context=$(mktemp -d -t buildx-output.XXXXXXXXXX)
 | |
| dockerfile=${context}/Dockerfile
 | |
| trap clean EXIT
 | |
| 
 | |
| builderName=buildx-test-$(openssl rand -hex 16)
 | |
| buildPlatformFlag=
 | |
| if [ "$DRIVER" = "docker" ]; then
 | |
|   builderName=default
 | |
| else
 | |
|   buildPlatformFlag=--platform="${PLATFORMS}"
 | |
| fi
 | |
| 
 | |
| driverOpt=image=${BUILDKIT_IMAGE}
 | |
| if [ -n "$DRIVER_OPT" ]; then
 | |
|   driverOpt=$driverOpt,$DRIVER_OPT
 | |
| fi
 | |
| 
 | |
| # create builder except for docker driver
 | |
| if [ "$DRIVER" != "docker" ]; then
 | |
|   if [ "${MULTI_NODE}" = "1" ]; then
 | |
|     firstNode=1
 | |
|     for platform in ${PLATFORMS//,/ }; do
 | |
|       createFlags=""
 | |
|       if [ -f "$BUILDKIT_CFG" ]; then
 | |
|         createFlags="$createFlags --config=${BUILDKIT_CFG}"
 | |
|       fi
 | |
|       if [ "$firstNode" = "0" ]; then
 | |
|         createFlags="$createFlags --append"
 | |
|       fi
 | |
|       (
 | |
|         set -x
 | |
|         ${BUILDX_CMD} create ${createFlags} \
 | |
|           --name="${builderName}" \
 | |
|           --node="${builderName}-${platform/\//-}" \
 | |
|           --driver="${DRIVER}" \
 | |
|           --driver-opt="${driverOpt}" \
 | |
|           --platform="${platform}"
 | |
|       )
 | |
|       firstNode=0
 | |
|     done
 | |
|   else
 | |
|     createFlags=""
 | |
|     if [ -f "$BUILDKIT_CFG" ]; then
 | |
|       createFlags="$createFlags --config=${BUILDKIT_CFG}"
 | |
|     fi
 | |
|     (
 | |
|       set -x
 | |
|       ${BUILDX_CMD} create ${createFlags} \
 | |
|         --name="${builderName}" \
 | |
|         --driver="${DRIVER}" \
 | |
|         --driver-opt="${driverOpt}" \
 | |
|         --platform="${PLATFORMS}"
 | |
|     )
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # multi-platform not supported by docker driver
 | |
| buildPlatformFlag=
 | |
| if [ "$DRIVER" != "docker" ]; then
 | |
|   buildPlatformFlag=--platform="${PLATFORMS}"
 | |
| fi
 | |
| 
 | |
| set -x
 | |
| 
 | |
| # inspect and bootstrap
 | |
| ${BUILDX_CMD} inspect --bootstrap --builder="${builderName}"
 | |
| 
 | |
| # create dockerfile
 | |
| cat > "${dockerfile}" <<EOL
 | |
| FROM busybox as build
 | |
| ARG TARGETPLATFORM
 | |
| ARG BUILDPLATFORM
 | |
| RUN echo "I am running on \$BUILDPLATFORM, building for \$TARGETPLATFORM" > /log
 | |
| FROM busybox
 | |
| COPY --from=build /log /log
 | |
| RUN cat /log
 | |
| RUN uname -a
 | |
| EOL
 | |
| 
 | |
| # build
 | |
| ${BUILDX_CMD} build ${buildPlatformFlag} \
 | |
|   --output="type=cacheonly" \
 | |
|   --builder="${builderName}" \
 | |
|   "${context}"
 |