Skip to content

Commit cfd2537

Browse files
committed
Add SAP HANA documentation validation workflow with 5 tests for commercial package
1 parent 737e4e3 commit cfd2537

File tree

2 files changed

+348
-1
lines changed

2 files changed

+348
-1
lines changed

.github/workflows/test-all-packages.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,17 @@ jobs:
4848
test-postgres:
4949
uses: ./.github/workflows/test-postgres.yml
5050

51+
# Test SAP HANA (commercial)
52+
test-sap-hana:
53+
uses: ./.github/workflows/test-sap-hana.yml
54+
5155
# Add more packages here:
5256
# test-redis:
5357
# uses: ./.github/workflows/test-redis.yml
5458

5559
# Summary job that runs after all tests
5660
summary:
57-
needs: [test-nginx, test-envoy, test-kafka, test-memcached, test-mongodb, test-mysql, test-spark, test-postgres]
61+
needs: [test-nginx, test-envoy, test-kafka, test-memcached, test-mongodb, test-mysql, test-spark, test-postgres, test-sap-hana]
5862
runs-on: ubuntu-24.04-arm
5963
if: always()
6064
steps:
Lines changed: 343 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,343 @@
1+
name: Test SAP HANA on Arm64
2+
3+
on:
4+
workflow_call:
5+
workflow_dispatch:
6+
push:
7+
branches:
8+
- main
9+
- smoke_tests
10+
paths:
11+
- 'content/commercial_packages/sap-hana.md'
12+
- '.github/workflows/test-sap-hana.yml'
13+
14+
jobs:
15+
test-sap-hana:
16+
runs-on: ubuntu-24.04-arm
17+
18+
steps:
19+
- name: Checkout repository
20+
uses: actions/checkout@v4
21+
22+
- name: Set test metadata
23+
id: metadata
24+
run: |
25+
echo "timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> $GITHUB_OUTPUT
26+
echo "package_slug=sap-hana" >> $GITHUB_OUTPUT
27+
echo "dashboard_link=/commercial_packages/sap-hana" >> $GITHUB_OUTPUT
28+
29+
# ============================================================
30+
# SAP HANA is a commercial product requiring licensing
31+
# We perform documentation and ARM compatibility validation tests
32+
# ============================================================
33+
34+
- name: Detect package metadata
35+
id: version
36+
run: |
37+
# SAP HANA version information from documentation
38+
echo "version=Cloud" >> $GITHUB_OUTPUT
39+
echo "SAP HANA Cloud (ARM64 supported since Sept 2022)"
40+
41+
# ============================================================
42+
# Run validation tests
43+
# ============================================================
44+
- name: Test 1 - Verify ARM64 architecture compatibility
45+
id: test1
46+
run: |
47+
START_TIME=$(date +%s)
48+
49+
# Verify we're running on ARM64
50+
ARCH=$(uname -m)
51+
if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
52+
echo "✓ Running on ARM64 architecture: $ARCH"
53+
uname -a
54+
echo "status=passed" >> $GITHUB_OUTPUT
55+
else
56+
echo "✗ Not running on ARM64 architecture: $ARCH"
57+
echo "status=failed" >> $GITHUB_OUTPUT
58+
exit 1
59+
fi
60+
61+
END_TIME=$(date +%s)
62+
echo "duration=$((END_TIME - START_TIME))" >> $GITHUB_OUTPUT
63+
64+
- name: Test 2 - Verify SAP HANA documentation exists
65+
id: test2
66+
run: |
67+
START_TIME=$(date +%s)
68+
69+
# Check that the SAP HANA package documentation file exists
70+
if [ -f "content/commercial_packages/sap-hana.md" ]; then
71+
echo "✓ SAP HANA documentation file exists"
72+
echo "Metadata:"
73+
grep -E "^(name|vendor|category|works_on_arm):" content/commercial_packages/sap-hana.md || true
74+
echo "status=passed" >> $GITHUB_OUTPUT
75+
else
76+
echo "✗ SAP HANA documentation file not found"
77+
echo "status=failed" >> $GITHUB_OUTPUT
78+
exit 1
79+
fi
80+
81+
END_TIME=$(date +%s)
82+
echo "duration=$((END_TIME - START_TIME))" >> $GITHUB_OUTPUT
83+
84+
- name: Test 3 - Verify ARM support metadata
85+
id: test3
86+
run: |
87+
START_TIME=$(date +%s)
88+
89+
# Check that the documentation indicates ARM support
90+
if grep -q "works_on_arm: true" content/commercial_packages/sap-hana.md; then
91+
echo "✓ SAP HANA is marked as ARM64 compatible"
92+
echo "ARM support details:"
93+
grep -A 5 "release_date_on_arm" content/commercial_packages/sap-hana.md || true
94+
echo "status=passed" >> $GITHUB_OUTPUT
95+
else
96+
echo "✗ SAP HANA ARM support not confirmed in metadata"
97+
echo "status=failed" >> $GITHUB_OUTPUT
98+
exit 1
99+
fi
100+
101+
END_TIME=$(date +%s)
102+
echo "duration=$((END_TIME - START_TIME))" >> $GITHUB_OUTPUT
103+
104+
- name: Test 4 - Validate documentation URLs are reachable
105+
id: test4
106+
run: |
107+
START_TIME=$(date +%s)
108+
109+
# Extract and validate key URLs
110+
PRODUCT_URL=$(grep "^product_url:" content/commercial_packages/sap-hana.md | cut -d' ' -f2)
111+
OFFICIAL_DOCS=$(grep "official_docs:" content/commercial_packages/sap-hana.md | cut -d' ' -f2)
112+
113+
echo "Checking product URL: $PRODUCT_URL"
114+
if curl -f -s -o /dev/null -w "%{http_code}" --max-time 10 "$PRODUCT_URL" | grep -q "^[23]"; then
115+
echo "✓ Product URL is reachable"
116+
else
117+
echo "⚠ Product URL returned non-2xx/3xx status (may require auth or redirect)"
118+
fi
119+
120+
echo "Checking official docs: $OFFICIAL_DOCS"
121+
if curl -f -s -o /dev/null -w "%{http_code}" --max-time 10 "$OFFICIAL_DOCS" | grep -q "^[23]"; then
122+
echo "✓ Official documentation URL is reachable"
123+
else
124+
echo "⚠ Official docs URL returned non-2xx/3xx status (may require auth or redirect)"
125+
fi
126+
127+
# Always pass this test as URL checks can be flaky
128+
echo "✓ Documentation URL validation completed"
129+
echo "status=passed" >> $GITHUB_OUTPUT
130+
131+
END_TIME=$(date +%s)
132+
echo "duration=$((END_TIME - START_TIME))" >> $GITHUB_OUTPUT
133+
134+
- name: Test 5 - Check SAP HANA Express Edition availability
135+
id: test5
136+
run: |
137+
START_TIME=$(date +%s)
138+
139+
# SAP HANA Express Edition is a free version for development
140+
# Check if we can access information about it
141+
echo "Checking for SAP HANA Express Edition information..."
142+
143+
# Note: SAP HANA Express Edition download requires SAP account
144+
# We just verify the concept exists in our documentation
145+
if grep -q "SAP HANA" content/commercial_packages/sap-hana.md; then
146+
echo "✓ SAP HANA documentation is properly configured"
147+
echo "Note: SAP HANA Express Edition (free dev version) exists but requires SAP account"
148+
echo "Note: Full SAP HANA Cloud supports ARM64 as of September 2022"
149+
echo "status=passed" >> $GITHUB_OUTPUT
150+
else
151+
echo "✗ SAP HANA documentation check failed"
152+
echo "status=failed" >> $GITHUB_OUTPUT
153+
exit 1
154+
fi
155+
156+
END_TIME=$(date +%s)
157+
echo "duration=$((END_TIME - START_TIME))" >> $GITHUB_OUTPUT
158+
159+
# ============================================================
160+
# Calculate summary
161+
# ============================================================
162+
- name: Calculate test summary
163+
if: always()
164+
id: summary
165+
run: |
166+
PASSED=0
167+
FAILED=0
168+
TOTAL_DURATION=0
169+
170+
# Test 1
171+
if [ "${{ steps.test1.outputs.status }}" == "passed" ]; then
172+
PASSED=$((PASSED + 1))
173+
else
174+
FAILED=$((FAILED + 1))
175+
fi
176+
TOTAL_DURATION=$((TOTAL_DURATION + ${{ steps.test1.outputs.duration || 0 }}))
177+
178+
# Test 2
179+
if [ "${{ steps.test2.outputs.status }}" == "passed" ]; then
180+
PASSED=$((PASSED + 1))
181+
else
182+
FAILED=$((FAILED + 1))
183+
fi
184+
TOTAL_DURATION=$((TOTAL_DURATION + ${{ steps.test2.outputs.duration || 0 }}))
185+
186+
# Test 3
187+
if [ "${{ steps.test3.outputs.status }}" == "passed" ]; then
188+
PASSED=$((PASSED + 1))
189+
else
190+
FAILED=$((FAILED + 1))
191+
fi
192+
TOTAL_DURATION=$((TOTAL_DURATION + ${{ steps.test3.outputs.duration || 0 }}))
193+
194+
# Test 4
195+
if [ "${{ steps.test4.outputs.status }}" == "passed" ]; then
196+
PASSED=$((PASSED + 1))
197+
else
198+
FAILED=$((FAILED + 1))
199+
fi
200+
TOTAL_DURATION=$((TOTAL_DURATION + ${{ steps.test4.outputs.duration || 0 }}))
201+
202+
# Test 5
203+
if [ "${{ steps.test5.outputs.status }}" == "passed" ]; then
204+
PASSED=$((PASSED + 1))
205+
else
206+
FAILED=$((FAILED + 1))
207+
fi
208+
TOTAL_DURATION=$((TOTAL_DURATION + ${{ steps.test5.outputs.duration || 0 }}))
209+
210+
echo "passed=$PASSED" >> $GITHUB_OUTPUT
211+
echo "failed=$FAILED" >> $GITHUB_OUTPUT
212+
echo "duration=$TOTAL_DURATION" >> $GITHUB_OUTPUT
213+
214+
if [ $FAILED -eq 0 ]; then
215+
echo "overall_status=success" >> $GITHUB_OUTPUT
216+
echo "badge_status=passing" >> $GITHUB_OUTPUT
217+
else
218+
echo "overall_status=failure" >> $GITHUB_OUTPUT
219+
echo "badge_status=failing" >> $GITHUB_OUTPUT
220+
fi
221+
222+
# ============================================================
223+
# Generate JSON with SAP HANA metadata
224+
# ============================================================
225+
- name: Generate test results JSON
226+
if: always()
227+
run: |
228+
mkdir -p test-results
229+
230+
cat > test-results/sap-hana.json << EOF
231+
{
232+
"schema_version": "1.0",
233+
"package": {
234+
"name": "SAP HANA",
235+
"version": "${{ steps.version.outputs.version }}",
236+
"language": "commercial",
237+
"category": "Database",
238+
"vendor": "SAP"
239+
},
240+
"run": {
241+
"id": "${{ github.run_id }}",
242+
"url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}",
243+
"timestamp": "${{ steps.metadata.outputs.timestamp }}",
244+
"status": "${{ steps.summary.outputs.overall_status }}",
245+
"runner": {
246+
"os": "ubuntu-24.04",
247+
"arch": "arm64"
248+
}
249+
},
250+
"tests": {
251+
"passed": ${{ steps.summary.outputs.passed }},
252+
"failed": ${{ steps.summary.outputs.failed }},
253+
"skipped": 0,
254+
"duration_seconds": ${{ steps.summary.outputs.duration }},
255+
"details": [
256+
{
257+
"name": "Verify ARM64 architecture compatibility",
258+
"status": "${{ steps.test1.outputs.status }}",
259+
"duration_seconds": ${{ steps.test1.outputs.duration || 0 }}
260+
},
261+
{
262+
"name": "Verify SAP HANA documentation exists",
263+
"status": "${{ steps.test2.outputs.status }}",
264+
"duration_seconds": ${{ steps.test2.outputs.duration || 0 }}
265+
},
266+
{
267+
"name": "Verify ARM support metadata",
268+
"status": "${{ steps.test3.outputs.status }}",
269+
"duration_seconds": ${{ steps.test3.outputs.duration || 0 }}
270+
},
271+
{
272+
"name": "Validate documentation URLs are reachable",
273+
"status": "${{ steps.test4.outputs.status }}",
274+
"duration_seconds": ${{ steps.test4.outputs.duration || 0 }}
275+
},
276+
{
277+
"name": "Check SAP HANA Express Edition availability",
278+
"status": "${{ steps.test5.outputs.status }}",
279+
"duration_seconds": ${{ steps.test5.outputs.duration || 0 }}
280+
}
281+
]
282+
},
283+
"metadata": {
284+
"dashboard_link": "${{ steps.metadata.outputs.dashboard_link }}",
285+
"badge_status": "${{ steps.summary.outputs.badge_status }}",
286+
"test_type": "documentation_validation",
287+
"note": "SAP HANA is a commercial product requiring licensing. These tests validate ARM64 compatibility documentation and metadata."
288+
}
289+
}
290+
EOF
291+
292+
echo "Generated test results:"
293+
cat test-results/sap-hana.json
294+
295+
# ============================================================
296+
# STANDARD STEPS - Commit results to repository
297+
# ============================================================
298+
299+
- name: Upload test results
300+
if: always()
301+
uses: actions/upload-artifact@v4
302+
with:
303+
name: sap-hana-test-results
304+
path: test-results/sap-hana.json
305+
retention-days: 90
306+
307+
- name: Commit test results to repository
308+
if: always() && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/smoke_tests')
309+
run: |
310+
git config --global user.name 'github-actions[bot]'
311+
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
312+
313+
mkdir -p data/test-results
314+
cp test-results/sap-hana.json data/test-results/sap-hana.json
315+
316+
git add data/test-results/sap-hana.json
317+
318+
if ! git diff --staged --quiet; then
319+
git commit -m "Update sap-hana test results [skip ci]"
320+
321+
# Retry logic for push
322+
MAX_RETRIES=5
323+
RETRY_COUNT=0
324+
325+
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
326+
if git push origin ${{ github.ref_name }}; then
327+
echo "Successfully pushed test results"
328+
break
329+
else
330+
RETRY_COUNT=$((RETRY_COUNT + 1))
331+
if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
332+
echo "Push failed, attempt $RETRY_COUNT of $MAX_RETRIES. Retrying in 5 seconds..."
333+
sleep 5
334+
git pull --rebase origin ${{ github.ref_name }}
335+
else
336+
echo "Failed to push after $MAX_RETRIES attempts"
337+
exit 1
338+
fi
339+
fi
340+
done
341+
else
342+
echo "No changes to commit"
343+
fi

0 commit comments

Comments
 (0)