3939 key : ${{ runner.os }}-buildx-${{ github.sha }}
4040 restore-keys : |
4141 ${{ runner.os }}-buildx-
42- java-version : 1.8
4342 - name : Setup Gradle
4443 uses : gradle/actions/setup-gradle@v3
4544 - name : Build with Gradle
@@ -50,6 +49,193 @@ jobs:
5049 run : |
5150 export GITHUB_REPO_URL="https://github.com/${{ github.repository }}"
5251 ./scripts/build-push-images.sh
52+ - name : Smoke test Docker image
53+ env :
54+ GITHUB_REPO_OWNER : ${{ github.repository_owner }}
55+ run : |
56+ # Calculate image tag using same logic as build script
57+ VERSION_NUMBER="$(cat version.txt | tr -d '[:space:]')"
58+ VERSION_DATE="$(date -u +%Y%m%d)"
59+ RELEASE_VERSION="${VERSION_NUMBER}-${VERSION_DATE}-ubi"
60+ IMAGE_TAG="ghcr.io/${GITHUB_REPO_OWNER}/cass-config-builder/cass-config-builder:${RELEASE_VERSION}"
61+
62+ echo "Testing image: $IMAGE_TAG"
63+
64+ # Create temporary directory for config output
65+ TEST_DIR=$(mktemp -d)
66+ echo "Test directory: $TEST_DIR"
67+
68+ # Set proper permissions for the UBI image (runs as cassandra user)
69+ # The UBI image runs as user cassandra:root, so we need to make the directory writable
70+ chmod 777 "$TEST_DIR"
71+
72+ # Run the container with the specified environment variables
73+ docker run --rm \
74+ -v "$TEST_DIR:/config" \
75+ -e POD_IP="10.244.1.5" \
76+ -e HOST_IP="192.168.1.100" \
77+ -e USE_HOST_IP_FOR_BROADCAST="false" \
78+ -e RACK_NAME="default" \
79+ -e PRODUCT_VERSION="4.0.17" \
80+ -e PRODUCT_NAME="cassandra" \
81+ -e CONFIG_FILE_DATA='{"cassandra-env-sh":{"additional-jvm-opts":["-Dcassandra.allow_alter_rf_during_range_movement=true","-Dcassandra.system_distributed_replication=dc1:3","-Dfoo=true","-Dbar"]},"cassandra-yaml":{"authenticator":"TestAuthenticator","authorizer":"TestAuthorizer","commitlog_directory":"/var/lib/cassandra/commitlog2","data_file_directories":["/var/lib/cassandra/data","/var/lib/extra/data"],"num_tokens":16,"role_manager":"CassandraRoleManager"},"cluster-info":{"name":"Weird Cluster Name","seeds":"weirdclustername-seed-service,weirdclustername-dc1-additional-seed-service"},"datacenter-info":{"graph-enabled":0,"name":"dc1","solr-enabled":0,"spark-enabled":0},"jvm-server-options":{"agent_lib_jdwp":false,"always_pre_touch":false,"cassandra_available_processors":2,"cassandra_disable_auth_caches_remote_configuration":false,"cassandra_force_default_indexing_page_size":false,"cassandra_ring_delay_ms":100,"cassandra_write_survey":false,"enable_assertions":false,"flight_recorder":false,"heap_dump_on_out_of_memory_error":false,"initial_heap_size":536870912,"java_net_prefer_ipv4_stack":true,"jmx-connection-type":"local-no-auth","jmx-port":7199,"jmx-remote-ssl":false,"jmx-remote-ssl-opts":"abc","max_heap_size":536870912,"per_thread_stack_size":262144,"perf_disable_shared_mem":false,"resize_tlb":false,"string_table_size":1048576,"unlock_commercial_features":false,"use-biased-locking":false,"use_thread_priorities":false,"use_tlb":false},"jvm11-server-options":{"conc_gc_threads":2,"g1r_set_updating_pause_time_percent":5,"garbage_collector":"G1GC","initiating_heap_occupancy_percent":75,"max_gc_pause_millis":500,"parallel_gc_threads":2}}' \
82+ "$IMAGE_TAG"
83+
84+ echo "Container execution completed. Checking output..."
85+
86+ # Check if /config directory was created and contains files
87+ if [ ! -d "$TEST_DIR" ]; then
88+ echo "ERROR: Config directory was not created"
89+ exit 1
90+ fi
91+
92+ # List generated files
93+ echo "Generated files:"
94+ ls -la "$TEST_DIR/"
95+
96+ # Debug: Show what files were actually generated
97+ echo "Files in test directory:"
98+ find "$TEST_DIR" -type f -exec basename {} \;
99+
100+ # Check if cassandra.yaml exists
101+ if [ ! -f "$TEST_DIR/cassandra.yaml" ]; then
102+ echo "ERROR: cassandra.yaml was not generated"
103+ exit 1
104+ fi
105+
106+ # Verify key configuration values in cassandra.yaml
107+ echo "Checking cassandra.yaml contents..."
108+
109+ # Check for authenticator setting
110+ if ! grep -q "authenticator: TestAuthenticator" "$TEST_DIR/cassandra.yaml"; then
111+ echo "ERROR: authenticator not set correctly"
112+ cat "$TEST_DIR/cassandra.yaml"
113+ exit 1
114+ fi
115+
116+ # Check for authorizer setting
117+ if ! grep -q "authorizer: TestAuthorizer" "$TEST_DIR/cassandra.yaml"; then
118+ echo "ERROR: authorizer not set correctly"
119+ cat "$TEST_DIR/cassandra.yaml"
120+ exit 1
121+ fi
122+
123+ # Check for num_tokens setting
124+ if ! grep -q "num_tokens: 16" "$TEST_DIR/cassandra.yaml"; then
125+ echo "ERROR: num_tokens not set correctly"
126+ cat "$TEST_DIR/cassandra.yaml"
127+ exit 1
128+ fi
129+
130+ # Check for data directories
131+ if ! grep -q "/var/lib/cassandra/data" "$TEST_DIR/cassandra.yaml"; then
132+ echo "ERROR: data directories not set correctly"
133+ cat "$TEST_DIR/cassandra.yaml"
134+ exit 1
135+ fi
136+
137+ # Check for commitlog directory
138+ if ! grep -q "commitlog_directory: /var/lib/cassandra/commitlog2" "$TEST_DIR/cassandra.yaml"; then
139+ echo "ERROR: commitlog directory not set correctly"
140+ cat "$TEST_DIR/cassandra.yaml"
141+ exit 1
142+ fi
143+
144+ echo "✅ cassandra.yaml checks passed!"
145+
146+ # Check if cassandra-env.sh exists
147+ if [ ! -f "$TEST_DIR/cassandra-env.sh" ]; then
148+ echo "ERROR: cassandra-env.sh was not generated"
149+ exit 1
150+ fi
151+
152+ # Verify cassandra-env.sh contents
153+ echo "Checking cassandra-env.sh contents..."
154+
155+ # Check for additional JVM options that were specified in CONFIG_FILE_DATA
156+ if ! grep -q "\-Dcassandra.allow_alter_rf_during_range_movement=true" "$TEST_DIR/cassandra-env.sh"; then
157+ echo "ERROR: JVM option -Dcassandra.allow_alter_rf_during_range_movement=true not found in cassandra-env.sh"
158+ cat "$TEST_DIR/cassandra-env.sh"
159+ exit 1
160+ fi
161+
162+ if ! grep -q "\-Dcassandra.system_distributed_replication=dc1:3" "$TEST_DIR/cassandra-env.sh"; then
163+ echo "ERROR: JVM option -Dcassandra.system_distributed_replication=dc1:3 not found in cassandra-env.sh"
164+ cat "$TEST_DIR/cassandra-env.sh"
165+ exit 1
166+ fi
167+
168+ if ! grep -q "\-Dfoo=true" "$TEST_DIR/cassandra-env.sh"; then
169+ echo "ERROR: JVM option -Dfoo=true not found in cassandra-env.sh"
170+ cat "$TEST_DIR/cassandra-env.sh"
171+ exit 1
172+ fi
173+
174+ if ! grep -q "\-Dbar" "$TEST_DIR/cassandra-env.sh"; then
175+ echo "ERROR: JVM option -Dbar not found in cassandra-env.sh"
176+ cat "$TEST_DIR/cassandra-env.sh"
177+ exit 1
178+ fi
179+
180+ echo "✅ cassandra-env.sh checks passed!"
181+
182+ # Check if jvm11-server.options exists
183+ if [ ! -f "$TEST_DIR/jvm11-server.options" ]; then
184+ echo "ERROR: jvm11-server.options was not generated"
185+ exit 1
186+ fi
187+
188+ # Verify jvm11-server.options contents
189+ echo "Checking jvm11-server.options contents..."
190+
191+ # Check for G1GC garbage collector
192+ if ! grep -q "\-XX:+UseG1GC" "$TEST_DIR/jvm11-server.options"; then
193+ echo "ERROR: G1GC garbage collector not configured in jvm11-server.options"
194+ cat "$TEST_DIR/jvm-server.options"
195+ exit 1
196+ fi
197+
198+ # Check for concurrent GC threads setting
199+ if ! grep -q "\-XX:ConcGCThreads=2" "$TEST_DIR/jvm11-server.options"; then
200+ echo "ERROR: ConcGCThreads=2 not found in jvm11-server.options"
201+ cat "$TEST_DIR/jvm11-server.options"
202+ exit 1
203+ fi
204+
205+ # Check for parallel GC threads setting
206+ if ! grep -q "\-XX:ParallelGCThreads=2" "$TEST_DIR/jvm11-server.options"; then
207+ echo "ERROR: ParallelGCThreads=2 not found in jvm11-server.options"
208+ cat "$TEST_DIR/jvm11-server.options"
209+ exit 1
210+ fi
211+
212+ # Check for G1 heap occupancy percent
213+ #if ! grep -q "\-XX:G1HeapRegionSize" "$TEST_DIR/jvm11-server.options" || ! grep -q "\-XX:InitiatingHeapOccupancyPercent=75" "$TEST_DIR/jvm11-server.options"; then
214+ # echo "ERROR: G1 heap occupancy settings not configured correctly in jvm11-server.options"
215+ # cat "$TEST_DIR/jvm11-server.options"
216+ # exit 1
217+ #fi
218+
219+ # Check for max GC pause time
220+ if ! grep -q "\-XX:MaxGCPauseMillis=500" "$TEST_DIR/jvm11-server.options"; then
221+ echo "ERROR: MaxGCPauseMillis=500 not found in jvm11-server.options"
222+ cat "$TEST_DIR/jvm11-server.options"
223+ exit 1
224+ fi
225+
226+ # Check for G1 R Set updating pause time percent
227+ if ! grep -q "\-XX:G1RSetUpdatingPauseTimePercent=5" "$TEST_DIR/jvm11-server.options"; then
228+ echo "ERROR: G1RSetUpdatingPauseTimePercent=5 not found in jvm11-server.options"
229+ cat "$TEST_DIR/jvm11-server.options"
230+ exit 1
231+ fi
232+
233+ echo "✅ jvm11-server.options checks passed!"
234+
235+ echo "✅ All smoke tests passed! Configuration generation verified successfully."
236+
237+ # Clean up
238+ rm -rf "$TEST_DIR"
53239 - name : Archive build logs
54240 if : ${{ failure() }}
55241 uses : actions/upload-artifact@v4
0 commit comments