pg_pass := "password" pg_user := "postgres" pg_container := "postgres-frostbyte" # This is the name of the postgres container pg_port := "5432" network := "fb_network" db_name := "frostbyte" # This is the name of the database conn_string := "postgres://" + pg_user + ":" + pg_pass + "@" + pg_container + ":" + pg_port / db_name conn_local := "postgres://" + pg_user + ":" + pg_pass + "@" + "localhost" + ":" + pg_port / db_name env_string := "DATABASE_URL=" + conn_string env_local := "DATABASE_URL=" + conn_local # Builds a debug container and runs it dev: start-debug @echo "Cd into client and run 'npm run dev' to start the client in dev mode." # Builds a debug container [private] build-container-server-debug: podman build -t fb-server-debug -f container/ContainerfileDebug . # Builds a debug container and runs it [private] start-debug: start-postgres-dev clean-podman init-sqlx build-container-server-debug podman network create {{network}} --ignore podman run -d --network {{network}} -e {{env_string}} -p 8080:8080 --name frostbyte-debug fb-server-debug podman ps | grep frostbyte-debug @echo "Debug server started." # Builds a release container [private] build-container-release: podman build -t fb-server -f container/Containerfile . # Builds a release container and runs it start-release: start-postgres-dev clean-podman init-sqlx build-container-release create-network podman run -d --network {{network}} -e {{env_string}} -p 8080:8080 --name frostbyte fb-server # Initializes the database, runs migrations and then prepares sqlx [private] init-sqlx: install-sqlx echo {{env_local}} > server/.env cd server && sqlx database create --connect-timeout 40 # Postgres takes a while to start up cd server && sqlx migrate run cd server && cargo sqlx prepare # If this fails, try running just clean # Shorthand for installing sqlx [private] install-sqlx: cargo install sqlx-cli # Starts a postgres container for development [private] start-postgres-dev: create-network podman rm -f {{pg_container}} podman run --network {{network}} --name {{pg_container}} -e POSTGRES_PASSWORD={{pg_pass}} -d -p {{pg_port}}:5432 docker.io/postgres:16.1-alpine [private] create-network: podman network create {{network}} --ignore # Forcefully stops and removes the frostbyte container [private] clean-podman: podman container rm -f frostbyte podman container rm -f frostbyte-debug # Removes the database container [private] clean-db: podman container rm -f {{pg_container}} # Removes the network [private] clean-network: podman network rm -f {{network}} # Forcefully removes the frostbyte images [private] clean-images: podman image rm -f fb-server podman image rm -f fb-server-debug podman image rm -f postgres # Cleans up everything related to the project clean: clean-podman clean-db clean-images clean-network && state rm -rf client-solid/dist rm -rf client-solid/node_modules rm -rf server/public rm -rf server/target @echo "Cleaned up! Make sure to clean up podman volumes and networks." state: podman ps -a podman images ls -a podman network ls du -sch client* server