Skip to content

更新 CI 配置,升级 GitHub Actions 版本并添加 abseil_dll.dll 到所需运行时列表 #5

更新 CI 配置,升级 GitHub Actions 版本并添加 abseil_dll.dll 到所需运行时列表

更新 CI 配置,升级 GitHub Actions 版本并添加 abseil_dll.dll 到所需运行时列表 #5

Workflow file for this run

name: cpp-cmake-ci
on:
push:
branches:
- master
- main
tags:
- "v*"
pull_request:
branches:
- master
- main
workflow_dispatch:
permissions:
contents: write
env:
APP_NAME: YOLOClassifier
BUILD_TYPE: Release
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: Windows / Qt 5.12.12
os: windows-2022
qt_host: windows
qt_arch: win64_msvc2017_64
vcpkg_triplet: x64-windows
artifact_name: YOLOClassifier-windows-x64
- name: Linux / Qt 5.12.12
os: ubuntu-22.04
qt_host: linux
qt_arch: gcc_64
vcpkg_triplet: x64-linux
artifact_name: YOLOClassifier-linux-x64
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install Linux system packages
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y ninja-build
- name: Setup MSVC
if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Install Qt 5.12.12
uses: jurplel/install-qt-action@v4
with:
version: 5.12.12
host: ${{ matrix.qt_host }}
target: desktop
arch: ${{ matrix.qt_arch }}
cache: true
install-deps: true
- name: Bootstrap vcpkg on Windows
if: runner.os == 'Windows'
shell: pwsh
run: |
git clone https://github.com/microsoft/vcpkg.git "$env:RUNNER_TEMP\vcpkg"
& "$env:RUNNER_TEMP\vcpkg\bootstrap-vcpkg.bat" -disableMetrics
"VCPKG_ROOT=$env:RUNNER_TEMP\vcpkg" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Bootstrap vcpkg on Linux
if: runner.os == 'Linux'
shell: bash
run: |
git clone https://github.com/microsoft/vcpkg.git "$RUNNER_TEMP/vcpkg"
"$RUNNER_TEMP/vcpkg/bootstrap-vcpkg.sh" -disableMetrics
echo "VCPKG_ROOT=$RUNNER_TEMP/vcpkg" >> "$GITHUB_ENV"
- name: Restore vcpkg cache
uses: actions/cache@v5
with:
path: |
${{ runner.temp }}/vcpkg/downloads
${{ runner.temp }}/vcpkg/packages
${{ runner.temp }}/vcpkg/installed
key: vcpkg-${{ runner.os }}-${{ matrix.vcpkg_triplet }}-${{ hashFiles('.github/workflows/cpp-cmake-ci.yml', 'CMakeLists.txt') }}
restore-keys: |
vcpkg-${{ runner.os }}-${{ matrix.vcpkg_triplet }}-
- name: Install ONNX Runtime on Windows
if: runner.os == 'Windows'
shell: pwsh
run: |
& "$env:VCPKG_ROOT\vcpkg.exe" install "onnxruntime:${{ matrix.vcpkg_triplet }}"
- name: Install ONNX Runtime on Linux
if: runner.os == 'Linux'
shell: bash
run: |
"$VCPKG_ROOT/vcpkg" install "onnxruntime:${{ matrix.vcpkg_triplet }}"
- name: Configure on Windows
if: runner.os == 'Windows'
shell: pwsh
run: |
cmake -S . -B build -G Ninja `
"-DCMAKE_BUILD_TYPE=${env:BUILD_TYPE}" `
"-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake" `
"-DVCPKG_TARGET_TRIPLET=${{ matrix.vcpkg_triplet }}" `
"-DQt5_DIR=$env:Qt5_DIR"
- name: Configure on Linux
if: runner.os == 'Linux'
shell: bash
run: |
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
-DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" \
-DVCPKG_TARGET_TRIPLET="${{ matrix.vcpkg_triplet }}" \
-DQt5_DIR="${Qt5_DIR}"
- name: Build on Windows
if: runner.os == 'Windows'
shell: pwsh
run: cmake --build build --config $env:BUILD_TYPE --parallel
- name: Build on Linux
if: runner.os == 'Linux'
shell: bash
run: cmake --build build --config "${BUILD_TYPE}" --parallel
- name: Package Windows bundle
if: runner.os == 'Windows'
shell: pwsh
env:
BUILD_DIR: ${{ github.workspace }}\build
DIST_DIR: ${{ github.workspace }}\dist
VCPKG_TRIPLET: ${{ matrix.vcpkg_triplet }}
run: .\scripts\package-windows.ps1
- name: Package Linux artifact
if: runner.os == 'Linux'
shell: bash
run: |
package_dir="dist/${{ matrix.artifact_name }}"
mkdir -p "${package_dir}"
cp "build/bin/${APP_NAME}" "${package_dir}/"
cp README.md "${package_dir}/"
if [ -f "models/cat_vs_dog/best.onnx" ]; then
mkdir -p "${package_dir}/models/cat_vs_dog"
cp "models/cat_vs_dog/best.onnx" "${package_dir}/models/cat_vs_dog/"
fi
tar -C dist -czf "dist/${{ matrix.artifact_name }}.tar.gz" "${{ matrix.artifact_name }}"
- name: Upload Windows artifact
if: runner.os == 'Windows'
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.artifact_name }}
path: dist/${{ matrix.artifact_name }}.zip
if-no-files-found: error
- name: Upload Linux artifact
if: runner.os == 'Linux'
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.artifact_name }}
path: dist/${{ matrix.artifact_name }}.tar.gz
if-no-files-found: error
- name: Publish GitHub Release
if: runner.os == 'Windows' && github.ref_type == 'tag'
uses: softprops/action-gh-release@v2
with:
files: dist/${{ matrix.artifact_name }}.zip
generate_release_notes: true