1- name : Build Schema Converters
1+ name : Build sub-packages
2+
3+ # Fast per-subpackage build checks — verifies Java and Node compile and
4+ # their converter registries load correctly. Full integration testing
5+ # (Flask API + Docker) is in ci.yml.
26
37on :
48 push :
5- branches : [ main, develop ]
9+ branches : [main, develop]
610 pull_request :
7- branches : [ main ]
11+ branches : [main]
812
913jobs :
1014 build-node :
15+ name : Build Node.js converter
1116 runs-on : ubuntu-latest
1217
1318 steps :
14- - uses : actions/checkout@v4
15-
16- - name : Use Node.js 18.x
17- uses : actions/setup-node@v4
18- with :
19- node-version : ' 18'
20- cache : ' npm'
21- cache-dependency-path : schema-conversion-orchestrator/external_converters/node/package-lock.json
22-
23- - name : Install Node.js dependencies
24- working-directory : schema-conversion-orchestrator/external_converters/node
25- run : npm ci
26-
27- - name : Build TypeScript
28- working-directory : schema-conversion-orchestrator/external_converters/node
29- run : npm run build
30-
31- - name : Test Node.js converter
32- working-directory : schema-conversion-orchestrator/external_converters/node
33- run : |
34- echo '{"sourceLanguage":"SHACL","targetLanguage":"JsonSchema","schema":"test schema"}' > test.json
35- node dist/index.js convert test.json
36- node dist/index.js list
37-
38- - name : Upload Node.js artifacts
39- uses : actions/upload-artifact@v4
40- with :
41- name : node-converter
42- path : |
43- schema-conversion-orchestrator/external_converters/node/*.js
44- schema-conversion-orchestrator/external_converters/node/converters/*.js
45- schema-conversion-orchestrator/external_converters/node/package.json
19+ - uses : actions/checkout@v4
20+
21+ - name : Set up Node.js 18
22+ uses : actions/setup-node@v4
23+ with :
24+ node-version : " 18"
25+ cache : npm
26+ cache-dependency-path : schema-conversion-orchestrator/external_converters/node/package-lock.json
27+
28+ - name : Install dependencies
29+ working-directory : schema-conversion-orchestrator/external_converters/node
30+ run : npm ci
31+
32+ - name : Build TypeScript
33+ working-directory : schema-conversion-orchestrator/external_converters/node
34+ run : npm run build
35+
36+ - name : Smoke-test — list converters
37+ working-directory : schema-conversion-orchestrator/external_converters/node
38+ run : node dist/index.js list
39+
40+ - name : Upload dist artifact
41+ uses : actions/upload-artifact@v4
42+ with :
43+ name : node-converter
44+ retention-days : 1
45+ path : |
46+ schema-conversion-orchestrator/external_converters/node/dist/
47+ schema-conversion-orchestrator/external_converters/node/package.json
48+ schema-conversion-orchestrator/external_converters/node/package-lock.json
4649
4750 build-java :
51+ name : Build Java converter
4852 runs-on : ubuntu-latest
4953
5054 steps :
51- - uses : actions/checkout@v4
52-
53- - name : Set up JDK 11
54- uses : actions/setup-java@v4
55- with :
56- java-version : ' 11'
57- distribution : ' temurin'
58-
59- - name : Cache Maven dependencies
60- uses : actions/cache@v4
61- with :
62- path : ~/.m2
63- key : ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
64-
65- - name : Build with Maven
66- working-directory : schema-conversion-orchestrator/external_converters/java
67- run : mvn clean compile package
68-
69- - name : Test Java converter
70- working-directory : schema-conversion-orchestrator/external_converters/java
71- run : |
72- echo '{"sourceLanguage":"Xsd","targetLanguage":"Dtd","schema":"test schema"}' > test.json
73- java -jar converter.jar convert test.json
74- java -jar converter.jar list
75-
76- - name : Upload Java artifacts
77- uses : actions/upload-artifact@v4
78- with :
79- name : java-converter
80- path : |
81- schema-conversion-orchestrator/external_converters/java/converter.jar
82-
83- test-integration :
84- needs : [build-node, build-java]
85- runs-on : ubuntu-latest
86-
87- steps :
88- - uses : actions/checkout@v4
89-
90- - name : Set up Python 3.11
91- uses : actions/setup-python@v4
92- with :
93- python-version : ' 3.11'
94-
95- - name : Set up Node.js 18.x
96- uses : actions/setup-node@v4
97- with :
98- node-version : ' 18'
99-
100- - name : Set up JDK 11
101- uses : actions/setup-java@v4
102- with :
103- java-version : ' 11'
104- distribution : ' temurin'
105-
106- - name : Download Node.js artifacts
107- uses : actions/download-artifact@v4
108- with :
109- name : node-converter
110- path : schema-conversion-orchestrator/external_converters/node/
111-
112- - name : Download Java artifacts
113- uses : actions/download-artifact@v4
114- with :
115- name : java-converter
116- path : schema-conversion-orchestrator/external_converters/java/
117-
118- - name : Install Python dependencies
119- run : |
120- python -m pip install --upgrade pip
121- pip install flask requests
122-
123- - name : Make converters executable
124- run : |
125- chmod +x schema-conversion-orchestrator/external_converters/java/converter.jar
126-
127- - name : Install Python dependencies
128- working-directory : schema-conversion-orchestrator
129- run : |
130- python -m pip install --upgrade pip
131- pip install -r requirements.txt
132-
133- - name : Test integration
134- run : |
135- # Start the Flask app in background
136- python schema-conversion-orchestrator/app.py &
137- FLASK_PID=$!
138-
139- # Wait for Flask to start
140- sleep 5
141-
142- # Test health endpoint
143- curl -f http://localhost:5002/health || exit 1
144-
145- # Test converters list
146- curl -f http://localhost:5002/converters || exit 1
147-
148- # Test conversion (if converters are available)
149- curl -f -X POST http://localhost:5002/convert \
150- -H "Content-Type: application/json" \
151- -d '{"sourceLanguage":"SHACL","targetLanguage":"JsonSchema","schema":"test schema"}' || echo "No SHACL->JsonSchema converter available"
152-
153- # Kill Flask app
154- kill $FLASK_PID
155-
156- build-docker :
157- needs : [build-node, build-java]
158- runs-on : ubuntu-latest
159-
160- steps :
161- - uses : actions/checkout@v4
162-
163- - name : Download Node.js artifacts
164- uses : actions/download-artifact@v4
165- with :
166- name : node-converter
167- path : schema-conversion-orchestrator/external_converters/node/
168-
169- - name : Download Java artifacts
170- uses : actions/download-artifact@v4
171- with :
172- name : java-converter
173- path : schema-conversion-orchestrator/external_converters/java/
174-
175- - name : Build Docker image
176- run : docker build -t schema-converter:latest schema-conversion-orchestrator/
177-
178- - name : Test Docker image
179- run : |
180- docker run --rm -d -p 5002:5002 --name test-converter schema-converter:latest
181- sleep 10
182- curl -f http://localhost:5002/health || exit 1
183- docker stop test-converter
184-
185- - name : Save Docker image
186- if : github.ref == 'refs/heads/main'
187- run : |
188- docker save schema-converter:latest | gzip > schema-converter.tar.gz
189-
190- - name : Upload Docker image artifact
191- if : github.ref == 'refs/heads/main'
192- uses : actions/upload-artifact@v4
193- with :
194- name : docker-image
195- path : schema-converter.tar.gz
55+ - uses : actions/checkout@v4
56+
57+ - name : Set up JDK 11
58+ uses : actions/setup-java@v4
59+ with :
60+ java-version : " 11"
61+ distribution : temurin
62+
63+ - name : Cache Maven repository
64+ uses : actions/cache@v4
65+ with :
66+ path : ~/.m2/repository
67+ key : ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
68+ restore-keys : ${{ runner.os }}-maven-
69+
70+ - name : Build with Maven
71+ working-directory : schema-conversion-orchestrator/external_converters/java
72+ run : mvn clean package -B -DskipTests
73+
74+ - name : Smoke-test — list converters
75+ working-directory : schema-conversion-orchestrator/external_converters/java
76+ run : java -jar converter.jar list
77+
78+ - name : Upload JAR artifact
79+ uses : actions/upload-artifact@v4
80+ with :
81+ name : java-converter
82+ retention-days : 1
83+ path : schema-conversion-orchestrator/external_converters/java/converter.jar
0 commit comments