Skip to content

Deploy

Deploy #82

Workflow file for this run

env:
DOCKER_REGISTRY: ghcr.io
DOCKER_SCAN_SUGGEST: false
name: Deploy
on:
workflow_dispatch:
inputs:
environment:
description: Select the environment
type: environment
redeploy_databases:
default: false
description: Redeploy databases? (non-production envs)
required: true
type: boolean
jobs:
build-backend-docker-image:
environment: ${{ inputs.environment }}
name: Build backend docker image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Log in to the container registry
uses: docker/login-action@v2
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up docker buildx
uses: docker/setup-buildx-action@v2
- name: Extract metadata for docker
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.DOCKER_REGISTRY }}/${{ github.repository }}/backend
tags: |
type=raw,value=${{ vars.DOCKER_IMAGE_TAG }}
- name: Build and push docker image
uses: docker/build-push-action@v4
with:
cache-from: type=gha
cache-to: type=gha,mode=max
context: backend
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
build-frontend-docker-image:
environment: ${{ inputs.environment }}
name: Build frontend docker image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Log in to the container registry
uses: docker/login-action@v2
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up docker buildx
uses: docker/setup-buildx-action@v2
- name: Extract metadata for docker
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.DOCKER_REGISTRY }}/${{ github.repository }}/frontend
tags: |
type=raw,value=${{ vars.DOCKER_IMAGE_TAG }}
- name: Build and push docker image
uses: docker/build-push-action@v4
with:
build-args: |
BASE_URL=${{ vars.FRONTEND_BASE_URL }}
GOOGLE_CLIENT_ID=${{ vars.GOOGLE_CLIENT_ID }}
HOSTED=true
REST_API_BASE_URL=${{ vars.REST_API_BASE_URL }}
ROBOTS_TXT_ALLOW=${{ vars.ROBOTS_TXT_ALLOW }}
SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN=${{ secrets.SENTRY_DSN }}
SENTRY_ENVIRONMENT=${{ inputs.environment }}
SENTRY_ORG=${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT=${{ secrets.SENTRY_PROJECT }}
STRIPE_PUBLISHABLE_KEY=${{ vars.STRIPE_PUBLISHABLE_KEY }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: frontend
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
tag:
name: Tag
needs:
- update-deployments
runs-on: ubuntu-latest
steps:
- name: Advance the environment tag
uses: actions/github-script@v6
with:
script: |
try {
await github.rest.git.deleteRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: "tags/${{ inputs.environment }}",
});
} catch (e) {
console.log("The ${{ inputs.environment }} tag doesn't exist yet: " + e);
}
await github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: "refs/tags/${{ inputs.environment }}",
sha: context.sha,
});
update-deployments:
environment: ${{ inputs.environment }}
name: Update deployments
needs:
- build-backend-docker-image
- build-frontend-docker-image
runs-on: ubuntu-latest
steps:
- if: inputs.environment == 'staging' && inputs.redeploy_databases == true
name: Redeploy databases
uses: th0th/kubernetes-redeploy-workload@v0.1.0
with:
base_url: "${{ secrets.KUBERNETES_BASE_URL }}"
bearer_token: "${{ secrets.KUBERNETES_BEARER_TOKEN}}"
debug: "true"
deployments: "${{ secrets.KUBERNETES_DATABASE_DEPLOYMENTS }}"
ignore_tls_errors: "true"
namespace: "${{ secrets.KUBERNETES_NAMESPACE }}"
- name: Update kubernetes workloads
uses: th0th/kubernetes-redeploy-workload@v0.1.0
with:
base_url: "${{ secrets.KUBERNETES_BASE_URL }}"
bearer_token: "${{ secrets.KUBERNETES_BEARER_TOKEN}}"
debug: "true"
deployments: "${{ secrets.KUBERNETES_DEPLOYMENTS }}"
ignore_tls_errors: "true"
namespace: "${{ secrets.KUBERNETES_NAMESPACE }}"