name: Deploy Greenlight API on: push: branches: - master jobs: deploy: runs-on: ubuntu-24.04 steps: - name: Updating apt get run: apt-get update -y - name: Install rsync run: apt-get install rsync -y - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 with: go-version: "1.23" # adapte selon ta version - name: Add host key to known_hosts run: | echo "Creating access 🔐" mkdir -p ~/.ssh echo "${{ secrets.RUNNER_SSH_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -p ${{ secrets.SERVER_PORT }} -H ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts echo "Access created ✅" - name: Applying database migrations run: | echo "Creating migrations folder 📂" ssh -p ${{ secrets.SERVER_PORT }} ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} "mkdir -p /var/www/greenlight/migrations" echo "Folder created ✅" echo "Copy migrations files 📑" scp -r -P ${{ secrets.SERVER_PORT }} ./migrations/* ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }}:/var/www/greenlight/migrations echo "Files copied ✅" ssh -p ${{ secrets.SERVER_PORT }} ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} "\ set -e cd /var/www/greenlight echo "Running migrations ⚙️" migrate -path=./migrations -database=${{ secrets.GREENLIGHT_DB_DSN }} up echo "Migrations done ✅" " - name: Build API run: | echo "Building API ⚙️" go mod tidy go build -o ./bin/greenlight-api ./cmd/api echo "Build created ✅" - name: Deploy to server run: | echo "Deployment ongoing 🔥" ssh -p ${{ secrets.SERVER_PORT }} ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} "rm -rf /var/www/greenlight/*" rsync -avz --delete -e "ssh -p ${{ secrets.SERVER_PORT }}" bin/ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }}:/var/www/greenlight echo "App deployed ✅" - name: Launch API run: | echo "Launching API 🚀" ssh -p ${{ secrets.SERVER_PORT }} ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} "\ pkill greenlight-api || true; \ nohup /var/www/greenlight/greenlight-api > /var/www/greenlight/greenlight.log 2>&1 & \ " echo "App deployed 🎆"