183 lines
5.6 KiB
Makefile
183 lines
5.6 KiB
Makefile
set fallback := true
|
|
|
|
export ENV_FILE := ".env.local"
|
|
export LOCAL_K8S_HOST := env("LOCAL_K8S_HOST", "")
|
|
export EXTERNAL_K8S_HOST := env("EXTERNAL_K8S_HOST", "")
|
|
export KEYCLOAK_HOST := env("KEYCLOAK_HOST", "")
|
|
export KEYCLOAK_REALM := env("KEYCLOAK_REALM", "")
|
|
export CONTAINER_REGISTRY_SERVER := env("CONTAINER_REGISTRY_SERVER", "")
|
|
export CONTAINER_REGISTRY_USERNAME := env("CONTAINER_REGISTRY_USERNAME", "")
|
|
export CONTAINER_REGISTRY_PASSWORD := env("CONTAINER_REGISTRY_PASSWORD", "")
|
|
export CONTAINER_REGISTRY_EMAIL := env("CONTAINER_REGISTRY_EMAIL", "")
|
|
|
|
# Check if environment variables are set
|
|
check:
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
if [ -z "${LOCAL_K8S_HOST}" ]; then
|
|
echo "LOCAL_K8S_HOST is not set. Please execute 'just env::setup'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Set up environment variables
|
|
setup:
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
if [ -f ../.env.local ]; then
|
|
echo ".env.local already exists." >&2
|
|
if gum confirm "Do you want to overwrite it?"; then
|
|
LOCAL_K8S_HOST=""
|
|
EXTERNAL_K8S_HOST=""
|
|
KEYCLOAK_HOST=""
|
|
elif [[ $? -eq 130 ]]; then
|
|
echo "Setup cancelled by user." >&2
|
|
exit 1
|
|
else
|
|
echo "Aborting setup." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
while [ -z "${LOCAL_K8S_HOST}" ]; do
|
|
if ! LOCAL_K8S_HOST=$(
|
|
gum input --prompt="Internal k8s hostname (for SSH): " \
|
|
--width=100 --placeholder="k8s-host"
|
|
); then
|
|
echo "Setup cancelled." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
while [ -z "${EXTERNAL_K8S_HOST}" ]; do
|
|
if ! EXTERNAL_K8S_HOST=$(
|
|
gum input --prompt="External k8s hostname (FQDN): " \
|
|
--width=100 --placeholder="k8s.example.com"
|
|
); then
|
|
echo "Setup cancelled." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
while [ -z "${KEYCLOAK_HOST}" ]; do
|
|
if ! KEYCLOAK_HOST=$(
|
|
gum input --prompt="Keycloak host: " \
|
|
--width=100 --placeholder="auth.example.com"
|
|
); then
|
|
echo "Setup cancelled." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
while [ -z "${KEYCLOAK_REALM}" ]; do
|
|
if ! KEYCLOAK_REALM=$(
|
|
gum input --prompt="Keycloak realm: " \
|
|
--width=100 --placeholder="buunstack"
|
|
); then
|
|
echo "Setup cancelled." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
rm -f ../.env.local
|
|
gomplate -f env.local.gomplate -o ../.env.local
|
|
|
|
npm i
|
|
|
|
# Set a specific key in .env.local
|
|
[working-directory("..")]
|
|
set key_value:
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
if [ ! -f "${ENV_FILE}" ]; then
|
|
echo "Error: ${ENV_FILE} not found. Run 'just env::setup' first." >&2
|
|
exit 1
|
|
fi
|
|
KV="{{ key_value }}"
|
|
if [[ ! "${KV}" =~ = ]]; then
|
|
echo "Error: Invalid format. Use 'just env::set KEY=VALUE'" >&2
|
|
exit 1
|
|
fi
|
|
KEY="${KV%%=*}"
|
|
VALUE="${KV#*=}"
|
|
if ! [[ "${KEY}" =~ ^[A-Z_][A-Z0-9_]*$ ]]; then
|
|
echo "Error: Invalid key name. Use uppercase letters, numbers, and underscores only." >&2
|
|
exit 1
|
|
fi
|
|
if grep -q "^${KEY}=" "${ENV_FILE}"; then
|
|
# Update existing key
|
|
sed -i.bak "s|^${KEY}=.*|${KEY}=${VALUE}|" "${ENV_FILE}"
|
|
echo "✓ Updated ${KEY} in ${ENV_FILE}"
|
|
else
|
|
# Add new key
|
|
echo "" >> "${ENV_FILE}"
|
|
echo "${KEY}=${VALUE}" >> "${ENV_FILE}"
|
|
echo "✓ Added ${KEY} to ${ENV_FILE}"
|
|
fi
|
|
grep "^${KEY}=" "${ENV_FILE}"
|
|
|
|
# Set multiple keys in .env.local
|
|
[working-directory("..")]
|
|
set-multi *args:
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
if [ ! -f "${ENV_FILE}" ]; then
|
|
echo "Error: ${ENV_FILE} not found. Run 'just env::setup' first." >&2
|
|
exit 1
|
|
fi
|
|
ARGS="{{ args }}"
|
|
if [ -z "${ARGS}" ]; then
|
|
echo "Error: No arguments provided. Use 'just env::set-multi KEY1=VALUE1 KEY2=VALUE2 ...'" >&2
|
|
exit 1
|
|
fi
|
|
NEEDS_BLANK_LINE=false
|
|
for KV in {{ args }}; do
|
|
if [[ ! "${KV}" =~ = ]]; then
|
|
echo "Error: Invalid format for '${KV}'. Use KEY=VALUE format." >&2
|
|
exit 1
|
|
fi
|
|
KEY="${KV%%=*}"
|
|
VALUE="${KV#*=}"
|
|
if ! [[ "${KEY}" =~ ^[A-Z_][A-Z0-9_]*$ ]]; then
|
|
echo "Error: Invalid key name '${KEY}'. Use uppercase letters, numbers, and underscores only." >&2
|
|
exit 1
|
|
fi
|
|
if grep -q "^${KEY}=" "${ENV_FILE}"; then
|
|
sed -i.bak "s|^${KEY}=.*|${KEY}=${VALUE}|" "${ENV_FILE}"
|
|
echo "✓ Updated ${KEY}"
|
|
else
|
|
if [ "${NEEDS_BLANK_LINE}" = "false" ]; then
|
|
echo "" >> "${ENV_FILE}"
|
|
NEEDS_BLANK_LINE=true
|
|
fi
|
|
echo "${KEY}=${VALUE}" >> "${ENV_FILE}"
|
|
echo "✓ Added ${KEY}"
|
|
fi
|
|
done
|
|
echo "---"
|
|
echo "All environment variables have been set successfully."
|
|
|
|
# Show all environment variables
|
|
[working-directory("..")]
|
|
show:
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
if [ ! -f "${ENV_FILE}" ]; then
|
|
echo "Error: ${ENV_FILE} not found. Run 'just env::setup' first." >&2
|
|
exit 1
|
|
fi
|
|
echo "Current configuration in ${ENV_FILE}:"
|
|
echo "---"
|
|
grep -E "^[A-Z_]+=.*" "${ENV_FILE}" || echo "(no variables set)"
|
|
|
|
# Get a specific key value
|
|
[working-directory("..")]
|
|
get key:
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
KEY="{{ key }}"
|
|
if [ ! -f "${ENV_FILE}" ]; then
|
|
echo "Error: ${ENV_FILE} not found." >&2
|
|
exit 1
|
|
fi
|
|
VALUE=$(grep "^${KEY}=" "${ENV_FILE}" 2>/dev/null | cut -d'=' -f2- || echo "")
|
|
if [ -z "${VALUE}" ]; then
|
|
echo "Error: ${KEY} not found in ${ENV_FILE}" >&2
|
|
exit 1
|
|
fi
|
|
echo "${VALUE}"
|