diff --git a/internal/rosa/go.go b/internal/rosa/go.go new file mode 100644 index 0000000..431ea1a --- /dev/null +++ b/internal/rosa/go.go @@ -0,0 +1,77 @@ +package rosa + +import ( + "slices" + + "hakurei.app/internal/pkg" +) + +// newGoBootstrap returns the Go bootstrap toolchain. +func (t Toolchain) newGoBootstrap() pkg.Artifact { + const checksum = "8o9JL_ToiQKadCTb04nvBDkp8O1xiWOolAxVEqaTGodieNe4lOFEjlOxN3bwwe23" + return t.New("go1.4-bootstrap", nil, nil, []string{ + "CGO_ENABLED=0", + }, ` +mkdir -p /var/tmp +cp -r /usr/src/go1.4-bootstrap /work +cd /work/go1.4-bootstrap/src +chmod -R +w .. +CC="${CC} ${LDFLAGS}" sh make.bash +`, pkg.Path(AbsUsrSrc.Append("go1.4-bootstrap"), false, pkg.NewHTTPGetTar( + nil, "https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz", + mustDecode(checksum), + pkg.TarGzip, + ))) +} + +// newGo returns a specific version of the Go toolchain. +func (t Toolchain) newGo( + version, checksum string, + boot pkg.Artifact, + env ...string, +) pkg.Artifact { + return t.New("go"+version, []pkg.Artifact{ + boot, + }, nil, slices.Concat([]string{ + "GOCACHE=/tmp/gocache", + "GOROOT_BOOTSTRAP=/system/go", + "CGO_" + ldflags(false) + " -O2 -g", + }, env), ` +mkdir /work/system +cp -r /usr/src/go /work/system +cd /work/system/go/src +chmod -R +w .. +sed -i 's/bash run.bash/sh run.bash/' all.bash +sh make.bash +`, pkg.Path(AbsUsrSrc.Append("go"), false, pkg.NewHTTPGetTar( + nil, "https://go.dev/dl/go"+version+".src.tar.gz", + mustDecode(checksum), + pkg.TarGzip, + ))) +} + +// NewGo returns a [pkg.Artifact] containing the Go toolchain. +func (t Toolchain) NewGo() pkg.Artifact { + go119 := t.newGo( + "1.19", + "9_e0aFHsIkVxWVGsp9T2RvvjOc3p4n9o9S8tkNe9Cvgzk_zI2FhRQB7ioQkeAAro", + t.newGoBootstrap(), + "GOROOT_BOOTSTRAP=/go1.4-bootstrap", + ) + go121 := t.newGo( + "1.21.13", + "YtrDka402BOAEwywx03Vz4QlVwoBiguJHzG7PuythMCPHXS8CVMLvzmvgEbu4Tzu", + go119, + ) + go123 := t.newGo( + "1.23.12", + "wcI32bl1tkqbgcelGtGWPI4RtlEddd-PTd76Eb-k7nXA5LbE9yTNdIL9QSOOxMOs", + go121, + ) + go125 := t.newGo( + "1.25.6", + "x0z430qoDvQbbw_fftjW0rh_GSoh0VJhPzttWk_0hj9yz9AKOjuwRMupF_Q0dbt7", + go123, + ) + return go125 +}