Skip to content

refactoring stations list page #17

refactoring stations list page

refactoring stations list page #17

Workflow file for this run

name: Deploy to Ubuntu Server
on:
workflow_dispatch:
inputs:
environment:
description: 'Deployment environment'
required: true
default: 'production'
type: choice
options:
- production
- staging
push:
branches:
- master
env:
GO_VERSION: '1.24'
NODE_VERSION: '20'
BINARY_NAME: 'ocpp-emu'
SERVICE_NAME: 'ocpp-emu'
jobs:
deploy:
name: Build and Deploy
runs-on: ubuntu-latest
environment: ${{ github.event.inputs.environment || 'production' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get version
id: version
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
else
echo "version=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
fi
# Build Backend
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Build backend
env:
GOOS: linux
GOARCH: amd64
CGO_ENABLED: 0
run: |
go build -ldflags="-s -w -X main.appVersion=${{ steps.version.outputs.version }}" \
-o ${{ env.BINARY_NAME }} \
./cmd/server
# Build Frontend
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
cache-dependency-path: web/package-lock.json
- name: Build frontend
working-directory: web
run: |
npm ci
npm run build
# Prepare deployment package
- name: Prepare deployment package
run: |
mkdir -p deploy/web
cp ${{ env.BINARY_NAME }} deploy/
cp -r web/dist/* deploy/web/
# Copy files to server
- name: Copy files to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "deploy/*"
target: "/tmp/ocpp-emu-deploy"
strip_components: 1
# Deploy on server
- name: Deploy on server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
set -e
BINARY_NAME="ocpp-emu"
SERVICE_NAME="ocpp-emu"
BINARY_PATH="${{ secrets.BINARY_PATH }}"
WEB_PATH="${{ secrets.WEB_PATH }}"
API_PORT="${{ secrets.API_PORT }}"
# Use defaults if secrets not set
BINARY_PATH="${BINARY_PATH:-/usr/local/bin/ocpp-emu}"
WEB_PATH="${WEB_PATH:-/var/www/html/ocpp-emu}"
API_PORT="${API_PORT:-8080}"
echo "=== Starting deployment ==="
echo "Binary path: $BINARY_PATH"
echo "Web path: $WEB_PATH"
cd /tmp/ocpp-emu-deploy
# Stop service if running
if systemctl is-active --quiet $SERVICE_NAME 2>/dev/null; then
echo "Stopping existing service..."
sudo systemctl stop $SERVICE_NAME
fi
# Backup and install binary
echo "Installing binary..."
if [ -f "$BINARY_PATH" ]; then
sudo cp "$BINARY_PATH" "${BINARY_PATH}.bak"
fi
sudo cp $BINARY_NAME "$BINARY_PATH"
sudo chmod 755 "$BINARY_PATH"
# Install web files (preserve config, replace static files only)
echo "Installing web files..."
sudo mkdir -p "$WEB_PATH"
sudo rm -rf "$WEB_PATH"/*
sudo cp -r web/* "$WEB_PATH"/
sudo chown -R www-data:www-data "$WEB_PATH"
sudo chmod -R 755 "$WEB_PATH"
# Start service
echo "Starting service..."
sudo systemctl start $SERVICE_NAME
# Cleanup
cd /tmp
rm -rf /tmp/ocpp-emu-deploy
# Verify service is running
sleep 3
if systemctl is-active --quiet $SERVICE_NAME; then
echo "=== Service started successfully ==="
else
echo "=== Service failed to start ==="
sudo systemctl status $SERVICE_NAME --no-pager || true
exit 1
fi
# Health check
echo "=== API Health Check ==="
curl -s "http://localhost:${API_PORT}/api/health" || echo "API not responding yet"
echo "=== Deployment complete ==="
- name: Deployment summary
run: |
echo "## Deployment Complete" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Version:** ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
echo "- **Branch:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY