diff --git a/.env.example b/.env.example index 179a507..489b681 100644 --- a/.env.example +++ b/.env.example @@ -2,8 +2,7 @@ export POSTGRES_USER="" export POSTGRES_PASSWORD="" export POSTGRES_DB="" -export DATABASE_URL="postgresql://user:password@host:5432/database" # SERVER export SECRET_KEY="" -export RUN_SERVER_LOCALLY="true" +export DATABASE_URL="postgresql://user:password@host:5432/database" diff --git a/justfile b/justfile index 7b2e0d4..a18c3a0 100644 --- a/justfile +++ b/justfile @@ -6,23 +6,6 @@ set quiet := true pod_name := "pod_sigo" -# database - -pg_image := "docker.io/postgres:18-alpine" -pg_env := "-e POSTGRES_USER -e POSTGRES_PASSWORD -e POSTGRES_DB" -pg_volume := "-v ./sql/create:/docker-entrypoint-initdb.d" -pg_health_cmd := "--health-cmd 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'" -pg_health_conf := "--health-interval 10s --health-retries 3 --health-timeout 5s" -pg_health_start_period := "--health-start-period 30s" - -# server - -run_server_locally := env("RUN_SERVER_LOCALLY", "false") -server_port := if run_server_locally == "false" { "-p 8000:8000" } else { "" } -server_health_cmd := "--health-cmd 'wget -q --spider http://127.0.0.1:8000/api/health || exit 1'" -server_health_conf := "--health-interval 30s --health-retries 3 --health-timeout 10s" -server_health_start_period := "--health-start-period 10s" - # List available recipes _default: just --list @@ -52,51 +35,18 @@ lint: test: just server::test -# 󰏖 Create pod -[group("podman")] -_create-pod: - podman pod exists {{ pod_name }} || \ - podman pod create \ - --name {{ pod_name }} \ - {{ server_port }} \ - -p 5432:5432 - -# 󰏖 Build the server container image -[group("podman")] -build-server: - podman build -t sigo-server . - -#  Starts the PostgreSQL database inside the pod -[group("podman")] -_init-database: _create-pod - podman run -d \ - --pod {{ pod_name }} \ - --name db \ - {{ pg_env }} \ - {{ pg_health_cmd }} {{ pg_health_conf }} {{ pg_health_start_period }} \ - {{ pg_volume }} \ - {{ pg_image }} - -#  Starts the server -[group("podman")] -_init-server: _create-pod build-server - podman run -d \ - --pod {{ pod_name }} \ - --name server \ - -e DATABASE_URL -e SECRET_KEY \ - {{ server_health_cmd }} \ - {{ server_health_conf }} \ - {{ server_health_start_period }} \ - sigo-server - #  Starts the server and database [group("podman")] -up: _init-database _init-server +up: _create-pod + just server::init-database {{ pod_name }} + just server::init-server {{ pod_name }} echo {{ GREEN }}"Listening on http://0.0.0.0:8000"{{ NORMAL }} #  Starts only the database [group("podman")] -db-up: _init-database +db-up: + just _create-pod "" + just server::init-database {{ pod_name }} echo {{ GREEN }}" PostgreSQL is ready on port 5432"{{ NORMAL }} #  Stop and remove the entire pod @@ -105,3 +55,9 @@ down: podman pod exists {{ pod_name }} || (echo "Pod does not exist" && exit 1) podman pod stop {{ pod_name }} podman pod rm {{ pod_name }} + +# 󰏖 Create pod +[group("podman")] +_create-pod server_port="-p 8000:8000": + podman pod exists {{ pod_name }} \ + || podman pod create --name {{ pod_name }} {{ server_port }} -p 5432:5432 diff --git a/server/justfile b/server/justfile index 883d5e4..5f04581 100644 --- a/server/justfile +++ b/server/justfile @@ -1,28 +1,80 @@ set quiet := true +# database + +pg_image := "docker.io/postgres:18-alpine" +pg_env := "-e POSTGRES_USER -e POSTGRES_PASSWORD -e POSTGRES_DB" +pg_volume := "-v ./sql/create:/docker-entrypoint-initdb.d" +pg_health_cmd := "--health-cmd 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'" +pg_health_conf := "--health-interval 10s --health-retries 3 --health-timeout 5s" +pg_health_start_period := "--health-start-period 30s" + +# server + +server_port := "-p 8000:8000" +server_health_cmd := "--health-cmd 'wget -q --spider http://127.0.0.1:8000/api/health || exit 1'" +server_health_conf := "--health-interval 30s --health-retries 3 --health-timeout 10s" +server_health_start_period := "--health-start-period 10s" + _default: just --list #  Start HTTP server +[group("dev")] run: gleam run # 󰙨 Run unit tests +[group("dev")] test: gleam test #  Lint project +[group("dev")] lint: gleam check #  Generate SQL queries +[group("dev")] sql: gleam run -m squirrel #  Populate the database with mock data +[group("dev")] mock: gleam dev sow #  Update project dependencies +[group("dev")] deps-update: gleam deps update + +# 󰏖 Build the server container image +[group("podman")] +[no-cd] +build-server: + podman build -t sigo-server . + +#  Run database container +[group("podman")] +[no-cd] +init-database pod_name: + podman run -d \ + --pod {{ pod_name }} \ + --name db \ + {{ pg_env }} \ + {{ pg_health_cmd }} {{ pg_health_conf }} {{ pg_health_start_period }} \ + {{ pg_volume }} \ + {{ pg_image }} + +#  Run app container +[group("podman")] +init-server pod_name: build-server + podman run -d \ + --pod {{ pod_name }} \ + --name server \ + -e DATABASE_URL -e SECRET_KEY \ + {{ server_health_cmd }} \ + {{ server_health_conf }} \ + {{ server_health_start_period }} \ + sigo-server