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 | eb57f9bcb56646f2e3d6ccaf02ec227815fb05077b2e0b1bf9e755805acdc2b9  golangci-lint-1.51.1-windows-arm64.zip | ||||||
| bce02f7232723cb727755ee11f168a700a00896a25d37f87c4b173bce55596b4  golangci-lint-1.51.1-windows-armv6.zip | bce02f7232723cb727755ee11f168a700a00896a25d37f87c4b173bce55596b4  golangci-lint-1.51.1-windows-armv6.zip | ||||||
| cf6403f84707ce8c98664736772271bc8874f2e760c2fd0f00cf3e85963507e9  golangci-lint-1.51.1-windows-armv7.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", | 		"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
 | 	//     go run ci.go install -dlgo
 | ||||||
| 	dlgoVersion = "1.20.1" | 	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")) | var GOBIN, _ = filepath.Abs(filepath.Join("build", "bin")) | ||||||
| @ -655,10 +663,11 @@ func doDebianSource(cmdline []string) { | |||||||
| 		gpg.Stdin = bytes.NewReader(key) | 		gpg.Stdin = bytes.NewReader(key) | ||||||
| 		build.MustRun(gpg) | 		build.MustRun(gpg) | ||||||
| 	} | 	} | ||||||
| 
 | 	// Download and verify the Go source packages.
 | ||||||
| 	// Download and verify the Go source package.
 | 	var ( | ||||||
| 	gobundle := downloadGoSources(*cachedir) | 		gobootbundle = downloadGoBootstrapSources(*cachedir) | ||||||
| 
 | 		gobundle     = downloadGoSources(*cachedir) | ||||||
|  | 	) | ||||||
| 	// Download all the dependencies needed to build the sources and run the ci script
 | 	// Download all the dependencies needed to build the sources and run the ci script
 | ||||||
| 	srcdepfetch := tc.Go("mod", "download") | 	srcdepfetch := tc.Go("mod", "download") | ||||||
| 	srcdepfetch.Env = append(srcdepfetch.Env, "GOPATH="+filepath.Join(*workdir, "modgopath")) | 	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) | 			meta := newDebMetadata(distro, goboot, *signer, env, now, pkg.Name, pkg.Version, pkg.Executables) | ||||||
| 			pkgdir := stageDebianSource(*workdir, meta) | 			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 { | 			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 { | 			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
 | 			// Add all dependency modules in compressed form
 | ||||||
| 			os.MkdirAll(filepath.Join(pkgdir, ".mod", "cache"), 0755) | 			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.
 | // downloadGoSources downloads the Go source tarball.
 | ||||||
| func downloadGoSources(cachedir string) string { | func downloadGoSources(cachedir string) string { | ||||||
| 	csdb := build.MustLoadChecksums("build/checksums.txt") | 	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 | 	# 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 | 	# 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. | 	# 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) | 	(mv .go ../ && cd ../.go/src && ./make.bash) | ||||||
| 
 | 
 | ||||||
| 	# We can't download external go modules within Launchpad, so we're shipping the | 	# We can't download external go modules within Launchpad, so we're shipping the | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user