44set -e
55set -o pipefail
66
7- # Find project root (where .git directory is)
7+ # Find script directory and load common utilities
88SCRIPT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd) "
9- PROJECT_ROOT= " $( cd " ${SCRIPT_DIR} /../.. " && pwd ) "
9+ source " ${SCRIPT_DIR} /common.sh "
1010
11- # Detect git branch and sanitize for docker naming (replace / and special chars with _)
12- GIT_BRANCH=$( cd " ${PROJECT_ROOT} " && git rev-parse --abbrev-ref HEAD 2> /dev/null | tr ' /' ' _' | tr -cd ' a-zA-Z0-9_-' || echo " " )
13- # Handle edge cases: detached HEAD, empty branch name
14- GIT_BRANCH=${GIT_BRANCH:- unknown}
15- # If branch is just "HEAD" (detached state), make it more descriptive
16- if [ " ${GIT_BRANCH} " = " HEAD" ]; then
17- GIT_BRANCH=" detached"
18- fi
19-
20- # Ensure USER is set
21- USER_NAME=${USER:- $(whoami 2>/ dev/ null || echo " user" )}
22-
23- # Default container name: ck_<username>_<branch>
24- DEFAULT_NAME=" ck_${USER_NAME} _${GIT_BRANCH} "
25- CONTAINER_NAME=" ${CK_CONTAINER_NAME:- ${DEFAULT_NAME} } "
11+ # Initialize configuration
12+ PROJECT_ROOT=$( get_project_root " ${SCRIPT_DIR} " )
13+ CONTAINER_NAME=$( get_container_name " ${PROJECT_ROOT} " )
2614
2715# Help message
2816show_help () {
@@ -53,28 +41,14 @@ Environment:
5341EOF
5442}
5543
56- # Detect GPU target
57- detect_gpu () {
58- local container=$1
59- # Allow override via GPU_TARGET environment variable
60- if [ -n " ${GPU_TARGET:- } " ]; then
61- echo " ${GPU_TARGET} "
62- return 0
63- fi
64- docker exec " ${container} " bash -c "
65- rocminfo 2>/dev/null | grep -oP 'gfx[0-9a-z]+' | head -1 || echo 'gfx950'
66- " | tr -d ' \r\n'
67- }
68-
6944# Start container
7045cmd_start () {
7146 local name=" ${1:- ${CONTAINER_NAME} } "
72- local docker_image=" ${CK_DOCKER_IMAGE :- rocm / composable_kernel : ck_ub24.04_rocm7.0.1} "
47+ local docker_image=$( get_docker_image )
7348
74- # Check if container exists (exact match to avoid substring collisions)
75- if docker ps -a --filter " name=^${name} $" --format ' {{.Names}}' | grep -q " ^${name} $" ; then
76- # Check if container is running
77- if docker ps --filter " name=^${name} $" --format ' {{.Names}}' | grep -q " ^${name} $" ; then
49+ # Check if container exists and is running
50+ if container_exists " ${name} " ; then
51+ if container_is_running " ${name} " ; then
7852 echo " Container '${name} ' is already running"
7953 return 0
8054 else
@@ -123,16 +97,16 @@ cmd_build() {
12397 esac
12498 done
12599
126- # Check if container is running (exact match)
127- if ! docker ps --filter " name=^ ${name} $ " --format ' {{.Names}} ' | grep -q " ^ ${name} $ " ; then
100+ # Check if container is running
101+ if ! container_is_running " ${name} " ; then
128102 echo " Container '${name} ' not running. Starting..."
129103 cmd_start " ${name} "
130104 fi
131105
132106 # Reconfigure CMake if requested or if build.ninja doesn't exist
133107 if [ " $reconfigure " = true ] || ! docker exec " ${name} " test -f /workspace/build/build.ninja 2> /dev/null; then
134108 echo " Detecting GPU target..."
135- local gpu_target=$( detect_gpu " ${name} " )
109+ local gpu_target=$( detect_gpu_target " ${name} " )
136110
137111 if [ " $reconfigure " = true ]; then
138112 echo " Reconfiguring CMake from scratch for GPU target: ${gpu_target} "
@@ -200,8 +174,8 @@ cmd_test() {
200174 return 1
201175 fi
202176
203- # Check if container is running (exact match)
204- if ! docker ps --filter " name=^ ${name} $ " --format ' {{.Names}} ' | grep -q " ^ ${name} $ " ; then
177+ # Check if container is running
178+ if ! container_is_running " ${name} " ; then
205179 echo " Error: Container '${name} ' not running"
206180 echo " Start it with: ck-docker start --name ${name} "
207181 return 1
@@ -226,8 +200,8 @@ cmd_test() {
226200cmd_shell () {
227201 local name=" ${1:- ${CONTAINER_NAME} } "
228202
229- # Check if container is running (exact match)
230- if ! docker ps --filter " name=^ ${name} $ " --format ' {{.Names}} ' | grep -q " ^ ${name} $ " ; then
203+ # Check if container is running
204+ if ! container_is_running " ${name} " ; then
231205 echo " Container '${name} ' not running. Starting..."
232206 cmd_start " ${name} "
233207 fi
@@ -239,22 +213,22 @@ cmd_shell() {
239213# Status
240214cmd_status () {
241215 local name=" ${1:- } "
242- local docker_image=" ${CK_DOCKER_IMAGE :- rocm / composable_kernel : ck_ub24.04_rocm7.0.1} "
216+ local docker_image=$( get_docker_image )
243217
244218 if [ -z " $name " ]; then
245219 echo " Composable Kernel Docker Containers:"
246220 echo " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
247221 docker ps -a --filter " ancestor=${docker_image} " \
248222 --format " table {{.Names}}\t{{.Status}}\t{{.CreatedAt}}" || echo " No containers found"
249223 else
250- # Check if container is running (exact match)
251- if docker ps --filter " name=^ ${name} $ " --format ' {{.Names}} ' | grep -q " ^ ${name} $ " ; then
224+ # Check container status
225+ if container_is_running " ${name} " ; then
252226 echo " Container '${name} ' is RUNNING"
253227 docker ps --filter " name=^${name} $" --format " table {{.Names}}\t{{.Status}}\t{{.Image}}"
254228 echo " "
255229 echo " GPU Information:"
256230 docker exec " ${name} " bash -c " rocm-smi --showproductname 2>/dev/null | head -10 || echo 'No GPU detected'"
257- elif docker ps -a --filter " name=^ ${name} $ " --format ' {{.Names}} ' | grep -q " ^ ${name} $ " ; then
231+ elif container_exists " ${name} " ; then
258232 echo " Container '${name} ' exists but is STOPPED"
259233 echo " Start with: ck-docker start ${name} "
260234 else
@@ -268,8 +242,8 @@ cmd_status() {
268242cmd_stop () {
269243 local name=" ${1:- ${CONTAINER_NAME} } "
270244
271- # Check if container exists (exact match)
272- if docker ps -a --filter " name=^ ${name} $ " --format ' {{.Names}} ' | grep -q " ^ ${name} $ " ; then
245+ # Check if container exists
246+ if container_exists " ${name} " ; then
273247 echo " Stopping and removing container '${name} '..."
274248 docker stop " ${name} " 2> /dev/null || true
275249 docker rm " ${name} " 2> /dev/null || true
0 commit comments