Skip to content

v2.0.0

v2.0.0 #43

Workflow file for this run

name: CD
on:
release:
types: ['released']
workflow_dispatch:
inputs:
version:
description: 'Version of the app'
required: true
type: string
skip-build:
description: 'Skips build stage'
type: boolean
default: false
jobs:
infer-version:
runs-on: ubuntu-latest
name: Infer version
outputs:
version: ${{ steps.set_version.outputs.version }}
steps:
- name: Infer app version
shell: bash
id: set_version
run: |
# If a release tag is present, use it; otherwise, use the input version
if [ -n "${{ github.event.release.tag_name }}" ]; then
VERSION_TAG="${{ github.event.release.tag_name }}"
VERSION="${VERSION_TAG:1}"
else
VERSION="${{ inputs.version }}"
fi
echo "Inferred version: $VERSION"
# Set the output for the current step
echo "version=$VERSION" >> $GITHUB_OUTPUT
build:
name: Run build and push to registry
needs: infer-version
runs-on: ubuntu-latest
if: github.event_name == 'release' || inputs.skip-build == 'true'
steps:
- uses: actions/checkout@v4
with:
ref: v${{ needs.infer-version.outputs.version }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to custom Docker registry
uses: docker/login-action@v3
with:
registry: registry.webbid.store:5000
username: ${{ vars.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Build and push to local registry
uses: docker/build-push-action@v6
with:
push: true
tags: registry.webbid.store:5000/webbid:${{ needs.infer-version.outputs.version }}
build-args: |
NODE_ENV=production
BUILD_TARGET=production
PAYLOAD_CONFIG_PATH=dist/payload.config.js
PORT=3000
NEXT_PUBLIC_SERVER_URL=${{ vars.NEXT_PUBLIC_SERVER_URL }}
NEXT_PUBLIC_COMPANY_NAME=${{ vars.NEXT_PUBLIC_COMPANY_NAME }}
NEXT_PUBLIC_SUPPORT_EMAIL=${{ vars.NEXT_PUBLIC_SUPPORT_EMAIL }}
NEXT_PUBLIC_DOMAIN=${{ vars.NEXT_PUBLIC_DOMAIN }}
NEXT_PUBLIC_SERVICE_FEE_PERCENTAGE=${{ vars.NEXT_PUBLIC_SERVICE_FEE_PERCENTAGE }}
- name: Inspect
run: |
docker buildx imagetools inspect registry.webbid.store:5000/webbid:${{ needs.infer-version.outputs.version }}
deploy:
name: Deploy the app with Docker Swarm
runs-on: ubuntu-latest
needs: [infer-version, build]
environment:
name: Production
url: https://webbid.store
steps:
- uses: actions/checkout@v4
with:
ref: v${{ needs.infer-version.outputs.version }}
- name: Copy deployment files
uses: appleboy/scp-action@v0.1.7
with:
host: webbid.store
username: ${{ secrets.DEPLOY_SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: 'deployment/docker-compose.yaml,deployment/nginx.conf'
target: /apps/webbid
strip_components: 1
- name: Creating .env file
uses: appleboy/ssh-action@v1.1.0
with:
host: webbid.store
username: ${{ secrets.DEPLOY_SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
echo "RELEASE_VERSION=${{ needs.infer-version.outputs.version }}
PAYLOAD_SECRET=${{ secrets.PAYLOAD_SECRET }}
PAYLOAD_ADMIN_EMAIL=${{ secrets.PAYLOAD_ADMIN_EMAIL }}
PAYLOAD_ADMIN_PASSWORD=${{ secrets.PAYLOAD_ADMIN_PASSWORD }}
POSTGRES_DB=${{ secrets.POSTGRES_DB }}
POSTGRES_USER=${{ secrets.POSTGRES_USER }}
POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}
POSTGRES_PORT=${{ secrets.POSTGRES_PORT }}
POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}
NODE_TLS_REJECT_UNAUTHORIZED=${{ secrets.NODE_TLS_REJECT_UNAUTHORIZED }}
SMTP_HOST=${{ secrets.SMTP_HOST }}
SMTP_PORT=${{ secrets.SMTP_PORT }}
SMTP_USER=${{ secrets.SMTP_USER }}
SMTP_PASSWORD=${{ secrets.SMTP_PASSWORD }}
AUTH_FORGOT_PASSWORD_TOKEN_VALIDITY_DURATION=${{ vars.AUTH_FORGOT_PASSWORD_TOKEN_VALIDITY_DURATION }}
STRIPE_API_SECRET_KEY=${{ secrets.STRIPE_API_SECRET_KEY }}
STRIPE_ORDER_SESSION_VALIDITY_DURATION=${{ vars.STRIPE_ORDER_SESSION_VALIDITY_DURATION }}
DOCKER_REGISTRY_USERNAME=${{ vars.DOCKER_REGISTRY_USERNAME }}
DOCKER_REGISTRY_PASSWORD=${{ secrets.DOCKER_REGISTRY_PASSWORD }}" > /apps/webbid/.env
- name: Deploy
uses: appleboy/ssh-action@v1.1.0
with:
host: webbid.store
username: ${{ secrets.DEPLOY_SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /apps/webbid
export $(cat .env | xargs)
docker login registry.webbid.store:5000 -u ${{ vars.DOCKER_REGISTRY_USERNAME }} -p ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
docker image pull registry.webbid.store:5000/webbid:${{ needs.infer-version.outputs.version }}
docker stack deploy -c docker-compose.yaml webbid