Remove inaccurate descriptions (#27) #23
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy Dashboard | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - staging | |
| workflow_dispatch: | |
| inputs: | |
| environment: | |
| description: Target deployment environment | |
| required: true | |
| type: choice | |
| options: | |
| - staging | |
| - prod | |
| permissions: | |
| contents: read | |
| env: | |
| AWS_EKS_PROD_CLUSTER_NAME: ${{ secrets.AWS_EKS_PROD_CLUSTER_NAME }} | |
| AWS_EKS_PROD_REGION: ${{ secrets.AWS_EKS_PROD_REGION }} | |
| DASHBOARD_IMAGE_REGISTRY: ${{ secrets.DASHBOARD_IMAGE_REGISTRY }} | |
| DASHBOARD_IMAGE_REPOSITORY: ${{ secrets.DASHBOARD_IMAGE_REPOSITORY }} | |
| DASHBOARD_KUBE_CONTAINER: ${{ secrets.DASHBOARD_KUBE_CONTAINER }} | |
| DASHBOARD_KUBE_DEPLOYMENT: ${{ secrets.DASHBOARD_KUBE_DEPLOYMENT }} | |
| DASHBOARD_KUBE_NAMESPACE_PROD: ${{ secrets.DASHBOARD_KUBE_NAMESPACE_PROD }} | |
| DASHBOARD_KUBE_NAMESPACE_STAGING: ${{ secrets.DASHBOARD_KUBE_NAMESPACE_STAGING }} | |
| DASHBOARD_APP_URL_PROD: https://knowhereto.ai | |
| DASHBOARD_APP_URL_STAGING: https://staging.knowhereto.ai | |
| DASHBOARD_API_URL_PROD: https://api.knowhereto.ai | |
| DASHBOARD_API_URL_STAGING: https://api-staging.knowhereto.ai | |
| DASHBOARD_AUTH_BASE_URL: /api/auth | |
| DASHBOARD_AUTH_COOKIE_DOMAIN_PROD: knowhereto.ai | |
| DASHBOARD_AUTH_COOKIE_DOMAIN_STAGING: staging.knowhereto.ai | |
| DASHBOARD_AUTH_ALLOWED_CALLBACK_ORIGINS_PROD: https://notebook.knowhereto.ai | |
| DASHBOARD_AUTH_ALLOWED_CALLBACK_ORIGINS_STAGING: https://notebook.staging.knowhereto.ai | |
| jobs: | |
| build-and-publish: | |
| name: Build and Publish | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - name: Decide deployment context | |
| id: context | |
| shell: bash | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | |
| environment="${{ github.event.inputs.environment }}" | |
| elif [ "${{ github.ref }}" = "refs/heads/main" ]; then | |
| environment="prod" | |
| else | |
| environment="staging" | |
| fi | |
| if [ "$environment" = "prod" ]; then | |
| kube_namespace="${DASHBOARD_KUBE_NAMESPACE_PROD}" | |
| app_url="${DASHBOARD_APP_URL_PROD}" | |
| api_url="${DASHBOARD_API_URL_PROD}" | |
| auth_cookie_domain="${DASHBOARD_AUTH_COOKIE_DOMAIN_PROD}" | |
| auth_allowed_callback_origins="${DASHBOARD_AUTH_ALLOWED_CALLBACK_ORIGINS_PROD}" | |
| else | |
| kube_namespace="${DASHBOARD_KUBE_NAMESPACE_STAGING}" | |
| app_url="${DASHBOARD_APP_URL_STAGING}" | |
| api_url="${DASHBOARD_API_URL_STAGING}" | |
| auth_cookie_domain="${DASHBOARD_AUTH_COOKIE_DOMAIN_STAGING}" | |
| auth_allowed_callback_origins="${DASHBOARD_AUTH_ALLOWED_CALLBACK_ORIGINS_STAGING}" | |
| fi | |
| auth_base_url="${DASHBOARD_AUTH_BASE_URL}" | |
| missing=() | |
| for variable_name in \ | |
| AWS_EKS_PROD_CLUSTER_NAME \ | |
| AWS_EKS_PROD_REGION \ | |
| DASHBOARD_IMAGE_REGISTRY \ | |
| DASHBOARD_IMAGE_REPOSITORY \ | |
| DASHBOARD_KUBE_CONTAINER \ | |
| DASHBOARD_KUBE_DEPLOYMENT \ | |
| api_url \ | |
| app_url \ | |
| auth_cookie_domain \ | |
| auth_allowed_callback_origins \ | |
| auth_base_url \ | |
| kube_namespace | |
| do | |
| if [ -z "${!variable_name}" ]; then | |
| missing+=("$variable_name") | |
| fi | |
| done | |
| if [ "${#missing[@]}" -gt 0 ]; then | |
| printf 'Missing deployment configuration: %s\n' "${missing[*]}" >&2 | |
| exit 1 | |
| fi | |
| short_sha="${GITHUB_SHA::8}" | |
| image_tag="${environment}-${short_sha}" | |
| latest_tag="${environment}-latest" | |
| image_uri="${DASHBOARD_IMAGE_REGISTRY}/${DASHBOARD_IMAGE_REPOSITORY}:${image_tag}" | |
| latest_uri="${DASHBOARD_IMAGE_REGISTRY}/${DASHBOARD_IMAGE_REPOSITORY}:${latest_tag}" | |
| echo "environment=${environment}" >> "$GITHUB_OUTPUT" | |
| echo "image_tag=${image_tag}" >> "$GITHUB_OUTPUT" | |
| echo "image_uri=${image_uri}" >> "$GITHUB_OUTPUT" | |
| echo "api_url=${api_url}" >> "$GITHUB_OUTPUT" | |
| echo "app_url=${app_url}" >> "$GITHUB_OUTPUT" | |
| echo "auth_cookie_domain=${auth_cookie_domain}" >> "$GITHUB_OUTPUT" | |
| echo "auth_allowed_callback_origins=${auth_allowed_callback_origins}" >> "$GITHUB_OUTPUT" | |
| echo "auth_base_url=${auth_base_url}" >> "$GITHUB_OUTPUT" | |
| echo "kube_container=${DASHBOARD_KUBE_CONTAINER}" >> "$GITHUB_OUTPUT" | |
| echo "kube_deployment=${DASHBOARD_KUBE_DEPLOYMENT}" >> "$GITHUB_OUTPUT" | |
| echo "kube_namespace=${kube_namespace}" >> "$GITHUB_OUTPUT" | |
| echo "latest_uri=${latest_uri}" >> "$GITHUB_OUTPUT" | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| aws-region: ${{ env.AWS_EKS_PROD_REGION }} | |
| - name: Login to AWS image registry | |
| shell: bash | |
| run: | | |
| aws ecr get-login-password --region "${AWS_EKS_PROD_REGION}" \ | |
| | docker login --username AWS --password-stdin "${DASHBOARD_IMAGE_REGISTRY}" | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build and push image | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| push: true | |
| tags: | | |
| ${{ steps.context.outputs.image_uri }} | |
| ${{ steps.context.outputs.latest_uri }} | |
| build-args: | | |
| NEXT_PUBLIC_API_URL=${{ steps.context.outputs.api_url }} | |
| NEXT_PUBLIC_AUTH_BASE_URL=${{ steps.context.outputs.auth_base_url }} | |
| NEXT_PUBLIC_AUTH_ALLOWED_CALLBACK_ORIGINS=${{ steps.context.outputs.auth_allowed_callback_origins }} | |
| NEXT_PUBLIC_APP_URL=${{ steps.context.outputs.app_url }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| - name: Summarize image | |
| shell: bash | |
| run: | | |
| echo "Environment: ${{ steps.context.outputs.environment }}" | |
| echo "API URL: ${{ steps.context.outputs.api_url }}" | |
| echo "App URL: ${{ steps.context.outputs.app_url }}" | |
| echo "Auth Base URL: ${{ steps.context.outputs.auth_base_url }}" | |
| echo "Auth Cookie Domain: ${{ steps.context.outputs.auth_cookie_domain }}" | |
| echo "Auth Allowed Callback Origins: ${{ steps.context.outputs.auth_allowed_callback_origins }}" | |
| echo "Image: ${{ steps.context.outputs.image_uri }}" | |
| echo "Deployment: ${{ steps.context.outputs.kube_deployment }}" | |
| echo "Namespace: ${{ steps.context.outputs.kube_namespace }}" | |
| deploy: | |
| name: Deploy | |
| runs-on: ubuntu-latest | |
| needs: build-and-publish | |
| steps: | |
| - name: Decide deployment context | |
| shell: bash | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | |
| environment="${{ github.event.inputs.environment }}" | |
| elif [ "${{ github.ref }}" = "refs/heads/main" ]; then | |
| environment="prod" | |
| else | |
| environment="staging" | |
| fi | |
| if [ "$environment" = "prod" ]; then | |
| kube_namespace="${DASHBOARD_KUBE_NAMESPACE_PROD}" | |
| app_url="${DASHBOARD_APP_URL_PROD}" | |
| api_url="${DASHBOARD_API_URL_PROD}" | |
| auth_cookie_domain="${DASHBOARD_AUTH_COOKIE_DOMAIN_PROD}" | |
| auth_allowed_callback_origins="${DASHBOARD_AUTH_ALLOWED_CALLBACK_ORIGINS_PROD}" | |
| else | |
| kube_namespace="${DASHBOARD_KUBE_NAMESPACE_STAGING}" | |
| app_url="${DASHBOARD_APP_URL_STAGING}" | |
| api_url="${DASHBOARD_API_URL_STAGING}" | |
| auth_cookie_domain="${DASHBOARD_AUTH_COOKIE_DOMAIN_STAGING}" | |
| auth_allowed_callback_origins="${DASHBOARD_AUTH_ALLOWED_CALLBACK_ORIGINS_STAGING}" | |
| fi | |
| auth_base_url="${DASHBOARD_AUTH_BASE_URL}" | |
| missing=() | |
| for variable_name in \ | |
| AWS_EKS_PROD_CLUSTER_NAME \ | |
| AWS_EKS_PROD_REGION \ | |
| DASHBOARD_IMAGE_REGISTRY \ | |
| DASHBOARD_IMAGE_REPOSITORY \ | |
| DASHBOARD_KUBE_CONTAINER \ | |
| DASHBOARD_KUBE_DEPLOYMENT \ | |
| api_url \ | |
| app_url \ | |
| auth_cookie_domain \ | |
| auth_allowed_callback_origins \ | |
| auth_base_url \ | |
| kube_namespace | |
| do | |
| if [ -z "${!variable_name}" ]; then | |
| missing+=("$variable_name") | |
| fi | |
| done | |
| if [ "${#missing[@]}" -gt 0 ]; then | |
| printf 'Missing deployment configuration: %s\n' "${missing[*]}" >&2 | |
| exit 1 | |
| fi | |
| short_sha="${GITHUB_SHA::8}" | |
| image_tag="${environment}-${short_sha}" | |
| image_uri="${DASHBOARD_IMAGE_REGISTRY}/${DASHBOARD_IMAGE_REPOSITORY}:${image_tag}" | |
| echo "DEPLOY_ENVIRONMENT=${environment}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_IMAGE_URI=${image_uri}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_KUBE_CONTAINER=${DASHBOARD_KUBE_CONTAINER}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_KUBE_DEPLOYMENT=${DASHBOARD_KUBE_DEPLOYMENT}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_KUBE_NAMESPACE=${kube_namespace}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_API_URL=${api_url}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_APP_URL=${app_url}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_AUTH_COOKIE_DOMAIN=${auth_cookie_domain}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_AUTH_ALLOWED_CALLBACK_ORIGINS=${auth_allowed_callback_origins}" >> "$GITHUB_ENV" | |
| echo "DEPLOY_AUTH_BASE_URL=${auth_base_url}" >> "$GITHUB_ENV" | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| aws-region: ${{ env.AWS_EKS_PROD_REGION }} | |
| - name: Setup kubectl | |
| uses: azure/setup-kubectl@v3 | |
| - name: Update kubeconfig | |
| shell: bash | |
| run: | | |
| aws eks update-kubeconfig \ | |
| --name "${AWS_EKS_PROD_CLUSTER_NAME}" \ | |
| --region "${AWS_EKS_PROD_REGION}" | |
| - name: Roll out dashboard | |
| shell: bash | |
| run: | | |
| kubectl set env "deployment/${DEPLOY_KUBE_DEPLOYMENT}" \ | |
| "NEXT_PUBLIC_API_URL=${DEPLOY_API_URL}" \ | |
| "NEXT_PUBLIC_AUTH_BASE_URL=${DEPLOY_AUTH_BASE_URL}" \ | |
| "AUTH_COOKIE_DOMAIN=${DEPLOY_AUTH_COOKIE_DOMAIN}" \ | |
| "NEXT_PUBLIC_AUTH_ALLOWED_CALLBACK_ORIGINS=${DEPLOY_AUTH_ALLOWED_CALLBACK_ORIGINS}" \ | |
| "NEXT_PUBLIC_APP_URL=${DEPLOY_APP_URL}" \ | |
| --namespace "${DEPLOY_KUBE_NAMESPACE}" | |
| kubectl set image "deployment/${DEPLOY_KUBE_DEPLOYMENT}" \ | |
| "${DEPLOY_KUBE_CONTAINER}=${DEPLOY_IMAGE_URI}" \ | |
| --namespace "${DEPLOY_KUBE_NAMESPACE}" | |
| kubectl rollout status "deployment/${DEPLOY_KUBE_DEPLOYMENT}" \ | |
| --namespace "${DEPLOY_KUBE_NAMESPACE}" \ | |
| --timeout=300s | |
| - name: Summarize deployment | |
| shell: bash | |
| run: | | |
| echo "Environment: ${DEPLOY_ENVIRONMENT}" | |
| echo "Image: ${DEPLOY_IMAGE_URI}" | |
| echo "Deployment: ${DEPLOY_KUBE_DEPLOYMENT}" | |
| echo "Container: ${DEPLOY_KUBE_CONTAINER}" | |
| echo "Namespace: ${DEPLOY_KUBE_NAMESPACE}" | |
| echo "API URL: ${DEPLOY_API_URL}" | |
| echo "App URL: ${DEPLOY_APP_URL}" | |
| echo "Auth Base URL: ${DEPLOY_AUTH_BASE_URL}" | |
| echo "Auth Cookie Domain: ${DEPLOY_AUTH_COOKIE_DOMAIN}" | |
| echo "Auth Allowed Callback Origins: ${DEPLOY_AUTH_ALLOWED_CALLBACK_ORIGINS}" |