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=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:buildcache,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=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:buildcache,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}')"