Skip to content

Deploy App

Deploy App #2

Workflow file for this run

name: Deploy App
on:
workflow_dispatch:
inputs:
tag:
description: 'Tag to deploy'
required: true
jobs:
deploy:
runs-on: ubuntu-latest
env:
HOST: root@80.90.181.153
DEPLOY_DIRECTORY: /home/go-clck
CONFIG_PATH: /home/go-clck/config/prod.yaml
ENV_FILE_PATH: /home/go-clck/config.env
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.tag }}
- name: Check if tag exists
run: |
git fetch --all --tags
if ! git tag | grep -q "^${{ github.event.inputs.tag }}$"; then
echo "error: Tag '${{ github.event.inputs.tag }}' not found"
exit 1
fi
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.20.2
- name: Build app
run: |
go mod download
go build -o go-clck ./cmd/clck
- name: Deploy to VM
run: |
sudo apt-get install -y ssh rsync
echo "$DEPLOY_SSH_KEY" > deploy_key.pem
chmod 600 deploy_key.pem
ssh -i deploy_key.pem -o StrictHostKeyChecking=no ${{ env.HOST }} "mkdir -p ${{ env.DEPLOY_DIRECTORY }}"
rsync -avz -e 'ssh -i deploy_key.pem -o StrictHostKeyChecking=no' --exclude='.git' ./ ${{ env.HOST }}:${{ env.DEPLOY_DIRECTORY }}
env:
DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
- name: Remove old systemd service file
run: |
ssh -i deploy_key.pem -o StrictHostKeyChecking=no ${{ env.HOST }} "rm -f /etc/systemd/system/go-clck.service"
- name: List workspace contents
run: |
echo "Listing deployment folder contents:"
ls -la ${{ github.workspace }}/deployment
- name: Create environment file on server
run: |
ssh -i deploy_key.pem -o StrictHostKeyChecking=no ${{ env.HOST }} "\
touch ${{ env.ENV_FILE_PATH }} && \
chmod 600 ${{ env.ENV_FILE_PATH }} && \
echo 'CONFIG_PATH=${{ env.CONFIG_PATH }}' > ${{ env.ENV_FILE_PATH }} && \
echo 'HTTP_SERVER_PASSWORD=${{ secrets.AUTH_PASS }}' >> ${{ env.ENV_FILE_PATH }}"
- name: Copy systemd service file
run: |
scp -i deploy_key.pem -o StrictHostKeyChecking=no ${{ github.workspace }}/deployment/go-clck.service ${{ env.HOST }}:/tmp/go-clck.service
ssh -i deploy_key.pem -o StrictHostKeyChecking=no ${{ env.HOST }} "mv /tmp/go-clck.service /etc/systemd/system/go-clck.service"
- name: Start application
run: |
ssh -i deploy_key.pem -o StrictHostKeyChecking=no ${{ env.HOST }} "systemctl daemon-reload && systemctl restart go-clck.service"