Files
anubis-kubernetes/test.sh
T
feedc0de bd9b087ec1
Validate, publish and promote Helm chart / Publish and promote chart (push) Successful in 26s
Validate, publish and promote Helm chart / Validate chart (push) Successful in 27s
Publish Anubis as an application-owned Helm chart
2026-10-18 21:23:18 +02:00

54 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
project_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
workdir=$(mktemp --directory)
trap 'rm -rf "${workdir}"' EXIT
sh -n "${project_dir}/install.sh"
sh -n "${project_dir}/scripts/chart-version.sh"
bash -n "${project_dir}/test.sh"
helm lint "${project_dir}/chart" --strict
helm lint "${project_dir}/chart" --strict \
--values "${project_dir}/examples/forward-auth-values.yaml"
helm template anubis "${project_dir}/chart" \
--namespace anubis > "${workdir}/defaults.yaml"
helm template anubis "${project_dir}/chart" \
--namespace default \
--values "${project_dir}/examples/forward-auth-values.yaml" \
> "${workdir}/forward-auth.yaml"
export EXPECTED_IMAGE="ghcr.io/techarohq/anubis:$(ruby -e \
'require "yaml"; puts YAML.load_file(ARGV.fetch(0)).fetch("appVersion")' \
"${project_dir}/chart/Chart.yaml")"
ruby - "${workdir}/defaults.yaml" "${workdir}/forward-auth.yaml" <<'RUBY'
require "yaml"
defaults = YAML.load_stream(File.read(ARGV.fetch(0))).compact
forward_auth = YAML.load_stream(File.read(ARGV.fetch(1))).compact
resource = ->(documents, kind, name) do
documents.find { |item| item["kind"] == kind && item.dig("metadata", "name") == name } or
abort "missing #{kind}/#{name}"
end
deployment = resource.call(defaults, "Deployment", "anubis")
service = resource.call(defaults, "Service", "anubis")
resource.call(defaults, "ConfigMap", "anubis-policy")
resource.call(forward_auth, "Middleware", "anubis")
resource.call(forward_auth, "IngressRoute", "git-anubis")
container = deployment.dig("spec", "template", "spec", "containers").fetch(0)
abort "unexpected image" unless container["image"] == ENV.fetch("EXPECTED_IMAGE")
healthcheck = ["anubis", "--healthcheck"]
abort "unexpected readiness probe" unless container.dig("readinessProbe", "exec", "command") == healthcheck
abort "unexpected liveness probe" unless container.dig("livenessProbe", "exec", "command") == healthcheck
secret = container.fetch("env").find { |item| item["name"] == "ED25519_PRIVATE_KEY_HEX" }
abort "unexpected signing Secret" unless secret.dig("valueFrom", "secretKeyRef", "name") == "anubis-key"
abort "unexpected Service ports" unless service.dig("spec", "ports").map { |port| port["name"] } == %w[http metrics]
RUBY
echo "Anubis chart, scripts, and rendered relationships are valid."