CAT-BN3: mesh-build-node publishes through the registry seats and holds no registry credential
Bundles go through oci-artifact-registry and answer the seat's reference; a trunk package is packed under the builder's version and published through npm-package-registry, so the holder can check it with the builder. Reads are anonymous, so the write pair, the sealed secret and the store's address go. The one-part sender moves into buildstep for both build modules, so the move to the registry clients is made in one place. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
@@ -49,7 +49,7 @@ func toolchainIn(t *testing.T, fake *fakeNpm) Toolchain {
|
||||
os.WriteFile(filepath.Join(home, "toolchain", "package-lock.json"), []byte(`{"lock":1}`), 0o600)
|
||||
return Toolchain{Paths: Paths{Home: home, Cache: cache}, Run: fake.run,
|
||||
Registry: func() (Registry, error) {
|
||||
return Registry{URL: "https://git.novox.be/api/packages/novox/npm/", Username: "mesh-build-node", Password: "pw"}, nil
|
||||
return Registry{URL: "https://git.novox.be/api/packages/novox/npm/"}, nil
|
||||
}}
|
||||
}
|
||||
|
||||
@@ -106,13 +106,10 @@ func TestTheInstallNamesTheRegistryInAConfigFileNotOnTheCommandLine(t *testing.T
|
||||
if err := tc.Ensure(context.Background(), "v1"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !strings.Contains(npmrc, "@novox:registry=https://git.novox.be/api/packages/novox/npm/\n") ||
|
||||
!strings.Contains(npmrc, "//git.novox.be/api/packages/novox/npm/:_auth=") {
|
||||
// Reads are anonymous (ADR 0346, CAT-BN3): the scope's registry and no credential.
|
||||
if npmrc != "@novox:registry=https://git.novox.be/api/packages/novox/npm/\n" {
|
||||
t.Errorf("npmrc = %q", npmrc)
|
||||
}
|
||||
if strings.Contains(strings.Join(fake.calls[0].args, " "), "pw") {
|
||||
t.Errorf("the credential is on the command line: %v", fake.calls[0].args)
|
||||
}
|
||||
}
|
||||
|
||||
// 1488/AC4: an install that fails leaves no directory taken for a toolchain, says why, and the next call tries again.
|
||||
@@ -158,18 +155,17 @@ func TestPrepareInstallsOnlyBehindAPassingGuard(t *testing.T) {
|
||||
|
||||
func TestRegistryFromTheBinding(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
b, s := filepath.Join(dir, "b.json"), filepath.Join(dir, "s")
|
||||
os.WriteFile(s, []byte("secret\n"), 0o600)
|
||||
b := filepath.Join(dir, "b.json")
|
||||
os.WriteFile(b, []byte(`{"provision":"npm-package-registry","at":"10.42.0.1","as":"mesh-build-node-ace","serves":{"scheme":"http","port":3000,"npm-path":"/api/packages/novox/npm/"}}`), 0o600)
|
||||
r, err := ReadRegistry(b, s)
|
||||
if err != nil || r.URL != "http://10.42.0.1:3000/api/packages/novox/npm/" || r.Username != "mesh-build-node-ace" || r.Password != "secret" {
|
||||
r, err := ReadRegistry(b)
|
||||
if err != nil || r.URL != "http://10.42.0.1:3000/api/packages/novox/npm/" || r.Npmrc() != "@novox:registry=http://10.42.0.1:3000/api/packages/novox/npm/\n" {
|
||||
t.Fatalf("= %+v, %v", r, err)
|
||||
}
|
||||
os.WriteFile(b, []byte(`{"at":"h","as":"a","serves":{"port":1,"npm-path":"/p/","public-root":"https://git.novox.be/p"}}`), 0o600)
|
||||
if r, _ := ReadRegistry(b, s); r.URL != "https://git.novox.be/p/" {
|
||||
if r, _ := ReadRegistry(b); r.URL != "https://git.novox.be/p/" {
|
||||
t.Errorf("the public root is not preferred: %q", r.URL)
|
||||
}
|
||||
if _, err := ReadRegistry(filepath.Join(dir, "none"), s); err == nil {
|
||||
if _, err := ReadRegistry(filepath.Join(dir, "none")); err == nil {
|
||||
t.Errorf("no binding was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user