Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 33 additions & 48 deletions .github/workflows/docker-build.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,17 @@
name: Build and Push Docker Images

on:
push:
branches:
- main
release:
types: [published]
workflow_dispatch:

env:
REGISTRY: ghcr.io

jobs:
detect-changes:
name: Detect Changed Folders
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.repository == 'braydenidzenga/ZettaNote'
outputs:
backend: ${{ steps.filter.outputs.backend }}
frontend: ${{ steps.filter.outputs.frontend }}
nginx: ${{ steps.filter.outputs.nginx }}
# admin-portal: ${{ steps.filter.outputs.admin-portal }}
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Check changed paths
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
backend:
- 'backend/**'
frontend:
- 'frontend/**'
nginx:
- 'nginx/**'

build-and-push-backend:
runs-on: ubuntu-latest
# needs: detect-changes
if: github.ref == 'refs/heads/main' && github.repository == 'braydenidzenga/ZettaNote'
if: github.repository == 'braydenidzenga/ZettaNote'
permissions:
contents: read
packages: write
Expand All @@ -65,9 +38,10 @@ jobs:
with:
images: ${{ env.REGISTRY }}/${{ steps.repo-owner.outputs.owner_lc }}/zettanote-backend
tags: |
type=ref,event=branch
type=sha,prefix={{branch}}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/v2-CI' }}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest

- name: Build and push backend image
uses: docker/build-push-action@v5
Expand All @@ -80,8 +54,7 @@ jobs:

build-and-push-frontend:
runs-on: ubuntu-latest
# needs: detect-changes
if: github.ref == 'refs/heads/main' && github.repository == 'braydenidzenga/ZettaNote'
if: github.repository == 'braydenidzenga/ZettaNote'
permissions:
contents: read
packages: write
Expand All @@ -108,9 +81,10 @@ jobs:
with:
images: ${{ env.REGISTRY }}/${{ steps.repo-owner.outputs.owner_lc }}/zettanote-frontend
tags: |
type=ref,event=branch
type=sha,prefix={{branch}}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/v2-CI' }}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest

- name: Build and push frontend image
uses: docker/build-push-action@v5
Expand All @@ -125,8 +99,7 @@ jobs:

build-and-push-nginx:
runs-on: ubuntu-latest
# needs: detect-changes
if: github.ref == 'refs/heads/main' && github.repository == 'braydenidzenga/ZettaNote'
if: github.repository == 'braydenidzenga/ZettaNote'
permissions:
contents: read
packages: write
Expand All @@ -153,9 +126,10 @@ jobs:
with:
images: ${{ env.REGISTRY }}/${{ steps.repo-owner.outputs.owner_lc }}/zettanote-nginx
tags: |
type=ref,event=branch
type=sha,prefix={{branch}}-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/v2-CI' }}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest

- name: Build and push nginx image
uses: docker/build-push-action@v5
Expand Down Expand Up @@ -232,25 +206,33 @@ jobs:
deploy:
runs-on: ubuntu-latest
needs:
- detect-changes
- build-and-push-backend
- build-and-push-frontend
- build-and-push-nginx
steps:
- name: Get release version
id: version
run: |
if [ "${{ github.event_name }}" == "release" ]; then
echo "version=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT
else
echo "version=latest" >> $GITHUB_OUTPUT
fi

- name: Deploy to server via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER || 'root' }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
port: ${{ secrets.SERVER_PORT || '22' }}
port: ${{ secrets.SERVER_PORT }}
timeout: 30s
command_timeout: 10m
script: |
echo "🚀 Starting deployment..."
echo "🚀 Starting deployment for version ${{ steps.version.outputs.version }}..."

# Navigate to deployment directory
cd ${{ secrets.DEPLOY_PATH || '~/prod' }}
cd ${{ secrets.DEPLOY_PATH }}

echo "📥 Pulling latest Docker images..."
docker compose pull
Expand All @@ -267,3 +249,6 @@ jobs:
echo ""
echo "📊 Container Status:"
docker compose ps

echo ""
echo "🏷️ Deployed version: ${{ steps.version.outputs.version }}"
Loading