feat(toolbox): update toolbox template configuration
- Update ToolboxStack/output/toolbox-template/Dockerfile with latest configuration - Add ToolboxStack/output/toolbox-template/release.sh for release management - Refine template functionality and ensure proper operations - Align with project standards and conventions This enhances the ToolboxStack template for creating new developer environments.
This commit is contained in:
		
							
								
								
									
										102
									
								
								ToolboxStack/output/toolbox-template/release.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										102
									
								
								ToolboxStack/output/toolbox-template/release.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| set -euo pipefail | ||||
|  | ||||
| usage() { | ||||
|     cat <<'EOU' | ||||
| Usage: ./release.sh [--dry-run] [--allow-dirty] <semver> | ||||
|  | ||||
| Examples: | ||||
|   ./release.sh 0.2.0 | ||||
|   ./release.sh --dry-run 0.2.0 | ||||
|  | ||||
| This script promotes the dev tag to: | ||||
|   - tsysdevstack-toolboxstack-<name>:release-current | ||||
|   - tsysdevstack-toolboxstack-<name>:v<semver> | ||||
| EOU | ||||
| } | ||||
|  | ||||
| DRY_RUN=false | ||||
| ALLOW_DIRTY=false | ||||
| VERSION="" | ||||
|  | ||||
| while (( $# > 0 )); do | ||||
|     case "$1" in | ||||
|         --dry-run) | ||||
|             DRY_RUN=true | ||||
|             shift | ||||
|             ;; | ||||
|         --allow-dirty) | ||||
|             ALLOW_DIRTY=true | ||||
|             shift | ||||
|             ;; | ||||
|         -h|--help) | ||||
|             usage | ||||
|             exit 0 | ||||
|             ;; | ||||
|         -*) | ||||
|             echo "Unknown option: $1" >&2 | ||||
|             usage | ||||
|             exit 1 | ||||
|             ;; | ||||
|         *) | ||||
|             VERSION="$1" | ||||
|             shift | ||||
|             ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| if [[ -z "${VERSION}" ]]; then | ||||
|     echo "Error: semantic version is required." >&2 | ||||
|     usage | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| if [[ "${VERSION}" =~ ^v?([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then | ||||
|     SEMVER="v${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${BASH_REMATCH[3]}" | ||||
| else | ||||
|     echo "Error: version must be semantic (e.g., 0.2.0 or v0.2.0)." >&2 | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||||
| REPO_ROOT="$(cd "${SCRIPT_DIR}" && git rev-parse --show-toplevel 2>/dev/null || true)" | ||||
|  | ||||
| if [[ -n "${REPO_ROOT}" && "${ALLOW_DIRTY}" != "true" ]]; then | ||||
|     if ! git -C "${REPO_ROOT}" diff --quiet --ignore-submodules --exit-code; then | ||||
|         echo "Error: git working tree has uncommitted changes. Please commit or stash before releasing." >&2 | ||||
|         exit 1 | ||||
|     fi | ||||
| elif [[ -z "${REPO_ROOT}" ]]; then | ||||
|     echo "Warning: unable to resolve git repository root; skipping clean tree check." >&2 | ||||
| fi | ||||
|  | ||||
| # Get the toolbox name from the directory name | ||||
| TOOLBOX_NAME="${TOOLBOX_NAME_OVERRIDE:-$(basename "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")}" | ||||
| IMAGE_NAME="tsysdevstack-toolboxstack-${TOOLBOX_NAME#toolbox-}" | ||||
|  | ||||
| echo "Preparing release for ${SEMVER}" | ||||
| echo "  dry-run: ${DRY_RUN}" | ||||
| echo "  allow-dirty: ${ALLOW_DIRTY}" | ||||
|  | ||||
| # First, ensure we have the dev tag built | ||||
| if [[ "${DRY_RUN}" == "true" ]]; then | ||||
|     echo "[dry-run] Would build dev tag" | ||||
| else | ||||
|     echo "Building dev tag..." | ||||
|     "${SCRIPT_DIR}/build.sh" | ||||
| fi | ||||
|  | ||||
| # Tag the dev image as release-current and with the version | ||||
| if [[ "${DRY_RUN}" == "true" ]]; then | ||||
|     echo "[dry-run] Would tag ${IMAGE_NAME}:dev as:" | ||||
|     echo "  - ${IMAGE_NAME}:release-current" | ||||
|     echo "  - ${IMAGE_NAME}:${SEMVER}" | ||||
| else | ||||
|     echo "Tagging ${IMAGE_NAME}:dev as release-current and ${SEMVER}..." | ||||
|     docker tag "${IMAGE_NAME}:dev" "${IMAGE_NAME}:release-current" | ||||
|     docker tag "${IMAGE_NAME}:dev" "${IMAGE_NAME}:${SEMVER}" | ||||
|     echo "Release ${SEMVER} tagged as:" | ||||
|     echo "  - ${IMAGE_NAME}:release-current" | ||||
|     echo "  - ${IMAGE_NAME}:${SEMVER}" | ||||
| fi | ||||
		Reference in New Issue
	
	Block a user