build: ship bootstrapper Go along with builder for PPA (#26731)
This commit is contained in:
		
							parent
							
								
									1db978ca6b
								
							
						
					
					
						commit
						2166c86041
					
				| @ -41,3 +41,6 @@ c4f58b7e227b9fd41f0e9310dc83f4a4e7d026598e2f6e95b78761081a6d9bd2  golangci-lint- | ||||
| eb57f9bcb56646f2e3d6ccaf02ec227815fb05077b2e0b1bf9e755805acdc2b9  golangci-lint-1.51.1-windows-arm64.zip | ||||
| bce02f7232723cb727755ee11f168a700a00896a25d37f87c4b173bce55596b4  golangci-lint-1.51.1-windows-armv6.zip | ||||
| cf6403f84707ce8c98664736772271bc8874f2e760c2fd0f00cf3e85963507e9  golangci-lint-1.51.1-windows-armv7.zip | ||||
| 
 | ||||
| # This is the builder on PPA that will build Go itself (inception-y), don't modify! | ||||
| 9419cc70dc5a2523f29a77053cafff658ed21ef3561d9b6b020280ebceab28b9  go1.19.src.tar.gz | ||||
|  | ||||
							
								
								
									
										45
									
								
								build/ci.go
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								build/ci.go
									
									
									
									
									
								
							| @ -136,10 +136,18 @@ var ( | ||||
| 		"golang-go":   "/usr/lib/go", | ||||
| 	} | ||||
| 
 | ||||
| 	// This is the version of go that will be downloaded by
 | ||||
| 	// This is the version of Go that will be downloaded by
 | ||||
| 	//
 | ||||
| 	//     go run ci.go install -dlgo
 | ||||
| 	dlgoVersion = "1.20.1" | ||||
| 
 | ||||
| 	// This is the version of Go that will be used to bootstrap the PPA builder.
 | ||||
| 	//
 | ||||
| 	// This version is fine to be old and full of security holes, we just use it
 | ||||
| 	// to build the latest Go. Don't change it. If it ever becomes infufficient,
 | ||||
| 	// we need to switch over to a recursive builder to jumpt across supported
 | ||||
| 	// versions.
 | ||||
| 	gobootVersion = "1.19" | ||||
| ) | ||||
| 
 | ||||
| var GOBIN, _ = filepath.Abs(filepath.Join("build", "bin")) | ||||
| @ -655,10 +663,11 @@ func doDebianSource(cmdline []string) { | ||||
| 		gpg.Stdin = bytes.NewReader(key) | ||||
| 		build.MustRun(gpg) | ||||
| 	} | ||||
| 
 | ||||
| 	// Download and verify the Go source package.
 | ||||
| 	gobundle := downloadGoSources(*cachedir) | ||||
| 
 | ||||
| 	// Download and verify the Go source packages.
 | ||||
| 	var ( | ||||
| 		gobootbundle = downloadGoBootstrapSources(*cachedir) | ||||
| 		gobundle     = downloadGoSources(*cachedir) | ||||
| 	) | ||||
| 	// Download all the dependencies needed to build the sources and run the ci script
 | ||||
| 	srcdepfetch := tc.Go("mod", "download") | ||||
| 	srcdepfetch.Env = append(srcdepfetch.Env, "GOPATH="+filepath.Join(*workdir, "modgopath")) | ||||
| @ -675,12 +684,19 @@ func doDebianSource(cmdline []string) { | ||||
| 			meta := newDebMetadata(distro, goboot, *signer, env, now, pkg.Name, pkg.Version, pkg.Executables) | ||||
| 			pkgdir := stageDebianSource(*workdir, meta) | ||||
| 
 | ||||
| 			// Add Go source code
 | ||||
| 			// Add bootstrapper Go source code
 | ||||
| 			if err := build.ExtractArchive(gobootbundle, pkgdir); err != nil { | ||||
| 				log.Fatalf("Failed to extract bootstrapper Go sources: %v", err) | ||||
| 			} | ||||
| 			if err := os.Rename(filepath.Join(pkgdir, "go"), filepath.Join(pkgdir, ".goboot")); err != nil { | ||||
| 				log.Fatalf("Failed to rename bootstrapper Go source folder: %v", err) | ||||
| 			} | ||||
| 			// Add builder Go source code
 | ||||
| 			if err := build.ExtractArchive(gobundle, pkgdir); err != nil { | ||||
| 				log.Fatalf("Failed to extract Go sources: %v", err) | ||||
| 				log.Fatalf("Failed to extract builder Go sources: %v", err) | ||||
| 			} | ||||
| 			if err := os.Rename(filepath.Join(pkgdir, "go"), filepath.Join(pkgdir, ".go")); err != nil { | ||||
| 				log.Fatalf("Failed to rename Go source folder: %v", err) | ||||
| 				log.Fatalf("Failed to rename builder Go source folder: %v", err) | ||||
| 			} | ||||
| 			// Add all dependency modules in compressed form
 | ||||
| 			os.MkdirAll(filepath.Join(pkgdir, ".mod", "cache"), 0755) | ||||
| @ -709,6 +725,19 @@ func doDebianSource(cmdline []string) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // downloadGoBootstrapSources downloads the Go source tarball that will be used
 | ||||
| // to bootstrap the builder Go.
 | ||||
| func downloadGoBootstrapSources(cachedir string) string { | ||||
| 	csdb := build.MustLoadChecksums("build/checksums.txt") | ||||
| 	file := fmt.Sprintf("go%s.src.tar.gz", gobootVersion) | ||||
| 	url := "https://dl.google.com/go/" + file | ||||
| 	dst := filepath.Join(cachedir, file) | ||||
| 	if err := csdb.DownloadFile(url, dst); err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
| 	return dst | ||||
| } | ||||
| 
 | ||||
| // downloadGoSources downloads the Go source tarball.
 | ||||
| func downloadGoSources(cachedir string) string { | ||||
| 	csdb := build.MustLoadChecksums("build/checksums.txt") | ||||
|  | ||||
| @ -16,6 +16,11 @@ override_dh_auto_build: | ||||
| 	# We can't download a fresh Go within Launchpad, so we're shipping and building | ||||
| 	# one on the fly. However, we can't build it inside the go-ethereum folder as | ||||
| 	# bootstrapping clashes with go modules, so build in a sibling folder. | ||||
| 	# | ||||
| 	# We're also shipping the bootstrapper as of Go 1.20 as it had minimum version | ||||
| 	# requirements opposed to older versions of Go. | ||||
| 	(mv .goboot ../ && cd ../.goboot/src && ./make.bash) | ||||
| 	(cd ../.goboot/bin && export GOROOT_BOOTSTRAP=`pwd`) | ||||
| 	(mv .go ../ && cd ../.go/src && ./make.bash) | ||||
| 
 | ||||
| 	# We can't download external go modules within Launchpad, so we're shipping the | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user