- Update collab/TSYSDevStack-toolbox-prompt.md with latest guidelines - Update output/PROMPT with improved instructions for AI collaboration - Update output/toolbox-base/PROMPT with enhanced development guidelines - Update output/toolbox-base/README.md with current documentation - Update output/toolbox-base/build.sh with improved build process - Update output/toolbox-base/docker-compose.yml with refined service definitions - Update output/toolbox-base/run.sh with enhanced runtime configuration - Add output/toolbox-base/release.sh for release management processes These changes improve the developer workspace experience and ensure consistent tooling across the TSYSDevStack project.
91 lines
2.4 KiB
Bash
Executable File
91 lines
2.4 KiB
Bash
Executable File
#!/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 rebuilds the toolbox-base image, tags it as:
|
|
- tsysdevstack-toolboxstack-toolbox-base:dev
|
|
- tsysdevstack-toolboxstack-toolbox-base:release-current
|
|
- tsysdevstack-toolboxstack-toolbox-base:v<semver>
|
|
|
|
When run without --dry-run it pushes all three tags.
|
|
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
|
|
|
|
echo "Preparing release for ${SEMVER}"
|
|
echo " dry-run: ${DRY_RUN}"
|
|
echo " allow-dirty: ${ALLOW_DIRTY}"
|
|
|
|
if [[ "${DRY_RUN}" == "true" ]]; then
|
|
VERSION_TAG_OVERRIDE="${SEMVER}" PUSH_OVERRIDE=false "${SCRIPT_DIR}/build.sh"
|
|
echo "[dry-run] Skipped pushing tags."
|
|
else
|
|
VERSION_TAG_OVERRIDE="${SEMVER}" PUSH_OVERRIDE=true "${SCRIPT_DIR}/build.sh"
|
|
echo "Release ${SEMVER} pushed as:"
|
|
echo " - tsysdevstack-toolboxstack-toolbox-base:dev"
|
|
echo " - tsysdevstack-toolboxstack-toolbox-base:release-current"
|
|
echo " - tsysdevstack-toolboxstack-toolbox-base:${SEMVER}"
|
|
fi
|