Some checks failed
CI / Build Check (pull_request) Failing after 4m51s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
102 lines
3.0 KiB
YAML
102 lines
3.0 KiB
YAML
name: Deploy
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
env:
|
|
PNPM_VERSION: 9
|
|
NODE_VERSION: 20
|
|
REGISTRY: gitea.tegical.world
|
|
IMAGE_PREFIX: tegical/seclusion
|
|
|
|
jobs:
|
|
build-and-push:
|
|
name: Build and Push Images
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
image_tag: ${{ steps.meta.outputs.tag }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Generate image tag
|
|
id: meta
|
|
run: |
|
|
echo "tag=$(date +%Y%m%d%H%M%S)-${GITHUB_SHA::8}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Login to Gitea Container Registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ secrets.REGISTRY_USERNAME }}
|
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
|
|
|
- name: Build and push Web image
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: ./apps/web/Dockerfile
|
|
push: true
|
|
tags: |
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:${{ steps.meta.outputs.tag }}
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:latest
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
|
|
- name: Build and push API image
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: ./apps/api/Dockerfile
|
|
push: true
|
|
tags: |
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:${{ steps.meta.outputs.tag }}
|
|
${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:latest
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
|
|
deploy:
|
|
name: Deploy to Knative
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-push
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup kubectl
|
|
uses: azure/setup-kubectl@v4
|
|
|
|
- name: Configure kubeconfig
|
|
run: |
|
|
mkdir -p ~/.kube
|
|
echo "${{ secrets.KUBECONFIG }}" | base64 -d > ~/.kube/config
|
|
chmod 600 ~/.kube/config
|
|
|
|
- name: Update image tags in manifests
|
|
run: |
|
|
IMAGE_TAG=${{ needs.build-and-push.outputs.image_tag }}
|
|
sed -i "s|IMAGE_TAG_PLACEHOLDER|${IMAGE_TAG}|g" deploy/k8s/*.yaml
|
|
|
|
- name: Deploy to Knative
|
|
run: |
|
|
kubectl apply -f deploy/k8s/namespace.yaml
|
|
kubectl apply -f deploy/k8s/configmap.yaml
|
|
kubectl apply -f deploy/k8s/secret.yaml
|
|
kubectl apply -f deploy/k8s/web-ksvc.yaml
|
|
kubectl apply -f deploy/k8s/api-ksvc.yaml
|
|
|
|
- name: Wait for services to be ready
|
|
run: |
|
|
kubectl wait --for=condition=Ready ksvc/seclusion-web -n seclusion --timeout=300s
|
|
kubectl wait --for=condition=Ready ksvc/seclusion-api -n seclusion --timeout=300s
|
|
|
|
- name: Get service URLs
|
|
run: |
|
|
echo "Web URL: $(kubectl get ksvc seclusion-web -n seclusion -o jsonpath='{.status.url}')"
|
|
echo "API URL: $(kubectl get ksvc seclusion-api -n seclusion -o jsonpath='{.status.url}')"
|