build for multiple platforms only in CI, add s390x
Developers should not be forced to build for all platforms by default. We also don't want to copy-and-paste the go invocation for each new platform. To address both, the target platform(s) are now configurable via BUILD_PLATFORMS and additional platforms are only enabled in the Prow CI. For now this serves as a test that the source actually compiles for multiple platforms. Building images for different target platforms is a different problem.
This commit is contained in:
		
							parent
							
								
									8322a7d0c7
								
							
						
					
					
						commit
						3863a0f674
					
				
							
								
								
									
										21
									
								
								build.make
								
								
								
								
							
							
						
						
									
										21
									
								
								build.make
								
								
								
								
							|  | @ -60,18 +60,25 @@ else | |||
| TESTARGS = | ||||
| endif | ||||
| 
 | ||||
| ARCH := $(if $(GOARCH),$(GOARCH),$(shell go env GOARCH)) | ||||
| 
 | ||||
| # Specific packages can be excluded from each of the tests below by setting the *_FILTER_CMD variables | ||||
| # to something like "| grep -v 'github.com/kubernetes-csi/project/pkg/foobar'". See usage below. | ||||
| 
 | ||||
| # BUILD_PLATFORMS contains a set of <os> <arch> <suffix> triplets, | ||||
| # separated by semicolon. An empty variable or empty entry (= just a | ||||
| # semicolon) builds for the default platform of the current Go | ||||
| # toolchain. | ||||
| BUILD_PLATFORMS = | ||||
| 
 | ||||
| # This builds each command (= the sub-directories of ./cmd) for the target platform(s) | ||||
| # defined by BUILD_PLATFORMS. | ||||
| build-%: check-go-version-go | ||||
| 	mkdir -p bin | ||||
| 	CGO_ENABLED=0 GOOS=linux go build $(GOFLAGS_VENDOR) -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o ./bin/$* ./cmd/$* | ||||
| 	if [ "$$ARCH" = "amd64" ]; then \ | ||||
| 		CGO_ENABLED=0 GOOS=windows go build $(GOFLAGS_VENDOR) -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o ./bin/$*.exe ./cmd/$* ; \ | ||||
| 		CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le go build $(GOFLAGS_VENDOR) -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o ./bin/$*-ppc64le ./cmd/$* ; \ | ||||
| 	fi | ||||
| 	echo '$(BUILD_PLATFORMS)' | tr ';' '\n' | while read -r os arch suffix; do \ | ||||
| 		if ! (set -x; CGO_ENABLED=0 GOOS="$$os" GOARCH="$$arch" go build $(GOFLAGS_VENDOR) -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o "./bin/$*$$suffix" ./cmd/$*); then \ | ||||
| 			echo "Building $* for GOOS=$$os GOARCH=$$arch failed, see error(s) above."; \ | ||||
| 			exit 1; \ | ||||
| 		fi; \ | ||||
| 	done | ||||
| 
 | ||||
| container-%: build-% | ||||
| 	docker build -t $*:latest -f $(shell if [ -e ./cmd/$*/Dockerfile ]; then echo ./cmd/$*/Dockerfile; else echo Dockerfile; fi) --label revision=$(REV) . | ||||
|  |  | |||
							
								
								
									
										4
									
								
								prow.sh
								
								
								
								
							
							
						
						
									
										4
									
								
								prow.sh
								
								
								
								
							|  | @ -85,6 +85,8 @@ get_versioned_variable () { | |||
|     echo "$value" | ||||
| } | ||||
| 
 | ||||
| configvar CSI_PROW_BUILD_PLATFORMS "linux amd64; windows amd64 .exe; linux ppc64le -ppc64le; linux s390x -s390x" "Go target platforms (= GOOS + GOARCH) and file suffix of the resulting binaries" | ||||
| 
 | ||||
| # If we have a vendor directory, then use it. We must be careful to only | ||||
| # use this for "make" invocations inside the project's repo itself because | ||||
| # setting it globally can break other go usages (like "go get <some command>" | ||||
|  | @ -1026,7 +1028,7 @@ main () { | |||
|     images= | ||||
|     if ${CSI_PROW_BUILD_JOB}; then | ||||
|         # A successful build is required for testing. | ||||
|         run_with_go "${CSI_PROW_GO_VERSION_BUILD}" make all "GOFLAGS_VENDOR=${GOFLAGS_VENDOR}" || die "'make all' failed" | ||||
|         run_with_go "${CSI_PROW_GO_VERSION_BUILD}" make all "GOFLAGS_VENDOR=${GOFLAGS_VENDOR}" "BUILD_PLATFORMS=${CSI_PROW_BUILD_PLATFORMS}" || die "'make all' failed" | ||||
|         # We don't want test failures to prevent E2E testing below, because the failure | ||||
|         # might have been minor or unavoidable, for example when experimenting with | ||||
|         # changes in "release-tools" in a PR (that fails the "is release-tools unmodified" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue