Add self-hosted RCS backend, extension, and ops tooling
Ship the Go/SQLite API and Web UI, Chrome/Brave capture addon, Docker Compose, Pangolin reverse-proxy support, and a user-crontab watchdog so the binary stays running without systemd.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
.PHONY: backend build tidy test-api clean prune-dev-data install-cron uninstall-cron
|
||||
|
||||
REPO_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
|
||||
WATCHDOG := $(REPO_ROOT)/scripts/rcs-watchdog.sh
|
||||
CRON_MARK := \# RCS watchdog
|
||||
CRON_LINE := * * * * * $(WATCHDOG)
|
||||
|
||||
# Run the backend from the repo root (data/ next to Makefile).
|
||||
backend:
|
||||
cd backend && RCS_DATA_DIR=../data RCS_ADDR=127.0.0.1:8080 go run ./cmd/rcs
|
||||
|
||||
build:
|
||||
cd backend && go build -o ../bin/rcs ./cmd/rcs
|
||||
|
||||
tidy:
|
||||
cd backend && go mod tidy
|
||||
|
||||
test-api:
|
||||
curl -sS http://127.0.0.1:8080/api/health | tee /dev/stderr | grep -q '"ok":true'
|
||||
|
||||
# Remove local seed/test SQLite rows; keep real Reddit captures.
|
||||
prune-dev-data:
|
||||
bash scripts/prune-dev-data.sh
|
||||
|
||||
# Install a user crontab entry that runs the watchdog every minute.
|
||||
install-cron: build
|
||||
@mkdir -p "$(REPO_ROOT)/data"
|
||||
@test -f "$(REPO_ROOT)/data/rcs.env" || cp "$(REPO_ROOT)/data/rcs.env.example" "$(REPO_ROOT)/data/rcs.env"
|
||||
@chmod +x "$(WATCHDOG)"
|
||||
@tmp="$$(mktemp)"; \
|
||||
(crontab -l 2>/dev/null || true) > "$$tmp"; \
|
||||
if grep -Fq "$(CRON_MARK)" "$$tmp"; then \
|
||||
echo "crontab already has RCS watchdog entry"; \
|
||||
else \
|
||||
printf '%s\n%s\n' "$(CRON_MARK)" "$(CRON_LINE)" >> "$$tmp"; \
|
||||
crontab "$$tmp"; \
|
||||
echo "installed: $(CRON_LINE)"; \
|
||||
fi; \
|
||||
rm -f "$$tmp"
|
||||
|
||||
# Remove the RCS watchdog block from the user crontab.
|
||||
uninstall-cron:
|
||||
@tmp="$$(mktemp)"; \
|
||||
(crontab -l 2>/dev/null || true) > "$$tmp"; \
|
||||
if ! grep -Fq "$(CRON_MARK)" "$$tmp"; then \
|
||||
echo "no RCS watchdog crontab entry"; \
|
||||
rm -f "$$tmp"; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
awk -v mark="$(CRON_MARK)" -v line="$(CRON_LINE)" '\
|
||||
$$0 == mark { skip=1; next } \
|
||||
skip && $$0 == line { skip=0; next } \
|
||||
skip { skip=0 } \
|
||||
{ print }' "$$tmp" > "$$tmp.out"; \
|
||||
crontab "$$tmp.out"; \
|
||||
rm -f "$$tmp" "$$tmp.out"; \
|
||||
echo "removed RCS watchdog crontab entry"
|
||||
|
||||
clean:
|
||||
rm -rf bin/ data/*.db data/*.db-* data/screenshots/*
|
||||
# keep screenshots/.gitkeep
|
||||
mkdir -p data/screenshots
|
||||
touch data/screenshots/.gitkeep
|
||||
Reference in New Issue
Block a user