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}"