name: Build and Deploy (Testnet) on: push: branches: [main] jobs: build-and-deploy: runs-on: nixos permissions: contents: read packages: write env: IMAGE: ghcr.io/apex-fusion/web3-mcp steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' - name: Install dependencies run: npm ci - name: Build TypeScript run: npm run build env: NODE_OPTIONS: --max-old-space-size=12288 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . push: true tags: | ${{ env.IMAGE }}:latest ${{ env.IMAGE }}:${{ github.sha }} - name: Deploy to Hetzner VM run: | echo "${{ secrets.HETZNER_SSH_KEY }}" > /tmp/deploy_key chmod 600 /tmp/deploy_key ssh -i /tmp/deploy_key -o StrictHostKeyChecking=no \ ${{ secrets.HETZNER_USER }}@${{ secrets.HETZNER_HOST }} \ "echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin && \ docker pull ${{ env.IMAGE }}:${{ github.sha }} && \ docker stop vector-mcp || true && \ docker rm vector-mcp || true && \ docker run -d \ --name vector-mcp \ --restart unless-stopped \ -p 127.0.0.1:3000:3000 \ --env-file /etc/vector-mcp/env \ ${{ env.IMAGE }}:${{ github.sha }}" rm /tmp/deploy_key