name: Build and Deploy on: push: branches: [master] workflow_dispatch: env: REGISTRY: gitea.v.paler.net IMAGE: ppetru/animaltrack jobs: build-and-deploy: runs-on: nix steps: - uses: actions/checkout@v4 - name: Build Docker image run: | nix build .#dockerImage --out-link result - name: Push to registry run: | skopeo copy \ --dest-creds "${{ secrets.REGISTRY_USERNAME }}:${{ secrets.REGISTRY_PASSWORD }}" \ --insecure-policy \ docker-archive:result \ docker://${{ env.REGISTRY }}/${{ env.IMAGE }}:latest - name: Deploy to Nomad env: NOMAD_ADDR: ${{ secrets.NOMAD_ADDR }} run: | # Fetch current job, update meta.uuid to force deployment, resubmit echo "Fetching current job spec..." JOB=$(curl -sS "$NOMAD_ADDR/v1/job/animaltrack") # Update meta.uuid to force a new deployment NEW_UUID=$(cat /proc/sys/kernel/random/uuid) echo "Setting new UUID: $NEW_UUID" UPDATED_JOB=$(echo "$JOB" | jq --arg uuid "$NEW_UUID" '.Meta.uuid = $uuid') # Submit the updated job echo "Submitting job..." RESULT=$(echo "{\"Job\": $UPDATED_JOB}" | curl -sS -X POST "$NOMAD_ADDR/v1/jobs" \ -H "Content-Type: application/json" -d @-) echo "Submit result: $RESULT" # Wait for deployment to be created sleep 3 echo "Fetching deployments..." DEPLOY_ID=$(curl -sS "$NOMAD_ADDR/v1/job/animaltrack/deployments" | jq -r '.[0].ID') echo "Deployment ID: $DEPLOY_ID" if [ "$DEPLOY_ID" = "null" ] || [ -z "$DEPLOY_ID" ]; then echo "No deployment created" exit 1 fi for i in $(seq 1 30); do STATUS=$(curl -sS "$NOMAD_ADDR/v1/deployment/$DEPLOY_ID" | jq -r '.Status') echo "Deployment status: $STATUS" case $STATUS in successful) exit 0 ;; failed|cancelled) exit 1 ;; esac sleep 10 done echo "Timeout waiting for deployment" exit 1