54 lines
2.3 KiB
Bash
Executable File
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."
|