#!/bin/bash # Commandline args action="$1" environment="$2" # Pulls project version from version.toml project_version() { local version=$(awk -F'[" ]+' '/^\[project\]/{getline; print $3}' "version.toml") echo "v$version" } # Pulls container version from version.toml container_version() { local container="$1" local version=$(awk -F'[" ]+' -v container="$container" '/^\[containers\]/{block=$1} block == "[containers]" && $1 == container {getline; print $3}' "version.toml") echo "v$version" } # Set the build arguments as environment variables BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') GIT_COMMIT=$(git rev-parse --short HEAD) PROJECT_VERSION=$(project_version) case $action in help) echo "timmypidashev.com | deploy script" echo "Environments:" echo " * dev" echo " - development environment, builds include local https, debug mode, and hot reloading" echo "" echo " * prod" echo " - production environment, builds include optimizations and are ready to roll" echo "" echo "Actions:" echo " * build" echo " - builds the entire stack without cache" echo " - example: '{action} {environment}' or '{action} {environment}" echo "" echo " * run" echo " - runs the entire stack with caching enabled" echo " - example: '{action} {environment}'" echo " - Note: individual containers cannot run on their own" echo "" echo " * bump" echo " - bumps a containers version and the project version" echo " - example: '{action} {container}'" echo "" echo " * push" echo " - pushes an image to ghcr.io" echo " - example: '{action} {container}" echo " - Note: only production images are pushed" exit 1 ;; build) if [ "$environment" == "dev" ]; then docker compose --file compose.dev.yml build \ --build-arg BUILD_DATE=$BUILD_DATE \ --build-arg GIT_COMMIT=$GIT_COMMIT \ --build-arg PROJECT_VERSION="$PROJECT_VERSION" \ --build-arg DNS_VERSION=$(container_version "dns") \ --build-arg PROXY_VERSION=$(container_version "proxy") \ elif [ "$environment" == "prod" ]; then echo "build prod" else echo "Invalid environment. Use 'dev' or 'prod'!" exit 1 fi ;; run) if [ "$environment" == "dev" ]; then echo "run dev" elif [ "$environment" == "prod" ]; then echo "run prod" else echo "Invalid environment. Use 'dev' or 'prod'!" exit 1 fi ;; bump) "bump pkg" ;; push) "push pkg" ;; *) echo "Invalid action. Use 'build', 'run', or 'push'!" ;; esac