Skip to content

💚 fix syntax (for real now) #17

💚 fix syntax (for real now)

💚 fix syntax (for real now) #17

# This is a basic workflow to help you get started with Actions
name: CI/CD For docker deploy
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build-push-docker:
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v2
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_SERVER_KEY }}
name: id_rsa # optional
known_hosts: ${{ secrets.KNOWN_HOSTS }}
# - uses: whoan/docker-build-with-cache-action@v5
# with:
# username: fredkiss3
# password: ${{ secrets.DCR_PASSWD }}
# image_name: gh-next
# image_tag: latest
# push_git_tag: true
# registry: dcr.fredkiss.dev
# dockerfile: docker/Dockerfile.prod
# context: .
# build_extra_args: "--build-arg NEXT_PUBLIC_VERCEL_URL=gh.fredkiss.dev --build-arg GITHUB_REDIRECT_URI=https://gh.fredkiss.dev/api/auth/callback --build-arg SESSION_SECRET=${{ secrets.SESSION_SECRET }} --build-arg DATABASE_URL=${{ secrets.POSTGRES_DB_URL }} --build-arg GITHUB_CLIENT_ID=${{ secrets.GH_CLIENT_ID }} --build-arg GITHUB_SECRET=${{ secrets.GH_SECRET }} --build-arg GITHUB_PERSONAL_ACCESS_TOKEN=${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} --build-arg REDIS_HTTP_USERNAME=${{ secrets.REDIS_HTTP_USERNAME }} --build-arg REDIS_HTTP_PASSWORD=${{ secrets.REDIS_HTTP_PASSWORD }} --build-arg KV_PREFIX=__gh_next__cache_prod_"
- name: Deploy to Server
run: |
BUILD_ARGS="--build-arg NEXT_PUBLIC_VERCEL_URL=gh.fredkiss.dev --build-arg GITHUB_REDIRECT_URI=https://gh.fredkiss.dev/api/auth/callback --build-arg SESSION_SECRET=${{ secrets.SESSION_SECRET }} --build-arg DATABASE_URL=${{ secrets.POSTGRES_DB_URL }} --build-arg GITHUB_CLIENT_ID=${{ secrets.GH_CLIENT_ID }} --build-arg GITHUB_SECRET=${{ secrets.GH_SECRET }} --build-arg GITHUB_PERSONAL_ACCESS_TOKEN=${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} --build-arg REDIS_HTTP_USERNAME=${{ secrets.REDIS_HTTP_USERNAME }} --build-arg REDIS_HTTP_PASSWORD=${{ secrets.REDIS_HTTP_PASSWORD }} --build-arg KV_PREFIX=__gh_next__cache_prod_"
ssh -p $DEPLOY_PORT $DEPLOY_USER@$DEPLOY_DOMAIN "
source ~/.zshrc
set -e -o errexit
cd $DEPLOY_DIR
echo 'Login to docker registry...'
echo ${{ secrets.DCR_PASSWD }} | docker login --username=fredkiss3 --password-stdin dcr.fredkiss.dev
echo 'succesfully logged in to registry dcr.fredkiss.dev ✅'
echo use node version 20
nvm use 20
echo Pulling latest version...
git pull origin ${GITHUB_REF##*/}
echo 'Build with docker (and cache)...🔄'
export DOCKER_BUILDKIT=1
# Use cache from remote repository, tag as latest, keep cache metadata
docker buildx build --push $BUILD_ARGS -f ./docker/Dockerfile.prod -t dcr.fredkiss.dev/gh-next:${GITHUB_SHA} -t dcr.fredkiss.dev/gh-next:latest \
--cache-from type=registry,ref=dcr.fredkiss.dev/gh-next:prod-buildcache,mode=max \
--cache-to type=registry,ref=dcr.fredkiss.dev/gh-next:prod-buildcache,mode=max .
echo 'build successful ✅'
# Start docker instances
echo 'updating docker services...🔄'
docker stack deploy --with-registry-auth --compose-file ./docker/docker-stack.prod.yaml gh-stack-prod
echo 'services updated succesfully ✅'
# Copying the build cache for faster builds
echo 'copying build cache...🔄'
docker pull dcr.fredkiss.dev/gh-next:latest
mkdir -p .next/
CONTAINER_ID=$(docker create dcr.fredkiss.dev/gh-next:latest)
docker cp \${CONTAINER_ID}:/app/.next/cache .next/
docker rm \${CONTAINER_ID}
echo 'Build cached copied succesfully ✅'
"
env:
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
DEPLOY_DIR: ${{ secrets.DEPLOY_DIR }}
DEPLOY_DOMAIN: ${{ secrets.DEPLOY_DOMAIN }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
# - name: copy build cache
# run: |
# ls -l ./.next/cache 2> /dev/null || true
# echo ${{ secrets.DCR_PASSWD }} | docker login --username=fredkiss3 --password-stdin dcr.fredkiss.dev
# docker pull dcr.fredkiss.dev/gh-next:latest
# CONTAINER_ID=$(docker create dcr.fredkiss.dev/gh-next:latest)
# mkdir -p .next/
# docker cp ${CONTAINER_ID}:/app/.next/cache .next/
# docker rm ${CONTAINER_ID}
# ls -l ./.next/cache
# deploy:
# # The type of runner that the job will run on
# needs:
# - build-push-docker
# runs-on: ubuntu-latest
# environment: dev
# # Steps represent a sequence of tasks that will be executed as part of the job
# steps:
# - uses: actions/checkout@v2
# - name: Install SSH key
# uses: shimataro/ssh-key-action@v2
# with:
# key: ${{ secrets.SSH_SERVER_KEY }}
# name: id_rsa # optional
# known_hosts: ${{ secrets.KNOWN_HOSTS }}
# - name: Restart docker-stack
# run: |
# scp -P $DEPLOY_PORT ./docker/docker-stack.prod.yaml $DEPLOY_USER@$DEPLOY_DOMAIN:$DCR_DEPLOY_DIR/docker-stack.prod.yaml
# ssh -p $DEPLOY_PORT $DEPLOY_USER@$DEPLOY_DOMAIN "
# cd $DCR_DEPLOY_DIR
# echo updating docker services for dev environment...
# echo ${{ secrets.DCR_PASSWD }} | docker login --username=fredkiss3 --password-stdin dcr.fredkiss.dev
# docker stack deploy --with-registry-auth --compose-file ./docker-stack.prod.yaml gh-stack-prod
# echo services updated succesfully ✅
# "
# env:
# DCR_DEPLOY_DIR: ${{ secrets.DCR_DEPLOY_DIR }}
# DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
# DEPLOY_DOMAIN: ${{ secrets.DEPLOY_DOMAIN }}
# DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
# DCR_PASSWD: ${{ secrets.DCR_PASSWD }}
# DCR_USER: ${{ secrets.DCR_USER }}