diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | cmd/mbf/cache.go | 2 | ||||
| -rw-r--r-- | cmd/mbf/cache_test.go | 2 | ||||
| -rw-r--r-- | cmd/mbf/daemon.go | 2 | ||||
| -rw-r--r-- | cmd/mbf/daemon_test.go | 2 | ||||
| -rw-r--r-- | cmd/mbf/info.go | 2 | ||||
| -rw-r--r-- | cmd/mbf/info_test.go | 2 | ||||
| -rw-r--r-- | cmd/mbf/internal/pkgserver/index.go | 2 | ||||
| -rw-r--r-- | cmd/mbf/main.go | 2 | ||||
| -rw-r--r-- | internal/rosa/builtins.go | 2 | ||||
| -rw-r--r-- | internal/rosa/etc.go | 2 | ||||
| -rw-r--r-- | internal/rosa/gentoo.go | 2 | ||||
| -rw-r--r-- | internal/rosa/git.go | 2 | ||||
| -rw-r--r-- | internal/rosa/go.go | 2 | ||||
| -rw-r--r-- | internal/rosa/llvm.go | 2 | ||||
| -rw-r--r-- | internal/rosa/llvm_test.go | 2 | ||||
| -rw-r--r-- | internal/rosa/mirror.go | 2 | ||||
| -rw-r--r-- | internal/rosa/mirror_test.go | 2 | ||||
| -rw-r--r-- | internal/rosa/report.go | 2 | ||||
| -rw-r--r-- | internal/rosa/report_test.go | 2 | ||||
| -rw-r--r-- | internal/rosa/rosa.go | 2 | ||||
| -rw-r--r-- | internal/rosa/rosa_test.go | 2 | ||||
| -rw-r--r-- | internal/rosa/state.go | 2 | ||||
| -rw-r--r-- | internal/uevent/coldboot_test.go | 2 | ||||
| -rw-r--r-- | pkg/archive.go (renamed from internal/pkg/archive.go) | 0 | ||||
| -rw-r--r-- | pkg/archive_test.go (renamed from internal/pkg/archive_test.go) | 2 | ||||
| -rw-r--r-- | pkg/clean.go (renamed from internal/pkg/clean.go) | 0 | ||||
| -rw-r--r-- | pkg/clean_test.go (renamed from internal/pkg/clean_test.go) | 2 | ||||
| -rw-r--r-- | pkg/compress.go (renamed from internal/pkg/compress.go) | 0 | ||||
| -rw-r--r-- | pkg/compress_test.go (renamed from internal/pkg/compress_test.go) | 2 | ||||
| -rw-r--r-- | pkg/exec.go (renamed from internal/pkg/exec.go) | 0 | ||||
| -rw-r--r-- | pkg/exec_test.go (renamed from internal/pkg/exec_test.go) | 8 | ||||
| -rw-r--r-- | pkg/file.go (renamed from internal/pkg/file.go) | 0 | ||||
| -rw-r--r-- | pkg/file_test.go (renamed from internal/pkg/file_test.go) | 2 | ||||
| -rw-r--r-- | pkg/internal/testtool/expected/expected.go (renamed from internal/pkg/internal/testtool/expected/expected.go) | 0 | ||||
| -rw-r--r-- | pkg/internal/testtool/expected/sum_amd64.go (renamed from internal/pkg/internal/testtool/expected/sum_amd64.go) | 0 | ||||
| -rw-r--r-- | pkg/internal/testtool/expected/sum_arm64.go (renamed from internal/pkg/internal/testtool/expected/sum_arm64.go) | 0 | ||||
| -rw-r--r-- | pkg/internal/testtool/expected/sum_riscv64.go (renamed from internal/pkg/internal/testtool/expected/sum_riscv64.go) | 0 | ||||
| -rw-r--r-- | pkg/internal/testtool/main.go (renamed from internal/pkg/internal/testtool/main.go) | 2 | ||||
| -rw-r--r-- | pkg/ir.go (renamed from internal/pkg/ir.go) | 0 | ||||
| -rw-r--r-- | pkg/ir_test.go (renamed from internal/pkg/ir_test.go) | 2 | ||||
| -rw-r--r-- | pkg/net.go (renamed from internal/pkg/net.go) | 0 | ||||
| -rw-r--r-- | pkg/net_test.go (renamed from internal/pkg/net_test.go) | 2 | ||||
| -rw-r--r-- | pkg/pkg.go (renamed from internal/pkg/pkg.go) | 9 | ||||
| -rw-r--r-- | pkg/pkg_test.go (renamed from internal/pkg/pkg_test.go) | 10 | ||||
| -rw-r--r-- | pkg/tar.go (renamed from internal/pkg/tar.go) | 0 | ||||
| -rw-r--r-- | pkg/tar_test.go (renamed from internal/pkg/tar_test.go) | 2 |
48 files changed, 49 insertions, 44 deletions
@@ -9,7 +9,7 @@ # go generate /cmd/hakurei/LICENSE /cmd/mbf/internal/pkgserver/ui/static -/internal/pkg/internal/testtool/testtool +/pkg/internal/testtool/testtool /internal/rosa/hakurei_current.tar.gz # cmd/dist default destination @@ -32,7 +32,7 @@ subordinate user to set up the application container. It has a single dependency [libseccomp](https://github.com/seccomp/libseccomp), to create BPF programs for the [system call filter](https://www.kernel.org/doc/html/latest/userspace-api/seccomp_filter.html). -Package [internal/pkg](https://pkg.go.dev/hakurei.app/internal/pkg) provides +Package [pkg](https://pkg.go.dev/hakurei.app/pkg) provides infrastructure for hermetic builds. This replaces the legacy nix-based testing framework and serves as the build system of Rosa OS, currently developed under package [internal/rosa](https://pkg.go.dev/hakurei.app/internal/rosa). diff --git a/cmd/mbf/cache.go b/cmd/mbf/cache.go index 847d7d4e..0e20ca99 100644 --- a/cmd/mbf/cache.go +++ b/cmd/mbf/cache.go @@ -9,9 +9,9 @@ import ( "testing" "hakurei.app/check" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" "hakurei.app/message" + "hakurei.app/pkg" ) // cache refers to an instance of [pkg.Cache] that might be open. diff --git a/cmd/mbf/cache_test.go b/cmd/mbf/cache_test.go index a4d33af5..498743e9 100644 --- a/cmd/mbf/cache_test.go +++ b/cmd/mbf/cache_test.go @@ -5,8 +5,8 @@ import ( "os" "testing" - "hakurei.app/internal/pkg" "hakurei.app/message" + "hakurei.app/pkg" ) func TestCache(t *testing.T) { diff --git a/cmd/mbf/daemon.go b/cmd/mbf/daemon.go index d694bea0..72ab2b24 100644 --- a/cmd/mbf/daemon.go +++ b/cmd/mbf/daemon.go @@ -16,7 +16,7 @@ import ( "unique" "hakurei.app/check" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) // daemonTimeout is the maximum amount of time cureFromIR will wait on I/O. diff --git a/cmd/mbf/daemon_test.go b/cmd/mbf/daemon_test.go index 97b3ba9b..58456f67 100644 --- a/cmd/mbf/daemon_test.go +++ b/cmd/mbf/daemon_test.go @@ -15,8 +15,8 @@ import ( "time" "hakurei.app/check" - "hakurei.app/internal/pkg" "hakurei.app/message" + "hakurei.app/pkg" ) func TestNoReply(t *testing.T) { diff --git a/cmd/mbf/info.go b/cmd/mbf/info.go index d0afc8f5..a4bc7c02 100644 --- a/cmd/mbf/info.go +++ b/cmd/mbf/info.go @@ -8,8 +8,8 @@ import ( "strings" "unique" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" + "hakurei.app/pkg" ) // commandInfo implements the info subcommand. diff --git a/cmd/mbf/info_test.go b/cmd/mbf/info_test.go index d85266ef..deeef459 100644 --- a/cmd/mbf/info_test.go +++ b/cmd/mbf/info_test.go @@ -13,9 +13,9 @@ import ( "unique" "unsafe" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" "hakurei.app/message" + "hakurei.app/pkg" ) func TestInfo(t *testing.T) { diff --git a/cmd/mbf/internal/pkgserver/index.go b/cmd/mbf/internal/pkgserver/index.go index f62a7e73..2a9b6de5 100644 --- a/cmd/mbf/internal/pkgserver/index.go +++ b/cmd/mbf/internal/pkgserver/index.go @@ -6,8 +6,8 @@ import ( "slices" "strings" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" + "hakurei.app/pkg" ) const ( diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index c6e1940f..4f471d6a 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -39,9 +39,9 @@ import ( "hakurei.app/command" "hakurei.app/ext" "hakurei.app/fhs" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" "hakurei.app/message" + "hakurei.app/pkg" "hakurei.app/cmd/mbf/internal/pkgserver" "hakurei.app/cmd/mbf/internal/pkgserver/ui" diff --git a/internal/rosa/builtins.go b/internal/rosa/builtins.go index dbafa397..edca2333 100644 --- a/internal/rosa/builtins.go +++ b/internal/rosa/builtins.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) const ( diff --git a/internal/rosa/etc.go b/internal/rosa/etc.go index 18c9750b..0af51830 100644 --- a/internal/rosa/etc.go +++ b/internal/rosa/etc.go @@ -8,7 +8,7 @@ import ( "syscall" "hakurei.app/fhs" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) // cureEtc contains deterministic elements of /etc, made available as part of diff --git a/internal/rosa/gentoo.go b/internal/rosa/gentoo.go index a0a8e525..a08fd705 100644 --- a/internal/rosa/gentoo.go +++ b/internal/rosa/gentoo.go @@ -6,7 +6,7 @@ import ( "os" "path/filepath" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) // gentooOverlay are symlinks on top of a Gentoo LLVM stage3 tarball for diff --git a/internal/rosa/git.go b/internal/rosa/git.go index bda380ce..70d5b6f8 100644 --- a/internal/rosa/git.go +++ b/internal/rosa/git.go @@ -4,7 +4,7 @@ import ( "path" "strings" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) var ( diff --git a/internal/rosa/go.go b/internal/rosa/go.go index 1b42447a..1127cf3d 100644 --- a/internal/rosa/go.go +++ b/internal/rosa/go.go @@ -3,7 +3,7 @@ package rosa import ( "slices" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) // newGo returns a specific version of the Go toolchain. diff --git a/internal/rosa/llvm.go b/internal/rosa/llvm.go index dddd6388..0882e7d8 100644 --- a/internal/rosa/llvm.go +++ b/internal/rosa/llvm.go @@ -5,7 +5,7 @@ import ( "slices" "strings" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) var ( diff --git a/internal/rosa/llvm_test.go b/internal/rosa/llvm_test.go index 52562579..3152107c 100644 --- a/internal/rosa/llvm_test.go +++ b/internal/rosa/llvm_test.go @@ -3,8 +3,8 @@ package rosa_test import ( "testing" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" + "hakurei.app/pkg" ) func TestLLVMInputs(t *testing.T) { diff --git a/internal/rosa/mirror.go b/internal/rosa/mirror.go index 80d4509c..4af931c7 100644 --- a/internal/rosa/mirror.go +++ b/internal/rosa/mirror.go @@ -17,8 +17,8 @@ import ( "syscall" "unique" - "hakurei.app/internal/pkg" "hakurei.app/message" + "hakurei.app/pkg" ) // Remote is an authenticated cache mirror. diff --git a/internal/rosa/mirror_test.go b/internal/rosa/mirror_test.go index 6c3ec92e..d45f9ae8 100644 --- a/internal/rosa/mirror_test.go +++ b/internal/rosa/mirror_test.go @@ -13,9 +13,9 @@ import ( "hakurei.app/check" "hakurei.app/fhs" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" "hakurei.app/message" + "hakurei.app/pkg" ) func TestMirror(t *testing.T) { diff --git a/internal/rosa/report.go b/internal/rosa/report.go index 7792d9e9..7a1f4521 100644 --- a/internal/rosa/report.go +++ b/internal/rosa/report.go @@ -14,8 +14,8 @@ import ( "unique" "unsafe" - "hakurei.app/internal/pkg" "hakurei.app/message" + "hakurei.app/pkg" ) // wordSize is the boundary which binary segments are always aligned to. diff --git a/internal/rosa/report_test.go b/internal/rosa/report_test.go index 2ca8ac57..8154bc5a 100644 --- a/internal/rosa/report_test.go +++ b/internal/rosa/report_test.go @@ -8,8 +8,8 @@ import ( "testing" "unique" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" + "hakurei.app/pkg" ) func TestReportZeroLength(t *testing.T) { diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go index 7b06700c..1ad15100 100644 --- a/internal/rosa/rosa.go +++ b/internal/rosa/rosa.go @@ -10,7 +10,7 @@ import ( "unsafe" "hakurei.app/fhs" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) // Extension is the variant identification string of custom artifact diff --git a/internal/rosa/rosa_test.go b/internal/rosa/rosa_test.go index 76e8a53e..ce3dad42 100644 --- a/internal/rosa/rosa_test.go +++ b/internal/rosa/rosa_test.go @@ -10,9 +10,9 @@ import ( "testing" "hakurei.app/check" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" "hakurei.app/message" + "hakurei.app/pkg" ) var ( diff --git a/internal/rosa/state.go b/internal/rosa/state.go index ba17ea23..fca1aa48 100644 --- a/internal/rosa/state.go +++ b/internal/rosa/state.go @@ -25,8 +25,8 @@ import ( "hakurei.app/check" "hakurei.app/container" - "hakurei.app/internal/pkg" "hakurei.app/internal/rosa/azalea" + "hakurei.app/pkg" ) // ArtifactH is a handle of the unique name of a prepared [pkg.Artifact]. diff --git a/internal/uevent/coldboot_test.go b/internal/uevent/coldboot_test.go index 0a50ead4..aa6428a1 100644 --- a/internal/uevent/coldboot_test.go +++ b/internal/uevent/coldboot_test.go @@ -11,8 +11,8 @@ import ( "testing" "hakurei.app/check" - "hakurei.app/internal/pkg" "hakurei.app/internal/uevent" + "hakurei.app/pkg" ) func TestColdboot(t *testing.T) { diff --git a/internal/pkg/archive.go b/pkg/archive.go index ea4017d9..ea4017d9 100644 --- a/internal/pkg/archive.go +++ b/pkg/archive.go diff --git a/internal/pkg/archive_test.go b/pkg/archive_test.go index 1cb4bea9..44ea56a7 100644 --- a/internal/pkg/archive_test.go +++ b/pkg/archive_test.go @@ -11,7 +11,7 @@ import ( "unsafe" "hakurei.app/check" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) func TestArchive(t *testing.T) { diff --git a/internal/pkg/clean.go b/pkg/clean.go index f07706cf..f07706cf 100644 --- a/internal/pkg/clean.go +++ b/pkg/clean.go diff --git a/internal/pkg/clean_test.go b/pkg/clean_test.go index 67dceb09..e31d52aa 100644 --- a/internal/pkg/clean_test.go +++ b/pkg/clean_test.go @@ -11,8 +11,8 @@ import ( "testing" "unique" - "hakurei.app/internal/pkg" "hakurei.app/message" + "hakurei.app/pkg" ) // formatHandles returns a user-facing string representing h. diff --git a/internal/pkg/compress.go b/pkg/compress.go index 22f990f1..22f990f1 100644 --- a/internal/pkg/compress.go +++ b/pkg/compress.go diff --git a/internal/pkg/compress_test.go b/pkg/compress_test.go index 7ce00edf..d737cdd7 100644 --- a/internal/pkg/compress_test.go +++ b/pkg/compress_test.go @@ -10,7 +10,7 @@ import ( "testing/fstest" "hakurei.app/check" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) func TestDecompress(t *testing.T) { diff --git a/internal/pkg/exec.go b/pkg/exec.go index b40ae84b..b40ae84b 100644 --- a/internal/pkg/exec.go +++ b/pkg/exec.go diff --git a/internal/pkg/exec_test.go b/pkg/exec_test.go index 408d6257..051af551 100644 --- a/internal/pkg/exec_test.go +++ b/pkg/exec_test.go @@ -20,10 +20,10 @@ import ( "hakurei.app/container" "hakurei.app/hst" "hakurei.app/internal/info" - "hakurei.app/internal/pkg" "hakurei.app/internal/stub" + "hakurei.app/pkg" - "hakurei.app/internal/pkg/internal/testtool/expected" + "hakurei.app/pkg/internal/testtool/expected" ) // testtoolBin is the container test tool binary made available to the @@ -47,7 +47,7 @@ func init() { // scanLinesCR is like [bufio.ScanLines], but also treats a bare \r as an // end-of-line marker. // -//go:linkname scanLinesCR hakurei.app/internal/pkg.scanLinesCR +//go:linkname scanLinesCR hakurei.app/pkg.scanLinesCR func scanLinesCR(data []byte, atEOF bool) (advance int, token []byte, err error) func TestScan(t *testing.T) { @@ -254,7 +254,7 @@ func TestExec(t *testing.T) { } if !bytes.HasPrefix(faultStatus, []byte( - "internal/pkg ", + "hakurei.app/pkg ", )) || !bytes.Contains(faultStatus, []byte( "\ninit: fork/exec /opt/bin/testtool: no such file or directory\n", )) { diff --git a/internal/pkg/file.go b/pkg/file.go index 14467153..14467153 100644 --- a/internal/pkg/file.go +++ b/pkg/file.go diff --git a/internal/pkg/file_test.go b/pkg/file_test.go index f6fcc96f..5742ca04 100644 --- a/internal/pkg/file_test.go +++ b/pkg/file_test.go @@ -5,7 +5,7 @@ import ( "testing" "hakurei.app/check" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) func TestFile(t *testing.T) { diff --git a/internal/pkg/internal/testtool/expected/expected.go b/pkg/internal/testtool/expected/expected.go index c0e8e4a2..c0e8e4a2 100644 --- a/internal/pkg/internal/testtool/expected/expected.go +++ b/pkg/internal/testtool/expected/expected.go diff --git a/internal/pkg/internal/testtool/expected/sum_amd64.go b/pkg/internal/testtool/expected/sum_amd64.go index 354931be..354931be 100644 --- a/internal/pkg/internal/testtool/expected/sum_amd64.go +++ b/pkg/internal/testtool/expected/sum_amd64.go diff --git a/internal/pkg/internal/testtool/expected/sum_arm64.go b/pkg/internal/testtool/expected/sum_arm64.go index 2e6f7cbf..2e6f7cbf 100644 --- a/internal/pkg/internal/testtool/expected/sum_arm64.go +++ b/pkg/internal/testtool/expected/sum_arm64.go diff --git a/internal/pkg/internal/testtool/expected/sum_riscv64.go b/pkg/internal/testtool/expected/sum_riscv64.go index 53872c08..53872c08 100644 --- a/internal/pkg/internal/testtool/expected/sum_riscv64.go +++ b/pkg/internal/testtool/expected/sum_riscv64.go diff --git a/internal/pkg/internal/testtool/main.go b/pkg/internal/testtool/main.go index 96a85058..edffab7e 100644 --- a/internal/pkg/internal/testtool/main.go +++ b/pkg/internal/testtool/main.go @@ -17,7 +17,7 @@ import ( "hakurei.app/fhs" "hakurei.app/vfs" - "hakurei.app/internal/pkg/internal/testtool/expected" + "hakurei.app/pkg/internal/testtool/expected" ) func main() { diff --git a/internal/pkg/ir.go b/pkg/ir.go index d9f984a7..d9f984a7 100644 --- a/internal/pkg/ir.go +++ b/pkg/ir.go diff --git a/internal/pkg/ir_test.go b/pkg/ir_test.go index 312474bc..9cc024ae 100644 --- a/internal/pkg/ir_test.go +++ b/pkg/ir_test.go @@ -8,7 +8,7 @@ import ( "testing" "hakurei.app/check" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) func TestIRRoundtrip(t *testing.T) { diff --git a/internal/pkg/net.go b/pkg/net.go index cd30e3bb..cd30e3bb 100644 --- a/internal/pkg/net.go +++ b/pkg/net.go diff --git a/internal/pkg/net_test.go b/pkg/net_test.go index d809d35f..b16a2019 100644 --- a/internal/pkg/net_test.go +++ b/pkg/net_test.go @@ -11,7 +11,7 @@ import ( "unique" "hakurei.app/check" - "hakurei.app/internal/pkg" + "hakurei.app/pkg" ) func TestHTTPGet(t *testing.T) { diff --git a/internal/pkg/pkg.go b/pkg/pkg.go index 268d0248..5d9d8d48 100644 --- a/internal/pkg/pkg.go +++ b/pkg/pkg.go @@ -1,4 +1,9 @@ -// Package pkg provides utilities for packaging software. +// Package pkg provides low-level primitives for packaging software. +// +// The public interface, IR format, and IR representation of [Artifact] +// implementations not satisfying [RevisionArtifact] are covered by the +// compatibility promise. [RevisionArtifact] revisions may change between any +// two releases. package pkg import ( @@ -40,7 +45,7 @@ import ( const ( // programName is the string identifying this build system. - programName = "internal/pkg" + programName = "hakurei.app/pkg" ) type ( diff --git a/internal/pkg/pkg_test.go b/pkg/pkg_test.go index b23948f8..c11b6ac4 100644 --- a/internal/pkg/pkg_test.go +++ b/pkg/pkg_test.go @@ -30,9 +30,9 @@ import ( "hakurei.app/fhs" "hakurei.app/internal/info" "hakurei.app/internal/landlock" - "hakurei.app/internal/pkg" "hakurei.app/internal/stub" "hakurei.app/message" + "hakurei.app/pkg" ) var skipLock = func() pkg.CacheAttr { @@ -48,23 +48,23 @@ var ( // extension is a string uniquely identifying a set of custom [Artifact] // implementations registered by calling [Register]. // - //go:linkname extension hakurei.app/internal/pkg.extension + //go:linkname extension hakurei.app/pkg.extension extension string // opened is false if [Open] was never called. // - //go:linkname opened hakurei.app/internal/pkg.opened + //go:linkname opened hakurei.app/pkg.opened opened bool // irArtifact refers to artifact IR interpretation functions and must not be // written to directly. // - //go:linkname irArtifact hakurei.app/internal/pkg.irArtifact + //go:linkname irArtifact hakurei.app/pkg.irArtifact irArtifact map[pkg.Kind]pkg.IRReadFunc // statusHeader is the header written to all status files in dirStatus. // - //go:linkname statusHeader hakurei.app/internal/pkg.statusHeader + //go:linkname statusHeader hakurei.app/pkg.statusHeader statusHeader string ) diff --git a/internal/pkg/tar.go b/pkg/tar.go index 9a8c4b76..9a8c4b76 100644 --- a/internal/pkg/tar.go +++ b/pkg/tar.go diff --git a/internal/pkg/tar_test.go b/pkg/tar_test.go index 1f280e9c..5462714f 100644 --- a/internal/pkg/tar_test.go +++ b/pkg/tar_test.go @@ -12,8 +12,8 @@ import ( "testing/fstest" "hakurei.app/check" - "hakurei.app/internal/pkg" "hakurei.app/internal/stub" + "hakurei.app/pkg" ) func TestTar(t *testing.T) { |
