mirror of
https://github.com/cozystack/cozystack.git
synced 2026-10-27 07:14:04 +09:00
The shell translator rewrites test bodies and loses Bats reporting. The unit lane needs complete TAP results and JUnit reports without changing how live-cluster suites run. Sourced production helpers still need a dash pass, and unit test bodies need nounset without exporting shell options into subprocesses. Assisted-by: LLM Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>
65 lines
3.0 KiB
Bash
65 lines
3.0 KiB
Bash
#!/usr/bin/env bats
|
|
# Chart-wide invariant for packages/core/platform/sources:
|
|
#
|
|
# Every *-application PackageSource that ships a `system/*-rd` component renders
|
|
# an ApplicationDefinition (cozystack.io/v1alpha1). That CRD is installed by the
|
|
# application-definition-crd component of cozystack.cozystack-engine. Without an
|
|
# explicit `dependsOn: cozystack.cozystack-engine`, a fresh install where Flux
|
|
# happens to reconcile the *-application source before cozystack-engine fails to
|
|
# render with `no matches for kind "ApplicationDefinition" in version
|
|
# "cozystack.io/v1alpha1"`, which cascades into a broad install timeout.
|
|
#
|
|
# This invariant is generic: any future *-application source that adds a
|
|
# system/*-rd component but forgets the cozystack-engine edge fails here, even
|
|
# though the individual source files are not enumerated below.
|
|
#
|
|
# Requires: yq (mikefarah v4+), jq. Both are available on the project's CI
|
|
# runners and on the maintainer workstation.
|
|
|
|
load test_helper
|
|
|
|
REPO_ROOT="$(cd "$(dirname "${BATS_TEST_FILENAME:-$0}")/.." && pwd)"
|
|
SOURCES_DIR="$REPO_ROOT/packages/core/platform/sources"
|
|
|
|
@test "every PackageSource with a system/*-rd component dependsOn cozystack.cozystack-engine" {
|
|
command -v yq >/dev/null || { echo "yq (mikefarah v4+) is required" >&2; exit 1; }
|
|
command -v jq >/dev/null || { echo "jq is required" >&2; exit 1; }
|
|
|
|
# yq streams one JSON object per source document; jq -s slurps the stream so
|
|
# every PackageSource variant can be evaluated as a single collection.
|
|
json="$(yq --output-format=json eval-all '.' "$SOURCES_DIR"/*.yaml)"
|
|
|
|
# A "-rd variant" is any variant whose components include a system/*-rd path.
|
|
rd_total="$(printf '%s' "$json" | jq -s '
|
|
[ .[]
|
|
| select(.kind == "PackageSource")
|
|
| (.spec.variants // [])[]
|
|
| select((.components // []) | any(.path // "" | test("^system/[a-z0-9-]+-rd$")))
|
|
] | length
|
|
')"
|
|
|
|
# Guard against a vacuous pass (empty glob / yq breakage): the platform ships
|
|
# many -rd sources, so discovering zero means this test itself is broken.
|
|
[ "$rd_total" -ge 1 ] || { echo "Discovered zero system/*-rd variants under $SOURCES_DIR - test is misconfigured" >&2; exit 1; }
|
|
|
|
offenders="$(printf '%s' "$json" | jq -rs '
|
|
[ .[]
|
|
| select(.kind == "PackageSource")
|
|
| .metadata.name as $name
|
|
| (.spec.variants // [])[]
|
|
| select((.components // []) | any(.path // "" | test("^system/[a-z0-9-]+-rd$")))
|
|
| select(((.dependsOn // []) | any(. == "cozystack.cozystack-engine")) | not)
|
|
| "\($name) [variant: \(.name)]"
|
|
] | .[]
|
|
')"
|
|
|
|
if [ -n "$offenders" ]; then
|
|
echo "PackageSources with a system/*-rd component but missing the cozystack.cozystack-engine dependsOn edge:" >&2
|
|
printf '%s\n' "$offenders" >&2
|
|
echo "Fix: add '- cozystack.cozystack-engine' to each listed variant's dependsOn (mirror sources/gateway-application.yaml)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Invariant holds: all $rd_total system/*-rd PackageSource variant(s) dependsOn cozystack.cozystack-engine"
|
|
}
|