Match the forge's 404 by its status, not by digits a path's sha may hold (issue 1845)
mesh/merge-gate head 4a0c77105943 merged into trunk 2b635e2138ae — pass: builds mesh-delivery-checker → novox; no bus step; every machine composes with the…
mesh/repo-check head 4a0c77105943 merged into trunk 2b635e2138ae — pass: its merge-check.sh passed
mesh/delivery delivered
mesh/check pass 4a0c77105943 on 2b635e2138ae | unit 371 run 0 kept | int 410 run 0 kept | clone 13s unit 206ms int 14s+45s | composition not yet run
mesh/merge-gate head 4a0c77105943 merged into trunk 2b635e2138ae — pass: builds mesh-delivery-checker → novox; no bus step; every machine composes with the…
mesh/repo-check head 4a0c77105943 merged into trunk 2b635e2138ae — pass: its merge-check.sh passed
mesh/delivery delivered
mesh/check pass 4a0c77105943 on 2b635e2138ae | unit 371 run 0 kept | int 410 run 0 kept | clone 13s unit 206ms int 14s+45s | composition not yet run
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"mesh-delivery-checker/internal/check"
|
"mesh-delivery-checker/internal/check"
|
||||||
@@ -18,6 +19,9 @@ const (
|
|||||||
commitsTool = "gitea.gitea_commits"
|
commitsTool = "gitea.gitea_commits"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// notFoundStatus is the 404 of the forge's error, `Gitea API <path>: <status> <body>`.
|
||||||
|
var notFoundStatus = regexp.MustCompile(`: 404( |$)`)
|
||||||
|
|
||||||
// forgeReads reads the forge through call (mesh-sdk process.Conn.Call as the checker's own account).
|
// forgeReads reads the forge through call (mesh-sdk process.Conn.Call as the checker's own account).
|
||||||
type forgeReads struct {
|
type forgeReads struct {
|
||||||
call func(key string, body any) (json.RawMessage, error)
|
call func(key string, body any) (json.RawMessage, error)
|
||||||
@@ -33,8 +37,9 @@ func (f forgeReads) File(_ context.Context, repository, path, ref string) (strin
|
|||||||
owner, repo := ownerRepo(repository)
|
owner, repo := ownerRepo(repository)
|
||||||
raw, err := f.call(getFileTool, map[string]string{"owner": owner, "repo": repo, "path": path, "ref": ref})
|
raw, err := f.call(getFileTool, map[string]string{"owner": owner, "repo": repo, "path": path, "ref": ref})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if strings.Contains(err.Error(), "404") {
|
if notFoundStatus.MatchString(err.Error()) {
|
||||||
// The forge answers 404 for a file the ref does not hold (issue 1845).
|
// The forge answers 404 for a file the ref does not hold (issue 1845). The status is matched in its own place,
|
||||||
|
// after the path's colon: the path carries a sha that may hold the digits 404.
|
||||||
return "", fmt.Errorf("%w: %v", check.ErrNotFound, err)
|
return "", fmt.Errorf("%w: %v", check.ErrNotFound, err)
|
||||||
}
|
}
|
||||||
return "", err
|
return "", err
|
||||||
|
|||||||
@@ -79,7 +79,9 @@ func TestAFileTheRefDoesNotHoldIsNotFoundAndOtherFailuresAreNot(t *testing.T) {
|
|||||||
if _, err := f.File(context.Background(), "novox/mesh-catalog", "checks/particulars/go.mod", "98ca97fc"); !errors.Is(err, check.ErrNotFound) {
|
if _, err := f.File(context.Background(), "novox/mesh-catalog", "checks/particulars/go.mod", "98ca97fc"); !errors.Is(err, check.ErrNotFound) {
|
||||||
t.Errorf("a 404 is %v, want ErrNotFound", err)
|
t.Errorf("a 404 is %v, want ErrNotFound", err)
|
||||||
}
|
}
|
||||||
f = forgeReads{call: func(string, any) (json.RawMessage, error) { return nil, errors.New("Gitea API: 500 internal error") }}
|
f = forgeReads{call: func(string, any) (json.RawMessage, error) {
|
||||||
|
return nil, errors.New("Gitea API contents/go.mod?ref=1111111111111111111111111111111404abcde: 500 internal error")
|
||||||
|
}}
|
||||||
if _, err := f.File(context.Background(), "novox/mesh-catalog", "go.mod", "main"); err == nil || errors.Is(err, check.ErrNotFound) {
|
if _, err := f.File(context.Background(), "novox/mesh-catalog", "go.mod", "main"); err == nil || errors.Is(err, check.ErrNotFound) {
|
||||||
t.Errorf("a 500 is %v, want a failure that is not ErrNotFound", err)
|
t.Errorf("a 500 is %v, want a failure that is not ErrNotFound", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user