- Update ToolboxStack/output/toolbox-base/Dockerfile with latest container configurations - Update ToolboxStack/output/toolbox-base/PROMPT with enhanced instructions - Update ToolboxStack/output/toolbox-base/README.md with current documentation - Update ToolboxStack/output/toolbox-base/build.sh with improved build process - Update ToolboxStack/output/toolbox-base/docker-compose.yml with refined service definitions - Update ToolboxStack/output/toolbox-base/run.sh with enhanced runtime configuration These changes improve the base developer environment configurations.
83 lines
2.6 KiB
Bash
Executable File
83 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Validate dependencies
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Error: docker is required but not installed." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker buildx version &> /dev/null; then
|
|
echo "Error: docker buildx is required but not available." >&2
|
|
exit 1
|
|
fi
|
|
|
|
IMAGE_NAME="tsysdevstack-toolboxstack-toolbox-base"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
USER_ID="${USER_ID_OVERRIDE:-$(id -u)}"
|
|
GROUP_ID="${GROUP_ID_OVERRIDE:-$(id -g)}"
|
|
USERNAME="${USERNAME_OVERRIDE:-toolbox}"
|
|
TEA_VERSION="${TEA_VERSION_OVERRIDE:-0.11.1}"
|
|
BUILDER_NAME="${BUILDER_NAME:-tsysdevstack-toolboxstack-builder}"
|
|
CACHE_DIR="${SCRIPT_DIR}/.build-cache"
|
|
TAG="${TAG_OVERRIDE:-dev}"
|
|
RELEASE_TAG="${RELEASE_TAG_OVERRIDE:-release-current}"
|
|
VERSION_TAG="${VERSION_TAG_OVERRIDE:-}"
|
|
PUSH="${PUSH_OVERRIDE:-false}"
|
|
|
|
echo "Building ${IMAGE_NAME} with UID=${USER_ID} GID=${GROUP_ID} USERNAME=${USERNAME}"
|
|
echo "Primary tag: ${TAG}"
|
|
|
|
if ! docker buildx inspect "${BUILDER_NAME}" >/dev/null 2>&1; then
|
|
echo "Creating builder: ${BUILDER_NAME}"
|
|
docker buildx create --driver docker-container --name "${BUILDER_NAME}" --use >/dev/null
|
|
else
|
|
echo "Using existing builder: ${BUILDER_NAME}"
|
|
docker buildx use "${BUILDER_NAME}" >/dev/null
|
|
fi
|
|
|
|
mkdir -p "${CACHE_DIR}"
|
|
|
|
echo "Starting build..."
|
|
docker buildx build \
|
|
--builder "${BUILDER_NAME}" \
|
|
--load \
|
|
--progress=plain \
|
|
--build-arg USER_ID="${USER_ID}" \
|
|
--build-arg GROUP_ID="${GROUP_ID}" \
|
|
--build-arg USERNAME="${USERNAME}" \
|
|
--build-arg TEA_VERSION="${TEA_VERSION}" \
|
|
--cache-from "type=local,src=${CACHE_DIR}" \
|
|
--cache-to "type=local,dest=${CACHE_DIR},mode=max" \
|
|
--tag "${IMAGE_NAME}:${TAG}" \
|
|
"${SCRIPT_DIR}"
|
|
|
|
if [[ "${PUSH}" == "true" ]]; then
|
|
echo "Pushing ${IMAGE_NAME}:${TAG}"
|
|
docker push "${IMAGE_NAME}:${TAG}"
|
|
|
|
if [[ "${TAG}" == "dev" && -n "${VERSION_TAG}" ]]; then
|
|
docker tag "${IMAGE_NAME}:${TAG}" "${IMAGE_NAME}:${VERSION_TAG}"
|
|
echo "Pushing ${IMAGE_NAME}:${VERSION_TAG}"
|
|
docker push "${IMAGE_NAME}:${VERSION_TAG}"
|
|
fi
|
|
|
|
if [[ "${TAG}" == "dev" ]]; then
|
|
docker tag "${IMAGE_NAME}:${TAG}" "${IMAGE_NAME}:${RELEASE_TAG}"
|
|
echo "Pushing ${IMAGE_NAME}:${RELEASE_TAG}"
|
|
docker push "${IMAGE_NAME}:${RELEASE_TAG}"
|
|
fi
|
|
fi
|
|
|
|
echo "Build completed successfully."
|
|
|
|
# Run security scan if TRIVY is available
|
|
if command -v trivy &> /dev/null; then
|
|
echo "Running security scan with Trivy..."
|
|
trivy image --exit-code 0 --severity HIGH,CRITICAL "${IMAGE_NAME}:${TAG}"
|
|
else
|
|
echo "Trivy not found. Install Trivy to perform security scanning."
|
|
fi
|