Deploy App #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy App | |
on: | |
workflow_dispatch: | |
inputs: | |
tag: | |
description: 'Tag to deploy' | |
required: true | |
jobs: | |
deploy: | |
runs-on: ubuntu-latest | |
env: | |
HOST: ${{ secrets.DEPLOY_SSH_USER }}@${{ secrets.DEPLOY_SSH_HOST }} | |
DEPLOY_DIRECTORY: /root/apps/shutdown-from-browser | |
CONFIG_PATH: /root/apps/shutdown-from-browser/config/config.prod.yaml | |
ENV_FILE_PATH: /root/apps/shutdown-from-browser/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: Use Node.js 16 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- run: | | |
cd ./web | |
npm ci | |
npm install --legacy-peer-deps | |
npm run build | |
- name: Set up Go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: 1.20.2 | |
- name: Build app | |
run: | | |
go mod download | |
CGO_ENABLED=0 GOOS=linux go build -ldflags "-w" -a -o sfb ./cmd/shutdown-from-browser | |
- 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/shutdown-from-browser.service" | |
- name: List workspace contents | |
run: | | |
echo "Listing deployments folder contents:" | |
ls -la ${{ github.workspace }}/deployments | |
- 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 }} && \ | |
- name: Copy systemd service file | |
run: | | |
scp -i deploy_key.pem -o StrictHostKeyChecking=no ${{ github.workspace }}/deployments/shutdown-from-browser.service ${{ env.HOST }}:/tmp/shutdown-from-browser.service | |
ssh -i deploy_key.pem -o StrictHostKeyChecking=no ${{ env.HOST }} "mv /tmp/shutdown-from-browser.service /etc/systemd/system/shutdown-from-browser.service" | |
- name: Start application | |
run: | | |
ssh -i deploy_key.pem -o StrictHostKeyChecking=no ${{ env.HOST }} "systemctl daemon-reload && systemctl restart shutdown-from-browser.service" |