1- #! /bin/bash
2-
3- # This script tests a single Docker Compose file by starting and stopping containers.
1+ #! /usr/bin/env bash
2+ #
3+ # Test a Docker Compose file by starting and stopping containers.
4+ #
5+ # This script validates Docker Compose configurations by attempting to start,
6+ # inspect, and cleanly stop containers.
47#
58# Usage:
6- # ./test-docker-compose.bash <tutorial-name|docker-compose-file>
9+ # ./brev/ test-docker-compose.bash <tutorial-name|docker-compose-file>
710#
811# Examples:
9- # ./test-docker-compose.bash accelerated-python
10- # ./test-docker-compose.bash tutorials/accelerated-python/brev/docker-compose.yml
12+ # ./brev/ test-docker-compose.bash accelerated-python
13+ # ./brev/ test-docker-compose.bash tutorials/accelerated-python/brev/docker-compose.yml
1114
1215set -euo pipefail
1316
17+ # Colors for output
18+ RED=' \033[0;31m'
19+ GREEN=' \033[0;32m'
20+ YELLOW=' \033[1;33m'
21+ NC=' \033[0m' # No Color
22+
1423SCRIPT_PATH=$( cd $( dirname ${0} ) ; pwd -P)
1524REPO_ROOT=$( cd ${SCRIPT_PATH} /..; pwd -P)
1625
26+ # Print usage
27+ usage () {
28+ cat << EOF
29+ Usage: $( basename " $0 " ) <tutorial-name|docker-compose-file>
30+
31+ Test a Docker Compose file by starting and stopping containers.
32+
33+ Arguments:
34+ tutorial-name Name of tutorial (e.g., accelerated-python)
35+ docker-compose-file Path to docker-compose.yml file
36+
37+ Examples:
38+ $( basename " $0 " ) accelerated-python
39+ $( basename " $0 " ) tutorials/accelerated-python/brev/docker-compose.yml
40+
41+ Requirements:
42+ - Docker and Docker Compose must be installed
43+ EOF
44+ exit 1
45+ }
46+
1747# Check argument
1848if [ $# -ne 1 ]; then
19- echo " Error: Tutorial name or Docker Compose file path is required"
20- echo " Usage: $0 <tutorial-name|docker-compose-file>"
21- echo " Examples:"
22- echo " $0 accelerated-python"
23- echo " $0 tutorials/accelerated-python/brev/docker-compose.yml"
24- exit 1
49+ echo -e " ${RED} Error: Tutorial name or Docker Compose file path is required${NC} "
50+ usage
2551fi
2652
2753ARG=$1
4369
4470 # Check if tutorial directory exists
4571 if [ ! -d " ${TUTORIAL_PATH} " ]; then
46- echo " ❌ Error: Tutorial directory not found: ${TUTORIAL_PATH} "
72+ echo -e " ${RED} Error: Tutorial directory not found: ${TUTORIAL_PATH}${NC } "
4773 exit 1
4874 fi
4975
5278
5379# Validate docker-compose file exists
5480if [ ! -f " ${COMPOSE_FILE} " ]; then
55- echo " ❌ Error: Docker Compose file not found: ${COMPOSE_FILE} "
81+ echo -e " ${RED} Error: Docker Compose file not found: ${COMPOSE_FILE}${NC } "
5682 exit 1
5783fi
5884
59- echo " ============================================"
85+ echo " ================================================================================ "
6086echo " Testing Docker Compose: ${COMPOSE_FILE} "
61- echo " ============================================"
87+ echo " ================================================================================ "
6288echo " "
6389
6490# Start containers
6591echo " 📦 Starting containers..."
6692echo " "
6793if docker compose -f " ${COMPOSE_FILE} " up -d; then
6894 echo " "
69- echo " ✅ Containers started successfully"
95+ echo -e " ${GREEN} ✅ Containers started successfully${NC} "
7096 echo " "
7197
7298 # Wait a moment for containers to initialize
@@ -81,32 +107,32 @@ if docker compose -f "${COMPOSE_FILE}" up -d; then
81107
82108 # Capture and display logs
83109 echo " 📋 Container logs:"
84- echo " --------------------------------------------"
110+ echo " -------------------------------------------------------------------------------- "
85111 docker compose -f " ${COMPOSE_FILE} " logs
86- echo " --------------------------------------------"
112+ echo " -------------------------------------------------------------------------------- "
87113 echo " "
88114
89115 # Stop containers
90116 echo " 🛑 Stopping containers..."
91117 if docker compose -f " ${COMPOSE_FILE} " down; then
92- echo " ✅ Containers stopped successfully"
118+ echo -e " ${GREEN} ✅ Containers stopped successfully${NC} "
93119 echo " "
94120 return_code=0
95121 else
96- echo " ❌ Failed to stop containers"
122+ echo -e " ${RED} ❌ Failed to stop containers${NC} "
97123 echo " "
98124 return_code=1
99125 fi
100126else
101127 echo " "
102- echo " ❌ Failed to start containers"
128+ echo -e " ${RED} ❌ Failed to start containers${NC} "
103129 echo " "
104130
105131 # Try to capture any logs that might be available
106132 echo " 📋 Attempting to capture logs from failed startup:"
107- echo " --------------------------------------------"
133+ echo " -------------------------------------------------------------------------------- "
108134 docker compose -f " ${COMPOSE_FILE} " logs || true
109- echo " --------------------------------------------"
135+ echo " -------------------------------------------------------------------------------- "
110136 echo " "
111137
112138 # Try to clean up
@@ -117,13 +143,13 @@ else
117143 return_code=1
118144fi
119145
120- echo " ============================================"
146+ echo " "
147+ echo " ================================================================================"
121148if [ ${return_code} -eq 0 ]; then
122- echo " ✅ TEST PASSED: ${COMPOSE_FILE} "
149+ echo -e " ${GREEN} ✅ TEST PASSED: ${COMPOSE_FILE}${NC } "
123150else
124- echo " ❌ TEST FAILED: ${COMPOSE_FILE} "
151+ echo -e " ${RED} ❌ TEST FAILED: ${COMPOSE_FILE}${NC } "
125152fi
126- echo " ============================================"
127- echo " "
153+ echo " ================================================================================"
128154
129155exit ${return_code}
0 commit comments