Files
cyclingbot/Makefile
Blake Ridgway eb889236ef Remove dupe reaction, log duplicates instead
The 🔁 emoji was being added for duplicate rides. Now we just log the

duplicate server-side without adding any reaction to the message.

Signed-off-by: Blake Ridgway <blake@blakeridgway.com>
2026-05-30 11:10:51 -05:00

141 lines
5.5 KiB
Makefile

HOST = 172.16.0.101
SSH_USER = root
SSH = ssh $(SSH_USER)@$(HOST)
SCP = scp
JAIL_NAME = cyclingbot
JAIL_ROOT = /jails/$(JAIL_NAME)
BINARY = cycling-bot
# Postgres jail config
PG_JAIL = postgres
PG_DATA = /var/db/postgres/data16
PG_IFACE = igb0
PG_IPS = 172.16.0.215/24 172.16.0.216/24
# Build info (injected via ldflags)
VERSION = $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
LDFLAGS = -ldflags "-X main.version=$(VERSION)"
.PHONY: all build build-native test vet deploy setup deploy-env boot aliases
.PHONY: pg-start pg-stop pg-status start stop restart logs status clean dns-fix
all: test build deploy start
# ── Networking ────────────────────────────────────────────────────────────────
aliases:
$(SSH) "$(foreach ip,$(PG_IPS),ifconfig $(PG_IFACE) alias $(ip) ;) true"
# ── Postgres ──────────────────────────────────────────────────────────────────
pg-start:
$(SSH) "service jail start $(PG_JAIL) 2>/dev/null || true"
$(SSH) "jexec $(PG_JAIL) su -l postgres -c 'pg_ctl status -D $(PG_DATA)' 2>&1 | grep -q 'server is running' \
&& echo 'postgres already running' \
|| { rm -f /jails/$(PG_JAIL)$(PG_DATA)/postmaster.pid ; \
jexec $(PG_JAIL) su -l postgres -c 'pg_ctl start -D $(PG_DATA)'; }"
pg-stop:
$(SSH) "jexec $(PG_JAIL) su -l postgres -c 'pg_ctl stop -D $(PG_DATA) -m fast' 2>/dev/null || true"
pg-status:
$(SSH) "jexec $(PG_JAIL) su -l postgres -c 'pg_ctl status -D $(PG_DATA)'"
# ── Full server boot (run this after every reboot) ────────────────────────────
boot: aliases
$(SSH) "service jail stop $(JAIL_NAME) 2>/dev/null || true"
$(SSH) "service jail stop $(PG_JAIL) 2>/dev/null || true"
@$(MAKE) pg-start
$(SSH) "service jail start $(JAIL_NAME) 2>/dev/null || true"
$(SSH) "jexec $(JAIL_NAME) route add default 172.16.0.1 2>/dev/null || true"
@$(MAKE) start
@echo "Boot sequence complete."
# ── Build ─────────────────────────────────────────────────────────────────────
# Cross-compile for FreeBSD amd64
build:
GOOS=freebsd GOARCH=amd64 go build $(LDFLAGS) -o $(BINARY) .
# Build for the local (Linux) platform — useful for testing
build-native:
go build $(LDFLAGS) -o $(BINARY) .
# Run tests
test:
go test ./...
# Run go vet
vet:
go vet ./...
# Create required directories inside the jail (safe to run multiple times)
setup:
$(SSH) "mkdir -p $(JAIL_ROOT)/usr/local/bin \
$(JAIL_ROOT)/usr/local/etc/rc.d \
$(JAIL_ROOT)/var/db/$(JAIL_NAME) \
$(JAIL_ROOT)/var/log \
$(JAIL_ROOT)/var/run"
# Copy binary and rc.d script into the jail
deploy: test vet build setup
$(SCP) $(BINARY) $(SSH_USER)@$(HOST):/tmp/$(BINARY)
$(SCP) rc.d/$(JAIL_NAME) $(SSH_USER)@$(HOST):/tmp/$(JAIL_NAME)-rcd
$(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop 2>/dev/null; \
rm -f $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \
cp /tmp/$(BINARY) $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \
chmod +x $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \
rm /tmp/$(BINARY) && \
rm -f $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \
cp /tmp/$(JAIL_NAME)-rcd $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \
chmod +x $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \
rm /tmp/$(JAIL_NAME)-rcd"
# Copy .env separately (run once — avoid overwriting production config)
deploy-env:
$(SCP) .env \
$(SSH_USER)@$(HOST):$(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env
$(SSH) "chmod 600 $(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env && \
chown 1001:1001 $(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env"
# Pull .env from the jail to the local directory
pull-env:
$(SSH) "cat $(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env" > .env
start:
$(SSH) "rm -f $(JAIL_ROOT)/var/run/$(JAIL_NAME).pid && \
jexec $(JAIL_NAME) service $(JAIL_NAME) start"
restart:
$(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop 2>/dev/null; \
rm -f $(JAIL_ROOT)/var/run/$(JAIL_NAME).pid && \
jexec $(JAIL_NAME) service $(JAIL_NAME) start"
stop:
$(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop"
logs:
$(SSH) "jexec $(JAIL_NAME) tail -f /var/log/$(JAIL_NAME).log"
status:
$(SSH) "jls && jexec $(JAIL_NAME) service $(JAIL_NAME) status"
@$(MAKE) pg-status
# ── Jail DNS ─────────────────────────────────────────────────────────────────
dns-fix:
@echo "=== Current jail DNS ==="
$(SSH) "cat /jails/$(JAIL_NAME)/etc/resolv.conf"
@echo ""
@echo "=== Fixing jail DNS ==="
$(SSH) "printf 'nameserver 1.1.1.1\nnameserver 9.9.9.9\nnameserver 172.16.0.1\n' > /jails/$(JAIL_NAME)/etc/resolv.conf"
@echo "=== New jail DNS ==="
$(SSH) "cat /jails/$(JAIL_NAME)/etc/resolv.conf"
# ── Database Backfill ──────────────────────────────────────────────────────────
backfill:
@echo "=== Backfilling stale usernames ==="
$(SSH) "sh -s" < scripts/backfill-usernames.sh
clean:
rm -f $(BINARY)
go clean