version: '3' vars: REMOTE_MACHINE: bl@flo-homeserver BINARY_DIR: ./bin APP_NAME: inventory-cdc-demo BINARY: "{{.BINARY_DIR}}/{{.APP_NAME}}" DATABASE_URL: postgres://postgres:postgres@localhost:5453/postgres?sslmode=disable NATS_URL: nats://localhost:4222 NATS_SUBJECT: postgres.public.inventory tasks: # ── Build ────────────────────────────────────────────────────────────────── build: desc: vet, fmt, then build binary deps: [vet, fmt] cmds: - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o {{.BINARY}} ./cmd/server # ── Deploy ───────────────────────────────────────────────────────────────── deploy: desc: build, stage files, and deploy to remote server (backend only) deps: [build] cmds: - ssh {{.REMOTE_MACHINE}} "rm -rf /tmp/inventory-flo-deploy && mkdir -p /tmp/inventory-flo-deploy" - rsync -avz --delete {{.BINARY}} ./application.prod.properties ./postgres ./scripts {{.REMOTE_MACHINE}}:/tmp/inventory-flo-deploy/ - ssh {{.REMOTE_MACHINE}} "mkdir -p ~/.local/bin ~/.local/share/live-inventory-cdc-demo && rsync -a --delete /tmp/inventory-flo-deploy/{{.APP_NAME}} ~/.local/bin/ && rsync -a --delete --exclude='offsets.dat' /tmp/inventory-flo-deploy/{application.prod.properties,postgres,scripts} ~/.local/share/live-inventory-cdc-demo/ && systemctl --user restart cdc-inventory.service" - ssh {{.REMOTE_MACHINE}} "rm -rf /tmp/inventory-flo-deploy" deploy-infra: desc: build, stage files, and deploy quadlet units + full restart deps: [build] cmds: - ssh {{.REMOTE_MACHINE}} "rm -rf /tmp/inventory-flo-deploy && mkdir -p /tmp/inventory-flo-deploy" - rsync -avz --delete {{.BINARY}} ./application.prod.properties ./postgres ./scripts ./linux-files {{.REMOTE_MACHINE}}:/tmp/inventory-flo-deploy/ - ssh {{.REMOTE_MACHINE}} "mkdir -p ~/.local/bin ~/.local/share/live-inventory-cdc-demo ~/.config/containers/systemd ~/.config/systemd/user && rsync -a --delete /tmp/inventory-flo-deploy/{{.APP_NAME}} ~/.local/bin/ && rsync -a --delete --exclude='offsets.dat' /tmp/inventory-flo-deploy/{application.prod.properties,postgres,scripts} ~/.local/share/live-inventory-cdc-demo/ && rsync -a /tmp/inventory-flo-deploy/linux-files/dot_config/containers/systemd/cdc* ~/.config/containers/systemd/ && rsync -a /tmp/inventory-flo-deploy/linux-files/dot_config/systemd/user/cdc-inventory.service ~/.config/systemd/user/ && systemctl --user daemon-reload && systemctl --user restart cdc-postgres.service cdc-nats.service cdc-debezium.service cdc-inventory.service" - ssh {{.REMOTE_MACHINE}} "rm -rf /tmp/inventory-flo-deploy" # ── Development ──────────────────────────────────────────────────────────── infra: desc: development - start Postgres, NATS, and Debezium with compose cmds: - podman compose -f compose.yml up backend: desc: development - run native Go backend against compose infrastructure env: DATABASE_URL: "{{.DATABASE_URL}}" NATS_URL: "{{.NATS_URL}}" NATS_SUBJECT: "{{.NATSSUBJECT}}" cmds: - go run ./cmd/server up: desc: development - alias for task infra cmds: - podman compose -f compose.yml up down: desc: development - stop compose infrastructure cmds: - podman compose -f compose.yml down seed: desc: development - generate a fresh burst of inventory CDC events cmds: - podman compose -f compose.yml --profile tools run --rm seed inspect: desc: development - inspect Debezium messages in NATS JetStream cmds: - podman compose -f compose.yml --profile tools run --rm nats-cli /scripts/inspect.sh # ── Helpers ──────────────────────────────────────────────────────────────── vet: cmds: - go vet ./... fmt: cmds: - go fmt ./... clean: cmds: - rm -f {{.BINARY}}