Skip to content

PROD - Deploy

PROD - Deploy #9

Workflow file for this run

name: 'PROD: Deploy'
run-name: PROD - Deploy
on:
push:
branches: [prod]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: sudo npm install
- name: Create .env file
env:
ENV_FILE_CONTENT: ${{ secrets.PROD_ENV_FILE_CONTENT }}
run: |
echo "$ENV_FILE_CONTENT" > .env
echo ".env file created successfully!"
- name: Build project
run: sudo npm run build
- name: Copy build to server
env:
PRIVATE_KEY: ${{ secrets.PROD_SERVER_SSH_PRIVATE_KEY }}
HOST: ${{ secrets.PROD_SERVER_HOST }}
USER: ${{ secrets.PROD_SERVER_USER }}
run: |
# Setup SSH key
echo "$PRIVATE_KEY" > private_key.pem
chmod 600 private_key.pem
# Create compressed archive of build folder
echo "Creating compressed archive..."
tar -czf build.tar.gz -C build .
ls -lh build.tar.gz
# Create target directory if it doesn't exist
ssh -i private_key.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $USER@$HOST "
mkdir -p /opt/apps/smyth-docs/build
"
# Transfer compressed file to server
echo "Transferring compressed file..."
scp -i private_key.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null build.tar.gz $USER@$HOST:/tmp/build.tar.gz
# Extract and move files on server
echo "Extracting files on server..."
ssh -i private_key.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $USER@$HOST "
rm -rf /opt/apps/smyth-docs/build/*
cd /opt/apps/smyth-docs/build
tar -xzf /tmp/build.tar.gz
rm -f /tmp/build.tar.gz
"
# Cleanup
rm -f private_key.pem build.tar.gz
echo "Build copied to server successfully!"
- name: Run deploy script
env:
PRIVATE_KEY: ${{ secrets.PROD_SERVER_SSH_PRIVATE_KEY }}
HOST: ${{ secrets.PROD_SERVER_HOST }}
USER: ${{ secrets.PROD_SERVER_USER }}
run: |
echo "$PRIVATE_KEY" > private_key.pem
chmod 600 private_key.pem
ssh -i private_key.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $USER@$HOST "/opt/git/smyth-docs/deploy-docs.sh smyth-docs origin/main"
rm -f private_key.pem