name: Deploy Prod on: push: branches: [ "main" ] paths: - ../../7project/src/backend/** - ../../7project/src/frontend/** - ../../7project/src/charts/myapp-chart/** - .github/workflows/deploy-prod.yaml - .github/workflows/build-image.yaml - .github/workflows/frontend-pages.yml workflow_dispatch: permissions: contents: read concurrency: group: deploy-prod cancel-in-progress: false jobs: test: name: Run Python Tests uses: ./.github/workflows/run-tests.yml build: name: Build and push image (reusable) needs: [test] uses: ./.github/workflows/build-image.yaml with: mode: prod image_repo: lukastrkan/cc-app-demo context: 7project/src/backend secrets: inherit get_urls: name: Generate Production URLs needs: [test] uses: ./.github/workflows/url_generator.yml with: mode: prod runner: vhs base_domain: ${{ vars.PROD_DOMAIN }} secrets: inherit frontend: name: Frontend - Build and Deploy to Cloudflare Pages (prod) needs: [get_urls] uses: ./.github/workflows/frontend-pages.yml with: mode: prod backend_url_scheme: ${{ needs.get_urls.outputs.backend_url_scheme }} secrets: inherit deploy: name: Helm upgrade/install (prod) runs-on: vhs needs: [build, frontend, get_urls] steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Helm uses: azure/setup-helm@v4 - name: Setup kubectl uses: azure/setup-kubectl@v4 - name: Configure kubeconfig env: KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }} run: | mkdir -p ~/.kube if [ -z "$KUBE_CONFIG" ]; then echo "Secret KUBE_CONFIG is required (kubeconfig content)"; exit 1; fi echo "$KUBE_CONFIG" > ~/.kube/config chmod 600 ~/.kube/config - name: Helm upgrade/install prod env: DOMAIN: ${{ needs.get_urls.outputs.backend_url }} DOMAIN_SCHEME: ${{ needs.get_urls.outputs.backend_url_scheme }} FRONTEND_DOMAIN: ${{ needs.get_urls.outputs.frontend_url }} FRONTEND_DOMAIN_SCHEME: ${{ needs.get_urls.outputs.frontend_url_scheme }} RABBITMQ_PASSWORD: ${{ secrets.PROD_RABBITMQ_PASSWORD }} DB_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }} DIGEST: ${{ needs.build.outputs.digest }} BANKID_CLIENT_ID: ${{ secrets.BANKID_CLIENT_ID }} BANKID_CLIENT_SECRET: ${{ secrets.BANKID_CLIENT_SECRET }} MOJEID_CLIENT_ID: ${{ secrets.MOJEID_CLIENT_ID }} MOJEID_CLIENT_SECRET: ${{ secrets.MOJEID_CLIENT_SECRET }} CSAS_CLIENT_ID: ${{ secrets.CSAS_CLIENT_ID }} CSAS_CLIENT_SECRET: ${{ secrets.CSAS_CLIENT_SECRET }} SENTRY_DSN: ${{ secrets.SENTRY_DSN }} SMTP_HOST: ${{ secrets.SMTP_HOST }} SMTP_PORT: ${{ secrets.SMTP_PORT }} SMTP_USERNAME: ${{ secrets.SMTP_USERNAME }} SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }} SMTP_USE_TLS: ${{ secrets.SMTP_USE_TLS }} SMTP_USE_SSL: ${{ secrets.SMTP_USE_SSL }} SMTP_FROM: ${{ secrets.SMTP_FROM }} UNIRATE_API_KEY: ${{ secrets.UNIRATE_API_KEY }} run: | helm upgrade --install myapp ./7project/src/charts/myapp-chart \ -n prod --create-namespace \ -f 7project/src/charts/myapp-chart/values-prod.yaml \ --set deployment="prod" \ --set domain="$DOMAIN" \ --set domain_scheme="$DOMAIN_SCHEME" \ --set frontend_domain="$FRONTEND_DOMAIN" \ --set frontend_domain_scheme="$FRONTEND_DOMAIN_SCHEME" \ --set image.digest="$DIGEST" \ --set-string rabbitmq.password="$RABBITMQ_PASSWORD" \ --set-string database.password="$DB_PASSWORD" \ --set-string oauth.bankid.clientId="$BANKID_CLIENT_ID" \ --set-string oauth.bankid.clientSecret="$BANKID_CLIENT_SECRET" \ --set-string oauth.mojeid.clientId="$MOJEID_CLIENT_ID" \ --set-string oauth.mojeid.clientSecret="$MOJEID_CLIENT_SECRET" \ --set-string oauth.csas.clientId="$CSAS_CLIENT_ID" \ --set-string oauth.csas.clientSecret="$CSAS_CLIENT_SECRET" \ --set-string sentry_dsn="$SENTRY_DSN" \ --set-string database.encryptionSecret="${{ secrets.PROD_DB_ENCRYPTION_KEY }}" \ --set-string smtp.host="$SMTP_HOST" \ --set smtp.port="$SMTP_PORT" \ --set-string smtp.username="$SMTP_USERNAME" \ --set-string smtp.password="$SMTP_PASSWORD" \ --set-string smtp.tls="$SMTP_USE_TLS" \ --set-string smtp.ssl="$SMTP_USE_SSL" \ --set-string smtp.from="$SMTP_FROM" \ --set-string unirate.key="$UNIRATE_API_KEY"