You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
435 lines
12 KiB
435 lines
12 KiB
name: CI |
|
|
|
# Controls when the action will run. Triggers the workflow on push or pull request |
|
# events but only for the master branch |
|
on: |
|
push: |
|
branches: [ master ] |
|
pull_request: |
|
branches: [ master ] |
|
|
|
env: |
|
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) |
|
BUILD_TYPE: Release |
|
|
|
jobs: |
|
build: |
|
runs-on: ${{ matrix.os }} |
|
strategy: |
|
matrix: |
|
os: [windows-latest, ubuntu-latest, macos-latest] |
|
# don't cancel all jobs just because one of them failed |
|
fail-fast: false |
|
|
|
# Steps represent a sequence of tasks that will be executed as part of the job |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Setup Python 3 |
|
uses: actions/setup-python@v6 |
|
with: |
|
python-version: '3.x' |
|
|
|
- name: Configure |
|
run: > |
|
cmake -S . -B build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_SHARED_LIBS=ON |
|
-DZXING_BLACKBOX_TESTS=ON -DZXING_TEST_DOTNET=ON -DZXING_TEST_GO=ON -DZXING_TEST_INSTALL=ON -DZXING_UNIT_TESTS=ON |
|
-DZXING_PYTHON_MODULE=ON |
|
|
|
- name: Build |
|
run: cmake --build build --parallel --config ${{env.BUILD_TYPE}} |
|
|
|
- name: Set PATH for Tests |
|
shell: bash # to make the $GITHUB_PATH update work |
|
if: runner.os == 'Windows' |
|
run: | |
|
echo "${GITHUB_WORKSPACE}/build/core/${BUILD_TYPE}" >> $GITHUB_PATH |
|
echo "${GITHUB_WORKSPACE}/build/bin/${BUILD_TYPE}" >> $GITHUB_PATH |
|
|
|
- name: Test |
|
run: ctest --test-dir build -V -C ${{env.BUILD_TYPE}} |
|
|
|
- name: Install |
|
run: | |
|
cmake -E make_directory install |
|
cmake --install build --config ${{env.BUILD_TYPE}} --prefix ${{github.workspace}}/install |
|
|
|
- uses: actions/upload-artifact@v6 |
|
with: |
|
name: ${{matrix.os}}-artifacts |
|
path: install |
|
|
|
build-exp: |
|
runs-on: ${{ matrix.os }} |
|
strategy: |
|
matrix: |
|
os: [windows-latest, ubuntu-latest, macos-latest, ubuntu-24.04-arm, macos-15-intel, windows-11-arm] |
|
|
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Setup Python 3 |
|
id: setup-python |
|
if: matrix.os == 'windows-11-arm' # the default python on the arm runner is an x64 build |
|
uses: actions/setup-python@v6 |
|
with: |
|
python-version: '3.13' |
|
architecture: arm64 |
|
|
|
- name: Configure |
|
run: > |
|
cmake -S . -B build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_SHARED_LIBS=ON |
|
-DZXING_READERS=ON -DZXING_WRITERS=BOTH -DZXING_EXPERIMENTAL_API=ON |
|
-DZXING_BLACKBOX_TESTS=ON -DZXING_TEST_INSTALL=ON -DZXING_UNIT_TESTS=OFF -DZXING_PYTHON_MODULE=ON |
|
${{ steps.setup-python.outputs.python-path != '' && format('-DPython_EXECUTABLE={0}', steps.setup-python.outputs.python-path) || '' }} |
|
|
|
- name: Build |
|
run: cmake --build build --parallel --config ${{env.BUILD_TYPE}} |
|
|
|
- name: Set PATH for Tests |
|
shell: bash # to make the $GITHUB_PATH update work |
|
if: runner.os == 'Windows' |
|
run: | |
|
echo "${GITHUB_WORKSPACE}/build/core/${BUILD_TYPE}" >> $GITHUB_PATH |
|
echo "${GITHUB_WORKSPACE}/build/bin/${BUILD_TYPE}" >> $GITHUB_PATH |
|
|
|
- name: Test |
|
run: ctest --test-dir build -V -C ${{env.BUILD_TYPE}} |
|
|
|
- name: Install |
|
run: | |
|
cmake -E make_directory install |
|
cmake --install build --config ${{env.BUILD_TYPE}} --prefix ${{github.workspace}}/install |
|
|
|
- uses: actions/upload-artifact@v6 |
|
with: |
|
name: ${{matrix.os}}-exp-artifacts |
|
path: install |
|
|
|
build-ubuntu-gcc-12: # keep homebrew happy |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Configure |
|
run: > |
|
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo |
|
-DZXING_WRITERS=BOTH |
|
-DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_COMPILER=gcc-12 |
|
|
|
- name: Build |
|
run: cmake --build build --parallel |
|
|
|
- name: Test |
|
run: ctest -V --test-dir build |
|
|
|
build-ubuntu-asan-ubsan: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Configure |
|
run: > |
|
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DZXING_WRITERS=BOTH |
|
-DZXING_BLACKBOX_TESTS=ON -DZXING_UNIT_TESTS=ON -DZXING_PYTHON_MODULE=OFF -DZXING_C_API=OFF |
|
-DCMAKE_CXX_COMPILER=clang++ |
|
-DCMAKE_CXX_FLAGS="-march=native -fsanitize=address,undefined -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer" |
|
-DCMAKE_C_COMPILER=clang |
|
-DCMAKE_C_FLAGS="-march=native -fsanitize=address,undefined -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer" |
|
|
|
- name: Build |
|
run: cmake --build build --parallel |
|
|
|
- name: Test |
|
run: ctest -V --test-dir build |
|
|
|
build-ubuntu-tsan: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Configure |
|
run: > |
|
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DZXING_WRITERS=OFF -DZXING_EXAMPLES=OFF |
|
-DZXING_BLACKBOX_TESTS=ON -DZXING_UNIT_TESTS=OFF -DZXING_PYTHON_MODULE=OFF -DZXING_C_API=OFF |
|
-DCMAKE_CXX_COMPILER=clang++ |
|
-DCMAKE_CXX_FLAGS="-march=native -fsanitize=thread -fno-optimize-sibling-calls -fno-omit-frame-pointer -g" |
|
-DCMAKE_C_COMPILER=clang |
|
-DCMAKE_C_FLAGS="-march=native -fsanitize=thread -fno-optimize-sibling-calls -fno-omit-frame-pointer -g" |
|
|
|
- name: Build |
|
run: cmake --build build --parallel |
|
|
|
- name: Test |
|
run: ctest -V --test-dir build |
|
|
|
build-old-writers: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Configure |
|
run: > |
|
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo |
|
-DZXING_READERS=ON -DZXING_WRITERS=OLD -DZXING_PYTHON_MODULE=ON -DZXING_C_API=ON |
|
-DZXING_BLACKBOX_TESTS=ON -DZXING_TEST_INSTALL=ON -DZXING_UNIT_TESTS=ON -DZXING_PYTHON_MODULE=ON |
|
|
|
- name: Build |
|
run: cmake --build build --parallel |
|
|
|
- name: Test |
|
run: ctest -V --test-dir build |
|
|
|
build-ios: |
|
runs-on: macos-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Build the swift package |
|
run: swift build |
|
|
|
- name: Build the demo app |
|
working-directory: wrappers/ios/demo |
|
run: xcodebuild build -scheme demo -sdk "iphonesimulator" |
|
|
|
# - name: Validate the Pod |
|
# run: pod lib lint --allow-warnings |
|
|
|
build-android: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- uses: actions/setup-java@v5 |
|
with: |
|
distribution: 'temurin' |
|
java-version: '17' |
|
|
|
- name: Build the lib/app |
|
working-directory: wrappers/android |
|
run: ./gradlew assembleRelease |
|
|
|
- uses: actions/upload-artifact@v6 |
|
with: |
|
name: android-artifacts |
|
path: "wrappers/android/zxingcpp/build/outputs/aar/zxingcpp-release.aar" |
|
|
|
- name: Publish Library Snapshot |
|
if: github.repository == 'zxing-cpp/zxing-cpp' && github.event_name != 'pull_request' |
|
working-directory: wrappers/android |
|
env: |
|
ORG_GRADLE_PROJECT_publishSnapshot: true |
|
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.ORG_GRADLE_PROJECT_MAVENCENTRALUSERNAME }} |
|
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.ORG_GRADLE_PROJECT_MAVENCENTRALPASSWORD }} |
|
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY }} |
|
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.GPG_KEY_ID }} |
|
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_KEY_PASSWORD }} |
|
run: ./gradlew publishToMavenCentral --no-configuration-cache |
|
|
|
build-kn: |
|
runs-on: ubuntu-latest |
|
defaults: |
|
run: |
|
working-directory: wrappers/kn |
|
|
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Prepare Zig toolchain |
|
uses: mlugg/setup-zig@v2 |
|
with: |
|
version: 0.13.0 |
|
|
|
- name: Checkout toolchain initializer repository |
|
uses: actions/checkout@v6 |
|
with: |
|
repository: ISNing/kn-toolchain-initializer |
|
path: wrappers/kn/.kn-toolchain-initializer |
|
|
|
- name: Set up JDK |
|
uses: actions/setup-java@v5 |
|
with: |
|
java-version: 17 |
|
distribution: temurin |
|
|
|
- name: Setup Gradle |
|
uses: gradle/actions/setup-gradle@v5 |
|
|
|
- name: Validate Gradle Wrapper |
|
uses: gradle/actions/wrapper-validation@v5 |
|
|
|
- name: Initialize Kotlin/Native toolchain |
|
working-directory: wrappers/kn/.kn-toolchain-initializer |
|
run: ./gradlew build -DkotlinVersion=2.2.0 |
|
|
|
- name: Run test for linuxX64 target |
|
run: | |
|
echo -e "konan.dir=$HOME/.konan/kotlin-native-prebuilt-linux-x86_64-2.2.0" >> local.properties |
|
./gradlew linuxX64Test |
|
|
|
build-python: |
|
runs-on: ${{ matrix.os }} |
|
strategy: |
|
matrix: |
|
python-version: ['3.12'] |
|
os: [ubuntu-latest, macos-latest, windows-latest] |
|
|
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Set up Python ${{ matrix.python-version }} |
|
uses: actions/setup-python@v6 |
|
with: |
|
python-version: ${{ matrix.python-version }} |
|
|
|
- name: Install dependencies |
|
run: | |
|
python -m pip install --upgrade pip |
|
python -m pip install numpy pillow build |
|
|
|
- name: Build module |
|
working-directory: wrappers/python |
|
run: python -m pip -v install -e . |
|
|
|
- name: Test module |
|
working-directory: wrappers/python |
|
run: python -m unittest -v |
|
|
|
- name: Build wheel |
|
working-directory: wrappers/python |
|
run: python -m build --wheel |
|
|
|
- uses: actions/upload-artifact@v6 |
|
with: |
|
name: ${{matrix.os}}-python-artifacts |
|
path: wrappers/python/dist/* |
|
|
|
build-rust: |
|
runs-on: ubuntu-latest |
|
defaults: |
|
run: |
|
working-directory: wrappers/rust |
|
|
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Lint |
|
run: | |
|
cargo fmt --check |
|
cargo clippy -- -Dwarnings |
|
|
|
- name: Build |
|
run: cargo build --release --verbose --all-features --examples |
|
|
|
- name: Test |
|
run: cargo test --release --all-features |
|
|
|
- name: Package |
|
# --allow-dirty is required on the windows build (but not the ubuntu build?!) |
|
run: | |
|
cargo package --all-features |
|
cargo publish --dry-run |
|
|
|
- uses: actions/upload-artifact@v6 |
|
with: |
|
name: rust-artifacts |
|
path: wrappers/rust/target/package/*.crate |
|
|
|
build-wasm: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- uses: emscripten-core/setup-emsdk@v15 |
|
|
|
- name: Configure |
|
run: emcmake cmake -Swrappers/wasm -Bbuild |
|
|
|
- name: Build |
|
run: cmake --build build --parallel |
|
|
|
# - name: Test |
|
# run: node build/EmGlueTests.js |
|
|
|
- uses: actions/upload-artifact@v6 |
|
with: |
|
name: wasm-artifacts |
|
path: | |
|
build/zxing* |
|
build/demo* |
|
|
|
# disable WinRT build for now, as it does not compile with C++20 (see wrappers/winrt/CMakeLists.txt) |
|
# build-winrt: |
|
# runs-on: windows-latest |
|
|
|
# steps: |
|
# - uses: actions/checkout@v6 |
|
# with: |
|
# submodules: true |
|
|
|
# - name: Configure |
|
# shell: cmd # powershell messes up the arguments containing a '.' ?!? |
|
# run: > |
|
# cmake -S wrappers/winrt -B build -A ARM64 |
|
# -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -DCMAKE_BUILD_TYPE=Release |
|
# -DBUILD_WINRT_LIB=ON -DZXING_EXAMPLES=OFF -DZXING_BLACKBOX_TESTS=OFF -DZXING_C_API=OFF |
|
# -DEXTENSION_SDK_OUTPUT=dist/UAP/v0.8.0.0/ExtensionSDKs/ZXingWinRT/1.0.0.0 |
|
|
|
# - name: Build |
|
# run: cmake --build build -j8 --config Release |
|
|
|
# - uses: actions/upload-artifact@v6 |
|
# with: |
|
# name: winrt-ARM64-artifacts |
|
# path: build/dist |
|
|
|
build-tarball: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v6 |
|
with: |
|
submodules: true |
|
|
|
- name: Build |
|
run: python .github/create_release_archive.py |
|
|
|
- name: Find generated archives |
|
id: find |
|
run: | |
|
tgz=$(ls zxing-cpp-*.tar.gz 2>/dev/null | head -n1 || true) |
|
zip=$(ls zxing-cpp-*.zip 2>/dev/null | head -n1 || true) |
|
echo "tgz=$tgz" >> $GITHUB_OUTPUT |
|
echo "zip=$zip" >> $GITHUB_OUTPUT |
|
|
|
- name: Upload source_artifacts |
|
uses: actions/upload-artifact@v6 |
|
with: |
|
name: source_artifacts |
|
path: | |
|
${{ steps.find.outputs.tgz }} |
|
${{ steps.find.outputs.zip }}
|
|
|