Skip to content

Commit b29ff3c

Browse files
committed
add testscripts, docker file and jenkins
1 parent de83c39 commit b29ff3c

File tree

7 files changed

+670
-0
lines changed

7 files changed

+670
-0
lines changed

Dockerfile

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
2+
FROM debian:bookworm-slim AS base
3+
4+
# Build Arguments
5+
ARG ARCH=linux-aarch64
6+
ARG SDK_VERSION=0.800.3
7+
ARG JAVA_VERSION=17
8+
ARG SCANBOT_LICENSE=""
9+
10+
# Environment Variables
11+
ENV ARCH=${ARCH} \
12+
SDK_VERSION=${SDK_VERSION} \
13+
JAVA_VERSION=${JAVA_VERSION} \
14+
VENV_PATH=/opt/venv \
15+
SDK_BASE_URL="https://github.com/doo/scanbot-sdk-example-linux/releases/download/standalone-sdk%2Fv" \
16+
SCANBOT_LICENSE=${SCANBOT_LICENSE}
17+
18+
# Install system dependencies
19+
RUN apt-get update && apt-get install -y --no-install-recommends \
20+
# Build tools
21+
build-essential \
22+
cmake \
23+
make \
24+
# Languages
25+
openjdk-${JAVA_VERSION}-jdk \
26+
python3 \
27+
python3-venv \
28+
python3-pip \
29+
# Utilities
30+
curl \
31+
git \
32+
ca-certificates \
33+
# Add Node.js repository and install
34+
&& curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
35+
&& apt-get install -y nodejs \
36+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
37+
38+
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-arm64 \
39+
PATH="/usr/lib/jvm/java-17-openjdk-arm64/bin:/opt/venv/bin:${PATH}"
40+
41+
# Verify installation and create architecture-agnostic symlink as fallback
42+
RUN set -eux; \
43+
if [ ! -d "$JAVA_HOME" ]; then \
44+
JAVA_HOME="$(dirname $(dirname $(readlink -f $(which java))))"; \
45+
fi; \
46+
ln -sf "$JAVA_HOME" /usr/local/java; \
47+
java -version; \
48+
javac -version
49+
50+
# Set up Python virtual environment
51+
RUN python3 -m venv $VENV_PATH \
52+
&& pip install --upgrade pip setuptools wheel \
53+
&& pip install opencv-python
54+
55+
# Install Python SDK
56+
RUN if [ "${ARCH}" = "linux-aarch64" ]; then \
57+
PYTHON_ARCH="linux_aarch64"; \
58+
else \
59+
PYTHON_ARCH="linux_x86_64"; \
60+
fi && \
61+
pip install "${SDK_BASE_URL}${SDK_VERSION}/scanbotsdk-${SDK_VERSION}-py3-none-${PYTHON_ARCH}.whl" && \
62+
echo "Python SDK installed successfully"
63+
64+
# Set working directory and copy source code
65+
WORKDIR /workspaces/scanbot-sdk-example-linux
66+
COPY . .
67+
68+
# Download and install all remaining SDKs in optimal locations
69+
RUN echo "Installing Node.js, Java, and C SDKs for architecture: ${ARCH}" && \
70+
# Download platform-dependent SDKs (Java and C)
71+
curl -L -O "${SDK_BASE_URL}${SDK_VERSION}/scanbotsdk-${SDK_VERSION}-${ARCH}.jar" && \
72+
curl -L -O "${SDK_BASE_URL}${SDK_VERSION}/scanbotsdk-${SDK_VERSION}-${ARCH}.tar.gz" && \
73+
# Install Node.js SDK
74+
cd examples/nodejs && \
75+
npm install "${SDK_BASE_URL}${SDK_VERSION}/nodejs-scanbotsdk-${SDK_VERSION}.tgz" && \
76+
cd /workspaces/scanbot-sdk-example-linux && \
77+
# Install Java SDK
78+
mkdir -p examples/java/build/libs && \
79+
cp "scanbotsdk-${SDK_VERSION}-${ARCH}.jar" examples/java/build/libs/scanbotsdk.jar && \
80+
# Install C SDK
81+
mkdir -p examples/c/build/scanbotsdk && \
82+
tar -xzf "scanbotsdk-${SDK_VERSION}-${ARCH}.tar.gz" -C examples/c/build/scanbotsdk --strip-components=1 && \
83+
# Clean up downloads
84+
rm -f *.tar.gz *.jar && \
85+
echo "All SDKs installed successfully"
86+
87+
# Copy test scripts
88+
COPY test-scripts/ /tests/
89+
RUN chmod +x /tests/*.sh
90+
91+
# Base verification - ensure all SDKs can be imported/built
92+
RUN echo "=== SDK Integration Verification ===" \
93+
&& python3 -c "import scanbotsdk; print('Python SDK: OK')" \
94+
&& cd examples/nodejs && npm install && node -e "console.log('Node.js SDK:', require('scanbotsdk') ? 'OK' : 'FAIL')" \
95+
&& cd /workspaces/scanbot-sdk-example-linux/examples/java && ./gradlew build --no-daemon && echo "Java SDK: OK" \
96+
&& cd /workspaces/scanbot-sdk-example-linux/examples/c && mkdir -p build && cd build && cmake -DSCANBOTSDK_VERSION=${SDK_VERSION} .. && make && echo "C SDK: OK"
97+
98+
# SDK Verification Stage
99+
FROM base AS sdk-verification
100+
RUN echo "=== Comprehensive SDK Verification ===" \
101+
&& python3 -c "import scanbotsdk; print('Python SDK: Verified')" \
102+
&& cd examples/nodejs && npm install && node -e "const sdk = require('scanbotsdk'); console.log('Node.js SDK: Verified')" \
103+
&& cd /workspaces/scanbot-sdk-example-linux/examples/java && ./gradlew check --no-daemon && echo "Java SDK: Verified" \
104+
&& cd /workspaces/scanbot-sdk-example-linux/examples/c && cd build && echo "C SDK: Verified"
105+
106+
# Python Tests Stage
107+
FROM sdk-verification AS python-tests
108+
RUN echo "=== Running Python Command Tests ===" \
109+
&& /tests/test-python.sh
110+
111+
# Java Tests Stage
112+
FROM sdk-verification AS java-tests
113+
RUN echo "=== Running Java Command Tests ===" \
114+
&& /tests/test-java.sh
115+
116+
# Node.js Tests Stage
117+
FROM sdk-verification AS nodejs-tests
118+
RUN echo "=== Running Node.js Command Tests ===" \
119+
&& /tests/test-nodejs.sh
120+
121+
# C Tests Stage
122+
FROM sdk-verification AS c-tests
123+
RUN echo "=== Running C Command Tests ===" \
124+
&& /tests/test-c.sh
125+
126+
# All Tests Stage
127+
FROM sdk-verification AS all-tests
128+
RUN echo "=== Running Complete Test Suite ===" \
129+
&& /tests/run-all-tests.sh \
130+
&& echo "Python import and commands verified" \
131+
&& echo "Java compilation and commands verified" \
132+
&& echo "Node.js compilation and commands verified" \
133+
&& echo "C compilation and commands verified"

Jenkinsfile

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
pipeline {
2+
agent { label 'venus' }
3+
4+
options {
5+
timestamps()
6+
timeout(time: 25, unit: 'MINUTES')
7+
}
8+
9+
parameters {
10+
string(
11+
name: 'SDK_VERSION',
12+
defaultValue: '0.800.3',
13+
trim: true,
14+
description: 'Specify the Scanbot SDK version to test with'
15+
)
16+
string(
17+
name: 'BRANCH',
18+
defaultValue: 'main',
19+
trim: true,
20+
description: 'Specify the branch to checkout for testing'
21+
)
22+
}
23+
24+
environment {
25+
BASE_IMAGE_NAME = "scanbot-sdk-base:${params.SDK_VERSION}"
26+
CONTAINER_WORKDIR = '/workspaces/scanbot-sdk-example-linux'
27+
}
28+
29+
stages {
30+
31+
stage('Checkout Code') {
32+
steps {
33+
checkout scm
34+
}
35+
}
36+
37+
stage('Build Base Image') {
38+
steps {
39+
script {
40+
withCredentials([string(credentialsId:'linux-sdk-license', variable: 'SCANBOT_SDK_LICENSE_KEY')]) {
41+
// Detect the architecture of the Jenkins agent
42+
def agentArch = sh(script: 'uname -m', returnStdout: true).trim()
43+
def dockerArch = ''
44+
45+
if (agentArch == 'x86_64') {
46+
dockerArch = 'linux-x86-64'
47+
} else if (agentArch == 'aarch64' || agentArch == 'arm64') {
48+
dockerArch = 'linux-aarch64'
49+
} else {
50+
error "Unsupported agent architecture: ${agentArch}"
51+
}
52+
53+
echo "Detected agent architecture: ${agentArch}. Using Docker architecture: ${dockerArch}"
54+
echo "Building base image with Scanbot SDK version: ${params.SDK_VERSION}"
55+
56+
sh """
57+
docker build \\
58+
--build-arg SDK_VERSION='${params.SDK_VERSION}' \\
59+
--build-arg ARCH='${dockerArch}' \\
60+
--build-arg SCANBOT_LICENSE='${SCANBOT_SDK_LICENSE_KEY}' \\
61+
--target sdk-verification \\
62+
-t ${env.BASE_IMAGE_NAME} \\
63+
.
64+
"""
65+
}
66+
}
67+
}
68+
}
69+
70+
stage('Run Tests in Parallel') {
71+
parallel {
72+
stage('Python Tests') {
73+
steps {
74+
echo "Running Python tests..."
75+
sh """
76+
docker run --rm \\
77+
--env CI_MODE=true \\
78+
--workdir ${env.CONTAINER_WORKDIR} \\
79+
${env.BASE_IMAGE_NAME} \\
80+
/tests/test-python.sh
81+
"""
82+
}
83+
}
84+
85+
stage('Java Tests') {
86+
steps {
87+
echo "Running Java tests..."
88+
sh """
89+
docker run --rm \\
90+
--env CI_MODE=true \\
91+
--workdir ${env.CONTAINER_WORKDIR} \\
92+
${env.BASE_IMAGE_NAME} \\
93+
/tests/test-java.sh
94+
"""
95+
}
96+
}
97+
98+
stage('Node.js Tests') {
99+
steps {
100+
echo "Running Node.js tests..."
101+
sh """
102+
docker run --rm \\
103+
--env CI_MODE=true \\
104+
--workdir ${env.CONTAINER_WORKDIR} \\
105+
${env.BASE_IMAGE_NAME} \\
106+
/tests/test-nodejs.sh
107+
"""
108+
}
109+
}
110+
111+
stage('C Tests') {
112+
steps {
113+
echo "Running C tests..."
114+
sh """
115+
docker run --rm \\
116+
--env CI_MODE=true \\
117+
--workdir ${env.CONTAINER_WORKDIR} \\
118+
${env.BASE_IMAGE_NAME} \\
119+
/tests/test-c.sh
120+
"""
121+
}
122+
}
123+
}
124+
}
125+
}
126+
127+
post {
128+
success {
129+
echo 'All platform tests PASSED!'
130+
echo 'All 4 platforms validated successfully'
131+
echo 'Code is ready for merge'
132+
}
133+
failure {
134+
echo 'Some platform tests FAILED!'
135+
echo 'Check individual stage logs above'
136+
echo 'Fix failing platforms before merge'
137+
}
138+
always {
139+
sh """
140+
echo "Cleaning up Docker resources..."
141+
docker rmi ${env.BASE_IMAGE_NAME} || true
142+
docker system prune -f --filter "until=2h" || true
143+
echo "Cleanup complete"
144+
"""
145+
146+
echo "Job finished. Cleaning up workspace."
147+
cleanWs()
148+
}
149+
}
150+
}

test-scripts/run-all-tests.sh

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/bin/bash
2+
set -e
3+
4+
echo "========================================"
5+
echo " Scanbot SDK - Full Test Suite"
6+
echo "========================================"
7+
8+
# Track test results
9+
FAILED_TESTS=""
10+
TOTAL_TESTS=0
11+
PASSED_TESTS=0
12+
13+
run_test() {
14+
local test_name="$1"
15+
local test_script="$2"
16+
17+
echo ""
18+
echo "Running $test_name tests..."
19+
TOTAL_TESTS=$((TOTAL_TESTS + 1))
20+
21+
if bash "$test_script"; then
22+
echo "PASS: $test_name tests PASSED"
23+
PASSED_TESTS=$((PASSED_TESTS + 1))
24+
else
25+
echo "$test_name tests FAILED"
26+
FAILED_TESTS="$FAILED_TESTS $test_name"
27+
fi
28+
}
29+
30+
# Run all test suites
31+
run_test "Python" "/tests/test-python.sh"
32+
run_test "Java" "/tests/test-java.sh"
33+
run_test "Node.js" "/tests/test-nodejs.sh"
34+
run_test "C" "/tests/test-c.sh"
35+
36+
# Final report
37+
echo ""
38+
echo "========================================"
39+
echo " Test Summary"
40+
echo "========================================"
41+
echo "Total test suites: $TOTAL_TESTS"
42+
echo "Passed: $PASSED_TESTS"
43+
echo "Failed: $((TOTAL_TESTS - PASSED_TESTS))"
44+
45+
if [ $PASSED_TESTS -eq $TOTAL_TESTS ]; then
46+
echo ""
47+
echo "ALL TESTS PASSED!"
48+
echo "Scanbot SDK is working correctly across all platforms."
49+
exit 0
50+
else
51+
echo ""
52+
echo "Some tests failed:"
53+
echo "$FAILED_TESTS"
54+
echo ""
55+
echo "Please check the logs above for details."
56+
exit 1
57+
fi

0 commit comments

Comments
 (0)