diff --git a/.gitea/workflows/ci-reusable.yml b/.gitea/workflows/ci-reusable.yml index d25bc48..9000da1 100644 --- a/.gitea/workflows/ci-reusable.yml +++ b/.gitea/workflows/ci-reusable.yml @@ -79,10 +79,19 @@ jobs: CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: x86_64-linux-gnu-g++ CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER: x86_64-w64-mingw32-gcc + - name: Build demo app (Cross-Compile) + if: inputs.upload-artifacts && inputs.target != '' + run: cargo build --release --example demo_app --features demo-monitor --target=${{ inputs.target }} + env: + CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: x86_64-linux-gnu-g++ + CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER: x86_64-w64-mingw32-gcc + - name: Extract version and create package if: inputs.upload-artifacts shell: bash run: | + set -euo pipefail + VERSION=$(sed -n 's/^version\s*=\s*"\([^"]\+\)"/\1/p' Cargo.toml | head -n1) TARGET_ARCH="x86_64" TARGET_TRIPLE="${{ inputs.target }}" @@ -90,17 +99,29 @@ jobs: # Determine package name and library extension based on target if [[ "$TARGET_TRIPLE" == "x86_64-unknown-linux-gnu" ]]; then PKG_BASENAME="medicallib_rust-v${VERSION}-${TARGET_ARCH}-unknown-linux-gnu" + DEMO_PKG_BASENAME="medicallib_demo_app-v${VERSION}-${TARGET_ARCH}-unknown-linux-gnu" LIB_NAME="libmedicallib_rust.so" + DEMO_BINARY_NAME="demo_app" ARCHIVE_TYPE="tar.gz" elif [[ "$TARGET_TRIPLE" == "x86_64-pc-windows-gnu" ]]; then PKG_BASENAME="medicallib_rust-v${VERSION}-${TARGET_ARCH}-pc-windows-gnu" + DEMO_PKG_BASENAME="medicallib_demo_app-v${VERSION}-${TARGET_ARCH}-pc-windows-gnu" LIB_NAME="medicallib_rust.dll" + DEMO_BINARY_NAME="demo_app.exe" ARCHIVE_TYPE="zip" else echo "::error::Unsupported target for packaging: $TARGET_TRIPLE" exit 1 fi + DEMO_BINARY_SOURCE="target/${TARGET_TRIPLE}/release/examples/${DEMO_BINARY_NAME}" + + if [[ ! -f "$DEMO_BINARY_SOURCE" ]]; then + echo "::error::Demo binary not found at $DEMO_BINARY_SOURCE" + exit 1 + fi + + mkdir -p dist PKG_DIR="dist/${PKG_BASENAME}" echo "Creating package ${PKG_BASENAME}..." mkdir -p "${PKG_DIR}/include" "${PKG_DIR}/lib" @@ -109,11 +130,18 @@ jobs: cp ffi/medicallib.h "${PKG_DIR}/include/" cp "target/${TARGET_TRIPLE}/release/${LIB_NAME}" "${PKG_DIR}/lib/" + DEMO_DIR="dist/${DEMO_PKG_BASENAME}" + echo "Creating demo package ${DEMO_PKG_BASENAME}..." + mkdir -p "${DEMO_DIR}/bin" + cp "$DEMO_BINARY_SOURCE" "${DEMO_DIR}/bin/${DEMO_BINARY_NAME}" + # Create the appropriate archive if [[ "$ARCHIVE_TYPE" == "tar.gz" ]]; then tar -C dist -czf "dist/${PKG_BASENAME}.tar.gz" "${PKG_BASENAME}" + tar -C dist -czf "dist/${DEMO_PKG_BASENAME}.tar.gz" "${DEMO_PKG_BASENAME}" elif [[ "$ARCHIVE_TYPE" == "zip" ]]; then (cd dist && zip -r9 "${PKG_BASENAME}.zip" "${PKG_BASENAME}") + (cd dist && zip -r9 "${DEMO_PKG_BASENAME}.zip" "${DEMO_PKG_BASENAME}") fi - name: Upload Artifact @@ -123,4 +151,4 @@ jobs: # Create a unique name based on the target OS name: medicallib-rust-${{ contains(inputs.target, 'windows') && 'Windows' || 'Linux' }}-x86_64-${{ github.run_number }} path: dist/ - if-no-files-found: error \ No newline at end of file + if-no-files-found: error