All checks were successful
Test / Create distribution (push) Successful in 1m1s
Test / Sandbox (push) Successful in 2m35s
Test / Hakurei (push) Successful in 3m50s
Test / ShareFS (push) Successful in 3m58s
Test / Hpkg (push) Successful in 4m30s
Test / Sandbox (race detector) (push) Successful in 5m0s
Test / Hakurei (race detector) (push) Successful in 6m11s
Test / Flake checks (push) Successful in 1m37s
This matches os package behaviour, and avoids adding the cleanup. Signed-off-by: Ophestra <cat@gensokyo.uk>
136 lines
4.0 KiB
Go
136 lines
4.0 KiB
Go
package rosa
|
|
|
|
import (
|
|
"hakurei.app/internal/pkg"
|
|
)
|
|
|
|
func (t Toolchain) newHakurei(suffix, script string) pkg.Artifact {
|
|
const (
|
|
version = "0.3.5"
|
|
checksum = "6Tn38NLezRD2d3aGdFg5qFfqn8_KvC6HwMKwJMPvaHmVw8xRgxn8B0PObswl2mOk"
|
|
)
|
|
return t.New("hakurei"+suffix+"-"+version, 0, []pkg.Artifact{
|
|
t.Load(Go),
|
|
|
|
t.Load(Gzip),
|
|
t.Load(PkgConfig),
|
|
|
|
t.Load(KernelHeaders),
|
|
t.Load(Libseccomp),
|
|
t.Load(ACL),
|
|
t.Load(Attr),
|
|
t.Load(Fuse),
|
|
|
|
t.Load(Xproto),
|
|
t.Load(LibXau),
|
|
t.Load(XCBProto),
|
|
t.Load(XCB),
|
|
|
|
t.Load(Libffi),
|
|
t.Load(Libexpat),
|
|
t.Load(Libxml2),
|
|
t.Load(Wayland),
|
|
t.Load(WaylandProtocols),
|
|
}, nil, []string{
|
|
"CGO_ENABLED=1",
|
|
"GOCACHE=/tmp/gocache",
|
|
"CC=clang -O3 -Werror",
|
|
}, `
|
|
echo '# Building test helper (hostname).'
|
|
go build -v -o /bin/hostname /usr/src/hostname/main.go
|
|
echo
|
|
|
|
chmod -R +w /usr/src/hakurei
|
|
cd /usr/src/hakurei
|
|
|
|
HAKUREI_VERSION='v`+version+`'
|
|
`+script, pkg.Path(AbsUsrSrc.Append("hakurei"), true, t.NewPatchedSource(
|
|
"hakurei", version, pkg.NewHTTPGetTar(
|
|
nil, "https://git.gensokyo.uk/security/hakurei/archive/"+
|
|
"v"+version+".tar.gz",
|
|
mustDecode(checksum),
|
|
pkg.TarGzip,
|
|
), true, [2]string{"createTemp-error-injection", `diff --git a/container/dispatcher_test.go b/container/dispatcher_test.go
|
|
index 5de37fc..fe0c4db 100644
|
|
--- a/container/dispatcher_test.go
|
|
+++ b/container/dispatcher_test.go
|
|
@@ -238,8 +238,11 @@ func sliceAddr[S any](s []S) *[]S { return &s }
|
|
|
|
func newCheckedFile(t *testing.T, name, wantData string, closeErr error) osFile {
|
|
f := &checkedOsFile{t: t, name: name, want: wantData, closeErr: closeErr}
|
|
- // check happens in Close, and cleanup is not guaranteed to run, so relying on it for sloppy implementations will cause sporadic test results
|
|
- f.cleanup = runtime.AddCleanup(f, func(name string) { f.t.Fatalf("checkedOsFile %s became unreachable without a call to Close", name) }, f.name)
|
|
+ // check happens in Close, and cleanup is not guaranteed to run, so relying
|
|
+ // on it for sloppy implementations will cause sporadic test results
|
|
+ f.cleanup = runtime.AddCleanup(f, func(name string) {
|
|
+ panic("checkedOsFile " + name + " became unreachable without a call to Close")
|
|
+ }, name)
|
|
return f
|
|
}
|
|
|
|
diff --git a/container/initplace_test.go b/container/initplace_test.go
|
|
index afeddbe..1c2f20b 100644
|
|
--- a/container/initplace_test.go
|
|
+++ b/container/initplace_test.go
|
|
@@ -21,7 +21,7 @@ func TestTmpfileOp(t *testing.T) {
|
|
Path: samplePath,
|
|
Data: sampleData,
|
|
}, nil, nil, []stub.Call{
|
|
- call("createTemp", stub.ExpectArgs{"/", "tmp.*"}, newCheckedFile(t, "tmp.32768", sampleDataString, nil), stub.UniqueError(5)),
|
|
+ call("createTemp", stub.ExpectArgs{"/", "tmp.*"}, (*checkedOsFile)(nil), stub.UniqueError(5)),
|
|
}, stub.UniqueError(5)},
|
|
|
|
{"Write", &Params{ParentPerm: 0700}, &TmpfileOp{
|
|
`},
|
|
)), pkg.Path(AbsUsrSrc.Append("hostname", "main.go"), false, pkg.NewFile(
|
|
"hostname.go",
|
|
[]byte(`
|
|
package main
|
|
|
|
import "os"
|
|
|
|
func main() {
|
|
if name, err := os.Hostname(); err != nil {
|
|
panic(err)
|
|
} else {
|
|
os.Stdout.WriteString(name)
|
|
}
|
|
}
|
|
`),
|
|
)))
|
|
}
|
|
func init() {
|
|
artifactsF[Hakurei] = func(t Toolchain) pkg.Artifact {
|
|
return t.newHakurei("", `
|
|
mkdir -p /work/system/libexec/hakurei/
|
|
|
|
echo '# Building hakurei.'
|
|
go generate -v ./...
|
|
go build -trimpath -v -o /work/system/libexec/hakurei -ldflags="-s -w
|
|
-buildid=
|
|
-extldflags=-static
|
|
-X hakurei.app/internal/info.buildVersion="$HAKUREI_VERSION"
|
|
-X hakurei.app/internal/info.hakureiPath=/system/bin/hakurei
|
|
-X hakurei.app/internal/info.hsuPath=/system/bin/hsu
|
|
-X main.hakureiPath=/system/bin/hakurei" ./...
|
|
echo
|
|
|
|
echo '# Testing hakurei.'
|
|
go test -ldflags='-buildid= -extldflags=-static' ./...
|
|
echo
|
|
|
|
mkdir -p /work/system/bin/
|
|
(cd /work/system/libexec/hakurei && mv \
|
|
hakurei \
|
|
sharefs \
|
|
../../bin/)
|
|
`)
|
|
}
|
|
artifactsF[HakureiDist] = func(t Toolchain) pkg.Artifact {
|
|
return t.newHakurei("-dist", `
|
|
export HAKUREI_VERSION
|
|
DESTDIR=/work /usr/src/hakurei/dist/release.sh
|
|
`)
|
|
}
|
|
}
|