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 go build -ldflags="-s -w" -o scheduler ./cmd/scheduler - name: Save artifact uses: actions/upload-artifact@v3 with: name: build-artifacts path: | ./server ./cli ./scheduler 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 cli scheduler ${{ vars.ROOT_USER_NAME }}@"$ip":/root/ ssh -n ${{ vars.ROOT_USER_NAME }}@"$ip" << 'ENDSSH' chmod +x /root/server /root/cli /root/scheduler systemctl restart server cli scheduler ENDSSH echo "Deployment to $ip completed" fi done < server_list.txt