Merge pull request 'The mesh delivers the launcher, which is the last link in self-update' (#56) from feat/142-the-mesh-delivers-the-launcher into main
This commit was merged in pull request #56.
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,48 @@
|
||||
package packaging_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// The mesh delivers the launcher, so the manifest carries a copy of it (novox/hq 04-ISSUES/142).
|
||||
//
|
||||
// **Two copies of one script is a drift waiting to happen**, and the only reason to accept it is that
|
||||
// a file resource is written atomically — temp file, then rename — while an archive writes in place
|
||||
// with truncate. The running launcher keeps the inode it was started from and the next start picks up
|
||||
// the new one; unpacking an archive over it would truncate the file a running shell is reading.
|
||||
//
|
||||
// So: two copies, and this is the check that they are the same one.
|
||||
func TestTheManifestCarriesTheLauncherExactly(t *testing.T) {
|
||||
onDisk, err := os.ReadFile("nox-mesh-host-launch")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
raw, err := os.ReadFile("../module.json")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var manifest struct {
|
||||
Resources []struct {
|
||||
ID string `json:"id"`
|
||||
Content string `json:"content"`
|
||||
} `json:"resources"`
|
||||
}
|
||||
if err := json.Unmarshal(raw, &manifest); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, r := range manifest.Resources {
|
||||
if r.ID != "launcher" {
|
||||
continue
|
||||
}
|
||||
if r.Content != string(onDisk) {
|
||||
t.Fatal("the launcher the mesh would deliver is not the launcher in this repository. " +
|
||||
"Copy packaging/nox-mesh-host-launch into module.json's `launcher` resource — the " +
|
||||
"machines run what the manifest says, and this file is what gets reviewed")
|
||||
}
|
||||
return
|
||||
}
|
||||
t.Fatal("module.json declares no `launcher` resource, so nothing delivers the launcher and a " +
|
||||
"delivered host version is never started")
|
||||
}
|
||||
Reference in New Issue
Block a user