name: 'Build & Deploy' on: push: tags: - v* jobs: build: runs-on: ubuntu-latest container: image: shiran2488/golang-with-node:1.23 steps: - name: Checkout code uses: actions/checkout@v3 - name: Build Action run: | go build -ldflags="-s -w" -o server ./cmd/main_program go build -ldflags="-s -w" -o cli ./cmd/cli_control - name: Save artifact uses: actions/upload-artifact@v3 with: name: build-artifacts path: | ./server ./cli deploy: needs: build runs-on: ubuntu-latest steps: - name: Download Artifact uses: actions/download-artifact@v3 with: name: build-artifacts - name: Set up SSH run: | mkdir -p ~/.ssh echo "${{ secrets.PUBLICT_PRIVATE_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa echo "${{ vars.DEPLOY_SERVER_LIST }}" > server_list.txt while read -r ip; do if [ -n "$ip" ]; then ssh-keyscan -H "$ip" >> ~/.ssh/known_hosts fi done < server_list.txt - name: Deploy to servers run: | while read -r ip; do if [ -n "$ip" ]; then echo "Deploying to $ip..." scp -o StrictHostKeyChecking=no server ${{ vars.ROOT_USER_NAME }}@"$ip":/root/server.tmp scp -o StrictHostKeyChecking=no cli ${{ vars.ROOT_USER_NAME }}@"$ip":/root/cli.tmp ssh -n ${{ vars.ROOT_USER_NAME }}@"$ip" << 'ENDSSH' mv /root/server.tmp /root/server mv /root/cli.tmp /root/cli chmod +x /root/server /root/cli systemctl restart server cli ENDSSH echo "Deployment to $ip completed" fi done < server_list.txt