77: " ${CN1SS_RENDER_CLASS:= RenderScreenshotReport} "
88: " ${CN1SS_POST_COMMENT_CLASS:= PostPrComment} "
99
10+ CN1SS_INITIALIZED=0
11+ CN1SS_JAVA_BIN=" "
12+ CN1SS_JAVAC_BIN=" "
13+ CN1SS_SOURCE_PATH=" "
14+ CN1SS_CACHE_ROOT=" "
15+ CN1SS_CLASS_DIR=" "
16+ CN1SS_STAMP_FILE=" "
17+ CN1SS_JAVA_CLASSPATH=" "
18+
19+ if ! declare -p CN1SS_JAVA_OPTS > /dev/null 2>&1 ; then
20+ declare -a CN1SS_JAVA_OPTS=()
21+ fi
22+ if [ " ${# CN1SS_JAVA_OPTS[@]} " -eq 0 ]; then
23+ CN1SS_JAVA_OPTS+=(-Djava.awt.headless=true)
24+ fi
25+
1026cn1ss_setup () {
1127 CN1SS_JAVA_BIN=" $1 "
1228 CN1SS_SOURCE_PATH=" $2 "
29+ local cache_override=" ${3:- } " tmp_root
30+
31+ if [ -z " $CN1SS_JAVA_BIN " ] || [ ! -x " $CN1SS_JAVA_BIN " ]; then
32+ cn1ss_log " CN1SS setup failed: java binary not executable ($CN1SS_JAVA_BIN )"
33+ return 1
34+ fi
35+ if [ -z " $CN1SS_SOURCE_PATH " ] || [ ! -d " $CN1SS_SOURCE_PATH " ]; then
36+ cn1ss_log " CN1SS setup failed: source directory missing ($CN1SS_SOURCE_PATH )"
37+ return 1
38+ fi
39+
40+ if [ -z " $CN1SS_JAVAC_BIN " ]; then
41+ local java_dir
42+ java_dir=" $( dirname " $CN1SS_JAVA_BIN " ) "
43+ if [ -x " $java_dir /javac" ]; then
44+ CN1SS_JAVAC_BIN=" $java_dir /javac"
45+ elif command -v javac > /dev/null 2>&1 ; then
46+ CN1SS_JAVAC_BIN=" $( command -v javac) "
47+ else
48+ cn1ss_log " CN1SS setup failed: unable to locate javac"
49+ return 1
50+ fi
51+ fi
52+
53+ tmp_root=" ${TMPDIR:-/ tmp} "
54+ tmp_root=" ${tmp_root%/ } "
55+ CN1SS_CACHE_ROOT=" ${cache_override:- ${CN1SS_CACHE_DIR:- $tmp_root / cn1ss-java-cache} } "
56+ CN1SS_CLASS_DIR=" $CN1SS_CACHE_ROOT /classes"
57+ CN1SS_STAMP_FILE=" $CN1SS_CACHE_ROOT /.stamp"
58+
59+ if [ " $CN1SS_INITIALIZED " -eq 1 ] && [ -n " $CN1SS_JAVA_CLASSPATH " ] && [ -d " $CN1SS_JAVA_CLASSPATH " ]; then
60+ return 0
61+ fi
62+
63+ local need_compile=1
64+ if [ -d " $CN1SS_CLASS_DIR " ] && [ -f " $CN1SS_STAMP_FILE " ]; then
65+ if ! find " $CN1SS_SOURCE_PATH " -type f -name ' *.java' -newer " $CN1SS_STAMP_FILE " -print -quit | grep -q . ; then
66+ need_compile=0
67+ fi
68+ fi
69+
70+ if [ " $need_compile " -eq 1 ]; then
71+ mkdir -p " $CN1SS_CACHE_ROOT "
72+ rm -rf " $CN1SS_CLASS_DIR "
73+ mkdir -p " $CN1SS_CLASS_DIR "
74+ local -a sources=()
75+ while IFS= read -r -d ' ' src; do
76+ sources+=(" $src " )
77+ done < <( find " $CN1SS_SOURCE_PATH " -type f -name ' *.java' -print0)
78+ if [ " ${# sources[@]} " -eq 0 ]; then
79+ cn1ss_log " CN1SS setup failed: no Java sources found under $CN1SS_SOURCE_PATH "
80+ return 1
81+ fi
82+ cn1ss_log " Compiling CN1SS helpers -> $CN1SS_CLASS_DIR "
83+ if ! " $CN1SS_JAVAC_BIN " -d " $CN1SS_CLASS_DIR " " ${sources[@]} " ; then
84+ cn1ss_log " CN1SS setup failed: javac returned non-zero status"
85+ return 1
86+ fi
87+ touch " $CN1SS_STAMP_FILE " 2> /dev/null || true
88+ else
89+ cn1ss_log " Reusing CN1SS helpers in $CN1SS_CLASS_DIR "
90+ fi
91+
92+ CN1SS_JAVA_CLASSPATH=" $CN1SS_CLASS_DIR "
93+ CN1SS_INITIALIZED=1
1394}
1495
1596cn1ss_log () {
1697 echo " [cn1ss] $* "
1798}
1899
19- cn1ss_java_source () {
100+ cn1ss_java_run () {
20101 local class_name=" $1 " ; shift
21- local source_file=" ${CN1SS_SOURCE_PATH%/ } /$class_name .java"
22102 if [ -z " ${CN1SS_JAVA_BIN:- } " ] || [ ! -x " $CN1SS_JAVA_BIN " ]; then
23103 cn1ss_log " CN1SS_JAVA_BIN is not configured"
24104 return 1
25105 fi
26- if [ ! -f " $source_file " ]; then
27- cn1ss_log " Missing CN1SS helper source: $source_file "
106+ if [ -z " ${CN1SS_JAVA_CLASSPATH :- } " ] || [ ! -d " $CN1SS_JAVA_CLASSPATH " ]; then
107+ cn1ss_log " CN1SS Java helpers not initialized; call cn1ss_setup first "
28108 return 1
29109 fi
30- " $CN1SS_JAVA_BIN " " $source_file " " $@ "
110+ " $CN1SS_JAVA_BIN " " ${CN1SS_JAVA_OPTS[@]} " -cp " $CN1SS_JAVA_CLASSPATH " " $class_name " " $@ "
31111}
32112
33113cn1ss_count_chunks () {
@@ -45,7 +125,7 @@ cn1ss_count_chunks() {
45125 if [ -n " $channel " ]; then
46126 args+=(" --channel" " $channel " )
47127 fi
48- cn1ss_java_source " $CN1SS_MAIN_CLASS " " ${args[@]} " 2> /dev/null || echo 0
128+ cn1ss_java_run " $CN1SS_MAIN_CLASS " " ${args[@]} " 2> /dev/null || echo 0
49129}
50130
51131cn1ss_extract_base64 () {
@@ -62,7 +142,7 @@ cn1ss_extract_base64() {
62142 if [ -n " $channel " ]; then
63143 args+=(" --channel" " $channel " )
64144 fi
65- cn1ss_java_source " $CN1SS_MAIN_CLASS " " ${args[@]} "
145+ cn1ss_java_run " $CN1SS_MAIN_CLASS " " ${args[@]} "
66146}
67147
68148cn1ss_decode_binary () {
@@ -79,15 +159,15 @@ cn1ss_decode_binary() {
79159 if [ -n " $channel " ]; then
80160 args+=(" --channel" " $channel " )
81161 fi
82- cn1ss_java_source " $CN1SS_MAIN_CLASS " " ${args[@]} "
162+ cn1ss_java_run " $CN1SS_MAIN_CLASS " " ${args[@]} "
83163}
84164
85165cn1ss_list_tests () {
86166 local file=" $1 "
87167 if [ -z " $file " ] || [ ! -r " $file " ]; then
88168 return 1
89169 fi
90- cn1ss_java_source " $CN1SS_MAIN_CLASS " tests " $file "
170+ cn1ss_java_run " $CN1SS_MAIN_CLASS " tests " $file "
91171}
92172
93173cn1ss_verify_png () {
@@ -181,7 +261,7 @@ cn1ss_post_pr_comment() {
181261 fi
182262 body_size=$( wc -c < " $body_file " 2> /dev/null || echo 0)
183263 cn1ss_log " Attempting to post PR comment (payload bytes=${body_size} )"
184- GITHUB_TOKEN=" $comment_token " cn1ss_java_source " $CN1SS_POST_COMMENT_CLASS " \
264+ GITHUB_TOKEN=" $comment_token " cn1ss_java_run " $CN1SS_POST_COMMENT_CLASS " \
185265 --body " $body_file " \
186266 --preview-dir " $preview_dir "
187267 local rc=$?
0 commit comments