Files
inter-hub/.gitea/workflows/deploy.yaml
tegwick 645590268e
Some checks failed
Build and Deploy / build-push-deploy (push) Failing after 4m4s
ci: harden inter-hub production smoke gate
2026-06-14 19:59:00 +02:00

93 lines
3.2 KiB
YAML

name: Build and Deploy
on:
push:
branches: [main]
paths-ignore:
- ".custodian-brief.md"
- ".sops.yaml"
- "app.toml"
- "deploy/railiance/**"
- "docs/**"
- "workplans/**"
workflow_dispatch:
jobs:
build-push-deploy:
runs-on: [self-hosted, haskelseed]
timeout-minutes: 120
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build OCI image
shell: bash -l {0}
run: |
set -euo pipefail
nix build .#docker \
--accept-flake-config \
--option lazy-trees false \
--log-format bar-with-logs
- name: Push image to Gitea registry
shell: bash -l {0}
env:
REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
run: |
set -euo pipefail
SHA=$(git rev-parse --short HEAD)
TOKEN=$(
curl -fsS \
"https://gitea.coulomb.social/v2/token?service=container_registry&scope=repository:coulomb/inter-hub:push,pull" \
-u "tegwick:${REGISTRY_TOKEN}" \
| awk -F'"' '/token/{print $4}'
)
if [ -z "${TOKEN}" ]; then
echo "Failed to obtain Gitea registry token" >&2
exit 1
fi
skopeo copy --insecure-policy \
--dest-registry-token "${TOKEN}" \
docker-archive:result \
"docker://gitea.coulomb.social/coulomb/inter-hub:${SHA}"
# Also tag as latest
skopeo copy --insecure-policy \
--dest-registry-token "${TOKEN}" \
docker-archive:result \
"docker://gitea.coulomb.social/coulomb/inter-hub:latest"
echo "Pushed inter-hub:${SHA} and inter-hub:latest"
- name: Deploy to Railiance01
shell: bash -l {0}
env:
KUBECONFIG: ${{ secrets.RAILIANCE01_KUBECONFIG }}
run: |
set -euo pipefail
SHA=$(git rev-parse --short HEAD)
helm upgrade --install inter-hub deploy/helm/inter-hub \
--namespace inter-hub --create-namespace \
--set image.tag="${SHA}" \
--wait --timeout 5m
- name: Smoke test
run: |
set -euo pipefail
# Give the new pod time to start
sleep 15
curl -sf --retry 5 --retry-delay 5 https://hub.coulomb.social/ \
| grep -q "inter-hub" && echo "Landing page OK"
curl -s https://hub.coulomb.social/api/v2/widgets \
-o /dev/null -w "%{http_code}" | grep -q "401" && echo "API auth gate OK"
HUBS_STATUS=$(curl -s https://hub.coulomb.social/api/v2/hubs \
-o /dev/null -w "%{http_code}")
test "${HUBS_STATUS}" = "401" \
&& echo "Hub bootstrap auth gate OK" \
|| { echo "Expected /api/v2/hubs to return 401, got ${HUBS_STATUS}" >&2; exit 1; }
OPENAPI=$(curl -fsS https://hub.coulomb.social/api/v2/openapi.json)
for path in /hubs /hub-capability-manifests /api-consumers /policy-scopes; do
grep -q "\"${path}\"" <<< "${OPENAPI}" \
&& echo "OpenAPI path present: ${path}" \
|| { echo "OpenAPI path missing: ${path}" >&2; exit 1; }
done