64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
package deploy
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"go.yaml.in/yaml/v4"
|
|
)
|
|
|
|
func TestCIValidatesProtocolAndDeploymentAssets(t *testing.T) {
|
|
payload, err := os.ReadFile("../.github/workflows/ci.yml")
|
|
if err != nil {
|
|
t.Fatalf("read ci workflow: %v", err)
|
|
}
|
|
workflow := string(payload)
|
|
var document map[string]any
|
|
if err := yaml.Unmarshal(payload, &document); err != nil {
|
|
t.Fatalf("parse ci workflow: %v", err)
|
|
}
|
|
jobs, ok := document["jobs"].(map[string]any)
|
|
if !ok {
|
|
t.Fatal("ci workflow has no jobs")
|
|
}
|
|
for _, name := range []string{"openapi", "proto", "deployment", "test", "race", "integration"} {
|
|
if _, exists := jobs[name]; !exists {
|
|
t.Errorf("ci workflow has no %s job", name)
|
|
}
|
|
}
|
|
for _, required := range []string{
|
|
"./scripts/verify-openapi.ps1",
|
|
"./scripts/verify-proto.ps1",
|
|
"docker compose -f deploy/docker-compose.yml config --quiet",
|
|
"kubectl kustomize deploy/kubernetes/base",
|
|
"kubectl kustomize deploy/kubernetes/overlays/development-mtls",
|
|
"go run ./deploy/tools/configcheck deploy/kubernetes/overlays/development-mtls/config.yaml",
|
|
} {
|
|
if !strings.Contains(workflow, required) {
|
|
t.Errorf("ci workflow does not validate %q", required)
|
|
}
|
|
}
|
|
deployment, ok := jobs["deployment"].(map[string]any)
|
|
if !ok {
|
|
t.Fatal("ci deployment job has invalid definition")
|
|
}
|
|
steps, ok := deployment["steps"].([]any)
|
|
if !ok {
|
|
t.Fatal("ci deployment job has no steps")
|
|
}
|
|
for _, step := range steps {
|
|
definition, ok := step.(map[string]any)
|
|
if !ok || definition["uses"] != "actions/setup-go@v5" {
|
|
continue
|
|
}
|
|
options, ok := definition["with"].(map[string]any)
|
|
if !ok || options["go-version-file"] != "go.mod" {
|
|
t.Error("ci deployment job must pin actions/setup-go to go.mod")
|
|
return
|
|
}
|
|
return
|
|
}
|
|
t.Error("ci deployment job must install the Go version declared by go.mod before running configcheck")
|
|
}
|