fluxer/justfile
2026-01-01 21:05:54 +00:00

156 lines
4.7 KiB
Makefile

# Fluxer Development Justfile
# Uses the dev CLI (Go) as a compose wrapper
# Dev CLI command
devctl := "go run ./dev"
# ---------------------------------------------------------------------------
# Docker Compose: Service Management
# ---------------------------------------------------------------------------
# Start all or selected services in the background
# Usage:
# just up # all services
# just up api gateway # specific services
up *SERVICES:
{{devctl}} ensure-network
{{devctl}} up {{SERVICES}}
# Start all or selected services and watch for changes
# Usage:
# just watch
# just watch api gateway
watch *SERVICES:
{{devctl}} ensure-network
docker compose --env-file dev/.env -f dev/compose.yaml watch {{SERVICES}}
# Stop and remove containers (preserves volumes)
# Usage:
# just down
down:
{{devctl}} down
# Stop and remove containers including volumes
# Usage:
# just nuke
nuke:
{{devctl}} down --volumes
# Restart all or selected services
# Usage:
# just restart
# just restart api gateway
restart *SERVICES:
{{devctl}} restart {{SERVICES}}
# Show logs for all or selected services
# Usage:
# just logs
# just logs api
# just logs api gateway
logs *SERVICES:
{{devctl}} logs {{SERVICES}}
# List running containers
# Usage:
# just ps
ps:
{{devctl}} ps
# Open a shell in a service container
# Usage:
# just sh api
sh SERVICE:
{{devctl}} sh {{SERVICE}}
# Execute a command in a service container
# Usage:
# just exec api "env | sort"
exec SERVICE CMD:
{{devctl}} exec {{SERVICE}} sh -c "{{CMD}}"
# ---------------------------------------------------------------------------
# Configuration & Setup
# ---------------------------------------------------------------------------
# Sync LiveKit configuration from environment variables
# Usage:
# just livekit-sync
livekit-sync:
{{devctl}} livekit-sync
# Download GeoIP database
# Usage:
# just geoip-download
# just geoip-download TOKEN=xxx
geoip-download TOKEN='':
if [ "{{TOKEN}}" = "" ]; then {{devctl}} geoip-download; else {{devctl}} geoip-download --token {{TOKEN}}; fi
# Ensure Docker network exists
# Usage:
# just ensure-network
ensure-network:
{{devctl}} ensure-network
# Bootstrap development environment
# Usage:
# just bootstrap
bootstrap:
just ensure-network
just livekit-sync
just geoip-download
# ---------------------------------------------------------------------------
# Cassandra Migrations
# ---------------------------------------------------------------------------
mig name:
@cargo run --release --quiet --manifest-path scripts/cassandra-migrate/Cargo.toml -- create "{{name}}"
mig-check:
@cargo run --release --quiet --manifest-path scripts/cassandra-migrate/Cargo.toml -- check
mig-up host="localhost" user="cassandra" pass="cassandra":
@cargo run --release --quiet --manifest-path scripts/cassandra-migrate/Cargo.toml -- --host "{{host}}" --username "{{user}}" --password "{{pass}}" up
mig-status host="localhost" user="cassandra" pass="cassandra":
@cargo run --release --quiet --manifest-path scripts/cassandra-migrate/Cargo.toml -- --host "{{host}}" --username "{{user}}" --password "{{pass}}" status
# ---------------------------------------------------------------------------
# Utilities
# ---------------------------------------------------------------------------
# Run license enforcer
lic:
@cargo run --release --quiet --manifest-path scripts/license-enforcer/Cargo.toml
# Generate snowflake IDs
snow count="1":
@cargo run --release --quiet --manifest-path scripts/snowflake-generator/Cargo.toml -- --count {{count}}
# ---------------------------------------------------------------------------
# Integration Tests
# ---------------------------------------------------------------------------
# Spin up the full integration stack, run the Go tests, then tear everything down
integration-tests:
set -euo pipefail
trap 'docker compose -f tests/integration/compose.yaml down' EXIT
docker compose -f tests/integration/compose.yaml up --build --abort-on-container-exit integration-tests
# ---------------------------------------------------------------------------
# Go Tooling & QA
# ---------------------------------------------------------------------------
# Install pinned Go tooling (staticcheck, golangci-lint) with Go 1.25.5
go-tools-install:
GOTOOLCHAIN=go1.25.5 go install honnef.co/go/tools/cmd/staticcheck@2025.1.1
GOTOOLCHAIN=go1.25.5 go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.61.0
# Run formatting, tests, and linters for integration tests
go-integration-check:
gofmt -w tests/integration
go test ./tests/integration/...
$(go env GOPATH)/bin/staticcheck ./tests/integration/...
$(go env GOPATH)/bin/golangci-lint run ./tests/integration/...