name: Build and Deploy on: push: branches: - main - master jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: config-inline: | [registry."docker.io"] mirrors = ["https://docker.m.daocloud.io", "https://docker.1panel.live", "https://hub.rat.dev"] - name: Login to Huawei Cloud SWR uses: docker/login-action@v2 with: registry: ${{ secrets.SWR_SERVER }} username: ${{ secrets.SWR_USERNAME }} password: ${{ secrets.SWR_PASSWORD }} - name: Build and Push Backend run: | set -o pipefail docker buildx build \ --push \ --provenance=false \ --tag ${{ secrets.SWR_SERVER }}/${{ secrets.SWR_ORG }}/video-backend:latest \ ./backend 2>&1 | tee /tmp/build.log - name: Build and Push Web run: | set -o pipefail docker buildx build \ --push \ --provenance=false \ --tag ${{ secrets.SWR_SERVER }}/${{ secrets.SWR_ORG }}/video-web:latest \ ./web 2>&1 | tee -a /tmp/build.log - name: Setup Kubectl run: | curl -LO "https://dl.k8s.io/release/v1.28.2/bin/linux/amd64/kubectl" || \ curl -LO "https://cdn.dl.k8s.io/release/v1.28.2/bin/linux/amd64/kubectl" chmod +x kubectl mv kubectl /usr/local/bin/ - name: Deploy to K3s uses: Azure/k8s-set-context@v3 with: method: kubeconfig kubeconfig: ${{ secrets.KUBE_CONFIG }} - name: Apply K8s Manifests run: | # Replace image placeholders sed -i "s|\${CI_REGISTRY_IMAGE}/video-backend:latest|${{ secrets.SWR_SERVER }}/${{ secrets.SWR_ORG }}/video-backend:latest|g" k8s/backend-deployment.yaml sed -i "s|\${CI_REGISTRY_IMAGE}/video-web:latest|${{ secrets.SWR_SERVER }}/${{ secrets.SWR_ORG }}/video-web:latest|g" k8s/web-deployment.yaml # Apply all manifests set -o pipefail { kubectl apply -f k8s/backend-deployment.yaml kubectl apply -f k8s/web-deployment.yaml kubectl apply -f k8s/ingress.yaml kubectl rollout restart deployment/video-backend kubectl rollout restart deployment/video-web } 2>&1 | tee /tmp/deploy.log - name: Report failure if: failure() run: | BUILD_LOG="" DEPLOY_LOG="" if [ -f /tmp/build.log ]; then BUILD_LOG=$(tail -50 /tmp/build.log | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g') fi if [ -f /tmp/deploy.log ]; then DEPLOY_LOG=$(tail -50 /tmp/deploy.log | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g') fi echo "Build failed on branch ${{ github.ref_name }}" echo "Build log: ${BUILD_LOG}" echo "Deploy log: ${DEPLOY_LOG}"