name: Build & Deploy on: pull_request: branches: [main] types: [opened, synchronize, reopened] workflow_dispatch: # manual trigger — handy while you're wiring this up jobs: build-and-copy: runs-on: self-hosted # must match a LABEL on your runner (see below) steps: - name: Checkout code uses: actions/checkout@v4 - name: Build run: | echo "replace with your actual build command" # e.g. npm ci && npm run build / make all - name: Copy build output to FTP server uses: SamKirkland/FTP-Deploy-Action@4.2.0 with: server: 192.168.x.x # LAN IP of the box running your FTP server username: ${{ secrets.FTP_USER }} password: ${{ secrets.FTP_PASS }} local-dir: dist/ # where your build output lands remote-dir: /public_html/site/ # target dir on the FTP server