dx/dxkit/core/context.sh

72 lines
No EOL
1.8 KiB
Bash

#!/usr/bin/env bash
_CTX_ROOT="$PROJECT_ROOT"
_CTX_CONTAINER_ROOT="/app"
_CTX_DXKIT="${_CTX_ROOT}/dxkit"
_CTX_MODULES="${_CTX_DXKIT}/modules"
_CTX_COMMANDS="${_CTX_DXKIT}/commands"
_CTX_TEMPLATES="${_CTX_DXKIT}/templates"
_CTX_ENV="${_CTX_DXKIT}/env"
_CTX_PROJECT="${_CTX_ROOT}/.project"
_CTX_ARTIFACT="${_CTX_PROJECT}/artifacts"
# ============================================
# Wrappers
# ============================================
function ctx::require() {
local var="$1"
[[ -z "${!var}" ]] && {
echo "Missing required context variable: $var" >&2
return 1
}
}
# ============================================
# Static Context
# ============================================
function ctx::root() { echo "$_CTX_ROOT"; }
function ctx::dxkit() { echo "$_CTX_DXKIT"; }
function ctx::modules() { echo "$_CTX_MODULES"; }
function ctx::commands() { echo "$_CTX_COMMANDS"; }
function ctx::templates() { echo "$_CTX_TEMPLATES"; }
function ctx::env() { echo "$_CTX_ENV"; }
function ctx::project() { echo "$_CTX_PROJECT"; }
function ctx::artifact() { echo "$_CTX_ARTIFACT"; }
function ctx::container::root() { echo $_CTX_CONTAINER_ROOT; }
# ============================================
# Derived Context
# ============================================
function ctx::runtime() {
# ctx::require ENVIRONMENT || return 1
echo "$(ctx::artifact)/$ENVIRONMENT"
}
function ctx::docker() {
echo "$(ctx::artifact)/docker"
}
# ============================================
# Path helpers
# ============================================
function ctx::artifact::path() {
local IFS="/"
echo "$(ctx::artifact)/$*"
}
function ctx::container::path() {
local base="$(ctx::container::root)"
if [[ $# -eq 0 ]]; then
echo "$base"
return
fi
local IFS="/"
echo "$base/$*"
}