Skip to content

Build and Deploy

Build and Deploy #8

Workflow file for this run

name: Build and Deploy
on:
workflow_dispatch:
inputs:
image-name:
description: "Image name"
required: true
type: choice
options:
- ziyo-fe
- ziyo-be
env:
REPOSITORY_NAME: "masnormen"
IMAGE_NAME: ${{ github.event.inputs.image-name }}
jobs:
build_and_push:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup PNPM
uses: pnpm/action-setup@v2
with:
version: 8
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20.11.0'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push container image
run: pnpm nx container ${{ env.IMAGE_NAME }}
deploy:
runs-on: ubuntu-latest
needs: build_and_push
steps:
- name: Deploy to Droplet
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_KEY }}
envs: IMAGE_NAME,REPOSITORY_NAME
script: |
# Stop and remove old container
docker stop $(echo $IMAGE_NAME) || true
docker rm $(echo $IMAGE_NAME) || true
docker image rm $(docker images '${{ env.REPOSITORY_NAME }}/${{ env.IMAGE_NAME }}' -a -q) || true
# Set the port
if [ $(echo $IMAGE_NAME) = "ziyo-fe" ]; then
PORT=3000
else
PORT=4200
fi
# Run a new container from the new image
docker run -d \
-p $(echo $PORT):$(echo $PORT) \
--restart always \
--name $(echo $IMAGE_NAME) \
$(echo $REPOSITORY_NAME)/$(echo $IMAGE_NAME):latest