Files
planet/.gitea/workflows/deploy-staging.yaml
rayd1o d9efd98d26
Some checks failed
ci / backend (push) Has been cancelled
ci / frontend (push) Has been cancelled
ci / delivery (push) Has been cancelled
release / images (push) Has been cancelled
release: bump version to 0.53.0
2026-05-13 08:05:43 +08:00

68 lines
2.7 KiB
YAML

name: deploy-staging
on:
workflow_dispatch:
push:
branches:
- main
env:
REGISTRY: gitea.rclaw.top
IMAGE_NAMESPACE: linkong/planet
RELEASE_NAME: planet-staging
NAMESPACE: planet-staging
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install deploy tools
run: |
mkdir -p "$HOME/.local/bin"
curl -fsSL https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz -o /tmp/helm.tar.gz
tar -xzf /tmp/helm.tar.gz -C /tmp
mv /tmp/linux-amd64/helm "$HOME/.local/bin/helm"
curl -fsSL https://dl.k8s.io/release/v1.30.5/bin/linux/amd64/kubectl -o /tmp/kubectl
install -m 0755 /tmp/kubectl "$HOME/.local/bin/kubectl"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Configure kubeconfig
run: |
mkdir -p "$HOME/.kube"
printf "%s" "${{ secrets.KUBE_CONFIG_STAGING }}" | base64 -d > "$HOME/.kube/config"
chmod 600 "$HOME/.kube/config"
- name: Deploy Helm release
run: |
kubectl create namespace "$NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
helm upgrade --install "$RELEASE_NAME" deploy/helm/planet \
--namespace "$NAMESPACE" \
-f deploy/helm/planet/values.single-node.yaml \
--set global.imageRegistry="$REGISTRY" \
--set global.imageNamespace="$IMAGE_NAMESPACE" \
--set image.tag="${GITHUB_SHA}"
- name: Wait for rollout
run: |
kubectl rollout status deployment/planet-frontend -n "$NAMESPACE" --timeout=180s
kubectl rollout status deployment/planet-backend -n "$NAMESPACE" --timeout=180s
kubectl rollout status deployment/planet-aiprovider -n "$NAMESPACE" --timeout=180s
- name: Smoke test services
run: |
kubectl run planet-smoke-${GITHUB_RUN_NUMBER} \
--rm -i --restart=Never \
--namespace "$NAMESPACE" \
--image=curlimages/curl:8.11.1 \
--command -- sh -c '
set -eu
curl -fsS http://planet-frontend:3000/ >/dev/null
curl -fsS http://planet-frontend:3000/health >/dev/null
curl -fsS http://planet-frontend:3000/api/health >/dev/null
curl -fsS http://planet-backend:8000/health >/dev/null
curl -fsS http://planet-aiprovider:8010/health >/dev/null
'
- name: Collect diagnostics on failure
if: failure()
run: |
kubectl get all -n "$NAMESPACE" -o wide || true
kubectl describe pods -n "$NAMESPACE" || true
kubectl logs -n "$NAMESPACE" -l app.kubernetes.io/instance="$RELEASE_NAME" --all-containers --tail=200 || true