internal/pkg: exclusive artifacts
All checks were successful
Test / Create distribution (push) Successful in 50s
Test / Sandbox (push) Successful in 2m34s
Test / Hakurei (push) Successful in 3m46s
Test / ShareFS (push) Successful in 3m59s
Test / Hpkg (push) Successful in 4m32s
Test / Sandbox (race detector) (push) Successful in 5m0s
Test / Hakurei (race detector) (push) Successful in 6m8s
Test / Flake checks (push) Successful in 1m36s

This alleviates scheduler overhead when curing many artifacts.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-01-27 01:16:21 +09:00
parent 948afe33e5
commit eb67e5e0a8
31 changed files with 132 additions and 68 deletions

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newAttr() pkg.Artifact {
version = "2.5.2"
checksum = "YWEphrz6vg1sUMmHHVr1CRo53pFXRhq_pjN-AlG8UgwZK1y6m7zuDhxqJhD0SV0l"
)
return t.New("attr-"+version, []pkg.Artifact{
return t.New("attr-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(Perl),
}, nil, nil, `
@@ -75,7 +75,7 @@ func (t Toolchain) newACL() pkg.Artifact {
version = "2.3.2"
checksum = "-fY5nwH4K8ZHBCRXrzLdguPkqjKI6WIiGu4dBtrZ1o0t6AIU73w8wwJz_UyjIS0P"
)
return t.New("acl-"+version, []pkg.Artifact{
return t.New("acl-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(Attr),

View File

@@ -25,6 +25,9 @@ func (a busyboxBin) Kind() pkg.Kind { return kindBusyboxBin }
// Params is a noop.
func (a busyboxBin) Params(*pkg.IContext) {}
// IsExclusive returns false: Cure performs a trivial filesystem write.
func (busyboxBin) IsExclusive() bool { return false }
// Dependencies returns the underlying busybox [pkg.File].
func (a busyboxBin) Dependencies() []pkg.Artifact {
return []pkg.Artifact{a.bin}
@@ -80,7 +83,8 @@ func newBusyboxBin() pkg.Artifact {
checksum = "L7OBIsPu9enNHn7FqpBT1kOg_mCLNmetSeNMA3i4Y60Z5jTgnlX3qX3zcQtLx5AB"
)
return pkg.NewExec(
"busybox-bin-"+version, nil, pkg.ExecTimeoutMax, fhs.AbsRoot, []string{
"busybox-bin-"+version, nil, pkg.ExecTimeoutMax, false,
fhs.AbsRoot, []string{
"PATH=/system/bin",
},
AbsSystem.Append("bin", "busybox"),
@@ -111,7 +115,7 @@ func (t Toolchain) newBusybox() pkg.Artifact {
env = append(env, "EXTRA_LDFLAGS=-static")
}
return t.New("busybox-"+version, stage3Concat(t, []pkg.Artifact{},
return t.New("busybox-"+version, false, stage3Concat(t, []pkg.Artifact{},
t.Load(Make),
t.Load(KernelHeaders),
), nil, slices.Concat([]string{

View File

@@ -13,7 +13,7 @@ func (t Toolchain) newCMake() pkg.Artifact {
version = "4.2.1"
checksum = "Y3OdbMsob6Xk2y1DCME6z4Fryb5_TkFD7knRT8dTNIRtSqbiCJyyDN9AxggN_I75"
)
return t.New("cmake-"+version, []pkg.Artifact{
return t.New("cmake-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(KernelHeaders),
}, nil, nil, `
@@ -59,6 +59,9 @@ type CMakeAttr struct {
// Override the default installation prefix [AbsSystem].
Prefix *check.Absolute
// Return an exclusive artifact.
Exclusive bool
}
// NewViaCMake returns a [pkg.Artifact] for compiling and installing via CMake.
@@ -94,7 +97,7 @@ chmod -R +w "${ROSA_SOURCE}"
}
sourcePath := AbsUsrSrc.Append(name)
return t.New(name+"-"+variant+"-"+version, stage3Concat(t, attr.Extra,
return t.New(name+"-"+variant+"-"+version, attr.Exclusive, stage3Concat(t, attr.Extra,
t.Load(CMake),
t.Load(Ninja),
), nil, slices.Concat([]string{

View File

@@ -89,6 +89,9 @@ func (cureEtc) Kind() pkg.Kind { return kindEtc }
// Params is a noop.
func (cureEtc) Params(*pkg.IContext) {}
// IsExclusive returns false: Cure performs a few trivial filesystem writes.
func (cureEtc) IsExclusive() bool { return false }
// Dependencies returns a slice containing the backing iana-etc release.
func (a cureEtc) Dependencies() []pkg.Artifact {
if a.iana != nil {

View File

@@ -9,7 +9,7 @@ func (t Toolchain) newGit() pkg.Artifact {
version = "2.52.0"
checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS"
)
return t.New("git-"+version, stage3Concat(t, []pkg.Artifact{},
return t.New("git-"+version, false, stage3Concat(t, []pkg.Artifact{},
t.Load(Make),
t.Load(Perl),
t.Load(M4),

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newMake() pkg.Artifact {
version = "4.4.1"
checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a"
)
return t.New("make-"+version, nil, nil, nil, `
return t.New("make-"+version, false, nil, nil, nil, `
cd "$(mktemp -d)"
/usr/src/make/configure \
--prefix=/system \
@@ -29,7 +29,7 @@ func (t Toolchain) newM4() pkg.Artifact {
version = "1.4.20"
checksum = "RT0_L3m4Co86bVBY3lCFAEs040yI1WdeNmRylFpah8IZovTm6O4wI7qiHJN3qsW9"
)
return t.New("m4-"+version, []pkg.Artifact{
return t.New("m4-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd /usr/src/m4
@@ -55,7 +55,7 @@ func (t Toolchain) newAutoconf() pkg.Artifact {
version = "2.72"
checksum = "-c5blYkC-xLDer3TWEqJTyh1RLbOd1c5dnRLKsDnIrg_wWNOLBpaqMY8FvmUFJ33"
)
return t.New("autoconf-"+version, []pkg.Artifact{
return t.New("autoconf-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(M4),
t.Load(Perl),
@@ -83,7 +83,7 @@ func (t Toolchain) newGettext() pkg.Artifact {
version = "0.26"
checksum = "IMu7yDZX7xL5UO1ZxXc-iBMbY9LLEUlOroyuSlHMZwg9MKtxG7HIm8F2LheDua0y"
)
return t.New("gettext-"+version, []pkg.Artifact{
return t.New("gettext-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd /usr/src/gettext
@@ -119,7 +119,7 @@ func (t Toolchain) newDiffutils() pkg.Artifact {
version = "3.12"
checksum = "9J5VAq5oA7eqwzS1Yvw-l3G5o-TccUrNQR3PvyB_lgdryOFAfxtvQfKfhdpquE44"
)
return t.New("diffutils-"+version, []pkg.Artifact{
return t.New("diffutils-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd /usr/src/diffutils
@@ -148,7 +148,7 @@ func (t Toolchain) newPatch() pkg.Artifact {
version = "2.8"
checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR"
)
return t.New("patch-"+version, []pkg.Artifact{
return t.New("patch-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd /usr/src/patch
@@ -177,7 +177,7 @@ func (t Toolchain) newBash() pkg.Artifact {
version = "5.3"
checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq"
)
return t.New("bash-"+version, []pkg.Artifact{
return t.New("bash-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd "$(mktemp -d)"
@@ -201,7 +201,7 @@ func (t Toolchain) newCoreutils() pkg.Artifact {
version = "9.9"
checksum = "B1_TaXj1j5aiVIcazLWu8Ix03wDV54uo2_iBry4qHG6Y-9bjDpUPlkNLmU_3Nvw6"
)
return t.New("coreutils-"+version, []pkg.Artifact{
return t.New("coreutils-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(Perl),
@@ -232,7 +232,7 @@ func (t Toolchain) newGperf() pkg.Artifact {
version = "3.3"
checksum = "RtIy9pPb_Bb8-31J2Nw-rRGso2JlS-lDlVhuNYhqR7Nt4xM_nObznxAlBMnarJv7"
)
return t.New("gperf-"+version, []pkg.Artifact{
return t.New("gperf-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd "$(mktemp -d)"

View File

@@ -10,7 +10,7 @@ import (
// newGoBootstrap returns the Go bootstrap toolchain.
func (t Toolchain) newGoBootstrap() pkg.Artifact {
const checksum = "8o9JL_ToiQKadCTb04nvBDkp8O1xiWOolAxVEqaTGodieNe4lOFEjlOxN3bwwe23"
return t.New("go1.4-bootstrap", []pkg.Artifact{
return t.New("go1.4-bootstrap", false, []pkg.Artifact{
t.Load(Bash),
}, nil, []string{
"CGO_ENABLED=0",
@@ -50,7 +50,7 @@ func (t Toolchain) newGo(
script string,
extra ...pkg.Artifact,
) pkg.Artifact {
return t.New("go"+version, slices.Concat([]pkg.Artifact{
return t.New("go"+version, false, slices.Concat([]pkg.Artifact{
t.Load(Bash),
}, extra), nil, slices.Concat([]string{
"CC=cc",

View File

@@ -8,6 +8,7 @@ import (
// newKernel is a helper for interacting with Kbuild.
func (t Toolchain) newKernel(
exclusive bool,
patches [][2]string,
script string,
extra ...pkg.Artifact,
@@ -16,7 +17,7 @@ func (t Toolchain) newKernel(
version = "6.18.5"
checksum = "-V1e1WWl7HuePkmm84sSKF7nLuHfUs494uNMzMqXEyxcNE_PUE0FICL0oGWn44mM"
)
return t.New("kernel-"+version, slices.Concat([]pkg.Artifact{
return t.New("kernel-"+version, exclusive, slices.Concat([]pkg.Artifact{
t.Load(Make),
}, extra), nil, nil, `
export LLVM=1
@@ -34,7 +35,7 @@ cd /usr/src/linux
}
func (t Toolchain) newKernelHeaders() pkg.Artifact {
return t.newKernel(nil, `
return t.newKernel(false, nil, `
make "-j$(nproc)" \
INSTALL_HDR_PATH=/work/system \
headers_install

View File

@@ -11,7 +11,7 @@ func (t Toolchain) newLibexpat() pkg.Artifact {
version = "2.7.3"
checksum = "GmkoD23nRi9cMT0cgG1XRMrZWD82UcOMzkkvP1gkwSFWCBgeSXMuoLpa8-v8kxW-"
)
return t.New("libexpat-"+version, []pkg.Artifact{
return t.New("libexpat-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(Bash),
}, nil, nil, `

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newLibffi() pkg.Artifact {
version = "3.4.5"
checksum = "apIJzypF4rDudeRoI_n3K7N-zCeBLTbQlHRn9NSAZqdLAWA80mR0gXPTpHsL7oMl"
)
return t.New("libffi-"+version, []pkg.Artifact{
return t.New("libffi-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(KernelHeaders),
}, nil, nil, `

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newLibgd() pkg.Artifact {
version = "2.3.3"
checksum = "8T-sh1_FJT9K9aajgxzh8ot6vWIF-xxjcKAHvTak9MgGUcsFfzP8cAvvv44u2r36"
)
return t.New("libgd-"+version, []pkg.Artifact{
return t.New("libgd-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(Zlib),

View File

@@ -9,7 +9,7 @@ func (t Toolchain) newLibseccomp() pkg.Artifact {
version = "2.6.0"
checksum = "mMu-iR71guPjFbb31u-YexBaanKE_nYPjPux-vuBiPfS_0kbwJdfCGlkofaUm-EY"
)
return t.New("libseccomp-"+version, []pkg.Artifact{
return t.New("libseccomp-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(Bash),
t.Load(Gperf),

View File

@@ -11,7 +11,7 @@ func (t Toolchain) newLibxml2() pkg.Artifact {
version = "2.15.1"
checksum = "pYzAR3cNrEHezhEMirgiq7jbboLzwMj5GD7SQp0jhSIMdgoU4G9oU9Gxun3zzUIU"
)
return t.New("libxml2-"+version, []pkg.Artifact{
return t.New("libxml2-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd /usr/src/

View File

@@ -197,6 +197,8 @@ cp -r /system/include /usr/include && rm -rf /system/include
"ROSA_LLVM_RUNTIMES=" + strings.Join(runtimes, ";"),
}, attr.env),
ScriptEarly: scriptEarly, Script: script + attr.script,
Exclusive: true,
})
}

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newMeson() pkg.Artifact {
version = "1.10.1"
checksum = "w895BXF_icncnXatT_OLCFe2PYEtg4KrKooMgUYdN-nQVvbFX3PvYWHGEpogsHtd"
)
return t.New("meson-"+version, []pkg.Artifact{
return t.New("meson-"+version, false, []pkg.Artifact{
t.Load(Python),
t.Load(Setuptools),
}, nil, nil, `

View File

@@ -42,7 +42,7 @@ rmdir -v /work/lib
script = ""
}
return t.New("musl-"+version, stage3Concat(t, attr.Extra,
return t.New("musl-"+version, false, stage3Concat(t, attr.Extra,
t.Load(Make),
), nil, slices.Concat([]string{
"ROSA_MUSL_TARGET=" + target,

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newNinja() pkg.Artifact {
version = "1.13.2"
checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v"
)
return t.New("ninja-"+version, []pkg.Artifact{
return t.New("ninja-"+version, false, []pkg.Artifact{
t.Load(CMake),
t.Load(Python),
}, nil, nil, `

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newPerl() pkg.Artifact {
version = "5.42.0"
checksum = "2KR7Jbpk-ZVn1a30LQRwbgUvg2AXlPQZfzrqCr31qD5-yEsTwVQ_W76eZH-EdxM9"
)
return t.New("perl-"+version, []pkg.Artifact{
return t.New("perl-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
chmod -R +w /usr/src/perl && cd /usr/src/perl

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newPkgConfig() pkg.Artifact {
version = "0.29.2"
checksum = "gi7yAvkwo20Inys1tHbeYZ3Wjdm5VPkrnO0Q6_QZPCAwa1zrA8F4a63cdZDd-717"
)
return t.New("pkg-config-"+version, []pkg.Artifact{
return t.New("pkg-config-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd "$(mktemp -d)"

View File

@@ -32,7 +32,7 @@ func (t Toolchain) newPython() pkg.Artifact {
// breaks on llvm
"test_dbm_gnu",
}
return t.New("python-"+version, []pkg.Artifact{
return t.New("python-"+version, false, []pkg.Artifact{
t.Load(Make),
t.Load(Zlib),
t.Load(Libffi),
@@ -69,7 +69,7 @@ func (t Toolchain) newSetuptools() pkg.Artifact {
version = "80.10.1"
checksum = "p3rlwEmy1krcUH1KabprQz1TCYjJ8ZUjOQknQsWh3q-XEqLGEd3P4VrCc7ouHGXU"
)
return t.New("setuptools-"+version, []pkg.Artifact{
return t.New("setuptools-"+version, false, []pkg.Artifact{
t.Load(Python),
}, nil, nil, `
pip3 install \

View File

@@ -176,6 +176,7 @@ var absCureScript = fhs.AbsUsrBin.Append(".cure-script")
// New returns a [pkg.Artifact] compiled on this toolchain.
func (t Toolchain) New(
name string,
exclusive bool,
extra []pkg.Artifact,
checksum *pkg.Checksum,
env []string,
@@ -206,7 +207,7 @@ func (t Toolchain) New(
args[0] = "bash"
support = slices.Concat([]pkg.Artifact{
cureEtc{},
toolchainBusybox.New("stage3-"+version, nil, nil, nil, `
toolchainBusybox.New("stage3-"+version, false, nil, nil, nil, `
tar -C /work -xf /usr/src/stage3.tar.xz
rm -rf /work/dev/ /work/proc/
ln -vs ../usr/bin /work/bin
@@ -258,7 +259,7 @@ ln -vs ../usr/bin /work/bin
}
return pkg.NewExec(
name, checksum, pkg.ExecTimeoutMax,
name, checksum, pkg.ExecTimeoutMax, exclusive,
fhs.AbsRoot, env,
path, args,
@@ -307,7 +308,7 @@ cat /usr/src/` + name + `-patches/* | \
`
aname += "-patched"
}
return t.New(aname, stage3Concat(t, []pkg.Artifact{},
return t.New(aname, false, stage3Concat(t, []pkg.Artifact{},
t.Load(Patch),
), nil, nil, script, paths...)
}

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newRsync() pkg.Artifact {
version = "3.4.1"
checksum = "VBlTsBWd9z3r2-ex7GkWeWxkUc5OrlgDzikAC0pK7ufTjAJ0MbmC_N04oSVTGPiv"
)
return t.New("rsync-"+version, []pkg.Artifact{
return t.New("rsync-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd "$(mktemp -d)"

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newWayland() pkg.Artifact {
version = "1.24.0"
checksum = "JxgLiFRRGw2D3uhVw8ZeDbs3V7K_d4z_ypDog2LBqiA_5y2vVbUAk5NT6D5ozm0m"
)
return t.New("wayland-"+version, []pkg.Artifact{
return t.New("wayland-"+version, false, []pkg.Artifact{
t.Load(Python),
t.Load(Meson),
t.Load(PkgConfig),
@@ -50,7 +50,7 @@ func (t Toolchain) newWaylandProtocols() pkg.Artifact {
version = "1.47"
checksum = "B_NodZ7AQfCstcx7kgbaVjpkYOzbAQq0a4NOk-SA8bQixAE20FY3p1-6gsbPgHn9"
)
return t.New("wayland-protocols-"+version, []pkg.Artifact{
return t.New("wayland-protocols-"+version, false, []pkg.Artifact{
t.Load(Python),
t.Load(Meson),
t.Load(PkgConfig),

View File

@@ -7,7 +7,7 @@ func (t Toolchain) newZlib() pkg.Artifact {
version = "1.3.1"
checksum = "E-eIpNzE8oJ5DsqH4UuA_0GDKuQF5csqI8ooDx2w7Vx-woJ2mb-YtSbEyIMN44mH"
)
return t.New("zlib-"+version, []pkg.Artifact{
return t.New("zlib-"+version, false, []pkg.Artifact{
t.Load(Make),
}, nil, nil, `
cd "$(mktemp -d)"