Skip to content

Commit 8d4f347

Browse files
authored
Merge pull request #162 from tphakala/feat/embed-artifacts
feat: add embeddable CLI artifacts and manifest for GUI bundling
2 parents 1644f0d + 38f90f5 commit 8d4f347

2 files changed

Lines changed: 167 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ env:
1010
# Library versions - update these when upgrading
1111
# ONNX Runtime 1.23+ requires CUDA 12.x and cuDNN 9.x
1212
ONNXRUNTIME_VERSION: "1.23.2"
13+
# CUDA toolkit major.minor version (used in manifest for GUI compatibility checks)
14+
CUDA_TOOLKIT_VERSION: "12.9"
1315
# CUDA redistributable versions (from https://developer.download.nvidia.com/compute/cuda/redist/redistrib_12.9.0.json)
1416
CUDA_CUDART_VERSION: "12.9.37"
1517
CUDA_CUBLAS_VERSION: "12.9.0.13"
@@ -381,6 +383,22 @@ jobs:
381383
echo "Created signed tar.gz:"
382384
ls -lh birda-macos-arm64-${VERSION}-signed.tar.gz
383385
386+
- name: Create signed embeddable artifact
387+
run: |
388+
VERSION="${{ github.ref_name }}"
389+
mkdir -p embed-dist
390+
# Copy only binary and ONNX Runtime dylib (no README, LICENSE, etc.)
391+
cp unsigned/birda embed-dist/
392+
cp unsigned/libonnxruntime*.dylib embed-dist/
393+
cd embed-dist
394+
tar -czvf ../birda-macos-arm64-embed-${VERSION}.tar.gz *
395+
396+
- name: Upload signed embed artifact
397+
uses: actions/upload-artifact@v6
398+
with:
399+
name: birda-macos-arm64-embed
400+
path: birda-macos-arm64-embed-${{ github.ref_name }}.tar.gz
401+
384402
- name: Upload signed tar.gz
385403
uses: actions/upload-artifact@v6
386404
with:
@@ -601,6 +619,36 @@ jobs:
601619
# Create archive with gzip compression (include version in filename)
602620
cd dist && tar -czvf ../${{ env.ARTIFACT }}-${{ github.ref_name }}.tar.gz *
603621
622+
- name: Create CUDA libraries archive
623+
run: |
624+
mkdir -p cuda-libs-dist
625+
# Copy GPU provider libs (needed for CUDA execution)
626+
cp -P lib-staging/libonnxruntime_providers_cuda.so* cuda-libs-dist/
627+
cp -P lib-staging/libonnxruntime_providers_shared.so* cuda-libs-dist/
628+
# Copy CUDA runtime libs
629+
cp -P lib-staging/libcudart.so* cuda-libs-dist/
630+
cp -P lib-staging/libcublas.so* cuda-libs-dist/
631+
cp -P lib-staging/libcublasLt.so* cuda-libs-dist/
632+
cp -P lib-staging/libcufft.so* cuda-libs-dist/
633+
# Copy cuDNN libs
634+
cp -P lib-staging/libcudnn*.so* cuda-libs-dist/
635+
# Copy NVRTC and nvJitLink
636+
cp -P lib-staging/libnvrtc*.so* cuda-libs-dist/
637+
cp -P lib-staging/libnvJitLink*.so* cuda-libs-dist/
638+
639+
echo "=== CUDA libs archive contents ==="
640+
ls -la cuda-libs-dist/
641+
du -sh cuda-libs-dist/
642+
643+
cd cuda-libs-dist
644+
tar -czvf ../birda-cuda-libs-linux-x64-${{ github.ref_name }}.tar.gz *
645+
646+
- name: Upload CUDA libraries artifact
647+
uses: actions/upload-artifact@v6
648+
with:
649+
name: birda-cuda-libs-linux-x64
650+
path: birda-cuda-libs-linux-x64-${{ github.ref_name }}.tar.gz
651+
604652
- name: Upload artifact
605653
uses: actions/upload-artifact@v6
606654
with:
@@ -816,6 +864,36 @@ jobs:
816864
# Create archive (include version in filename, exclude vc_redist for ZIP - it's only for installer)
817865
Get-ChildItem "dist/*" -Exclude "vc_redist.x64.exe" | Compress-Archive -DestinationPath "${{ env.ARTIFACT }}-${{ github.ref_name }}.zip"
818866
867+
- name: Create CUDA libraries archive
868+
shell: pwsh
869+
run: |
870+
New-Item -ItemType Directory -Force -Path cuda-libs-dist
871+
872+
# Copy GPU provider DLLs
873+
Copy-Item "lib-staging/onnxruntime_providers_cuda.dll" -Destination "cuda-libs-dist/"
874+
Copy-Item "lib-staging/onnxruntime_providers_shared.dll" -Destination "cuda-libs-dist/"
875+
# Copy CUDA runtime DLLs
876+
Copy-Item "lib-staging/cudart64_12.dll" -Destination "cuda-libs-dist/"
877+
Copy-Item "lib-staging/cublas64_12.dll" -Destination "cuda-libs-dist/"
878+
Copy-Item "lib-staging/cublasLt64_12.dll" -Destination "cuda-libs-dist/"
879+
Copy-Item "lib-staging/cufft64_11.dll" -Destination "cuda-libs-dist/"
880+
# Copy cuDNN DLLs (excluding cudnn_adv which is unused)
881+
Get-ChildItem "lib-staging/cudnn*.dll" -Exclude "cudnn_adv64_9.dll" | Copy-Item -Destination "cuda-libs-dist/"
882+
# Copy NVRTC and nvJitLink
883+
Copy-Item "lib-staging/nvrtc64_120_0.dll" -Destination "cuda-libs-dist/"
884+
Copy-Item "lib-staging/nvJitLink_120_0.dll" -Destination "cuda-libs-dist/"
885+
886+
Write-Host "=== CUDA libs archive contents ==="
887+
Get-ChildItem cuda-libs-dist/
888+
889+
Compress-Archive -Path "cuda-libs-dist/*" -DestinationPath "birda-cuda-libs-windows-x64-${{ github.ref_name }}.zip"
890+
891+
- name: Upload CUDA libraries artifact
892+
uses: actions/upload-artifact@v6
893+
with:
894+
name: birda-cuda-libs-windows-x64
895+
path: birda-cuda-libs-windows-x64-${{ github.ref_name }}.zip
896+
819897
- name: Build installer with Inno Setup
820898
shell: pwsh
821899
run: |
@@ -885,10 +963,72 @@ jobs:
885963
echo "=== Created archives ==="
886964
ls -la artifacts/*.tar.gz artifacts/*.zip 2>/dev/null || true
887965
966+
- name: Create embed archives
967+
run: |
968+
VERSION="${{ github.ref_name }}"
969+
970+
# Linux embed: binary + ONNX Runtime only
971+
if [ -d "artifacts/birda-linux-x64" ]; then
972+
mkdir -p embed-linux
973+
cp artifacts/birda-linux-x64/birda embed-linux/
974+
cp artifacts/birda-linux-x64/libonnxruntime*.so* embed-linux/
975+
# Verify both binary and runtime lib are present
976+
ls embed-linux/birda embed-linux/libonnxruntime* > /dev/null
977+
cd embed-linux
978+
tar -czvf ../artifacts/birda-linux-x64-embed-${VERSION}.tar.gz *
979+
cd ..
980+
fi
981+
982+
# Windows embed: binary + ONNX Runtime only
983+
if [ -d "artifacts/birda-windows-x64" ]; then
984+
mkdir -p embed-windows
985+
cp artifacts/birda-windows-x64/birda.exe embed-windows/
986+
cp artifacts/birda-windows-x64/onnxruntime.dll embed-windows/
987+
# Verify both binary and runtime lib are present
988+
ls embed-windows/birda.exe embed-windows/onnxruntime.dll > /dev/null
989+
cd embed-windows
990+
zip -r ../artifacts/birda-windows-x64-embed-${VERSION}.zip *
991+
cd ..
992+
fi
993+
994+
echo "=== Embed archives ==="
995+
ls -la artifacts/*embed* 2>/dev/null || true
996+
997+
- name: Generate manifest.json
998+
run: |
999+
VERSION="${{ github.ref_name }}"
1000+
SEMVER="${VERSION#v}"
1001+
sed -e "s/\${VERSION}/$SEMVER/g" \
1002+
-e "s/\${TAG}/$VERSION/g" \
1003+
-e "s/\${ONNXRUNTIME_VERSION}/${{ env.ONNXRUNTIME_VERSION }}/g" \
1004+
-e "s/\${CUDNN_VERSION}/${{ env.CUDNN_VERSION }}/g" \
1005+
-e "s/\${CUDA_TOOLKIT_VERSION}/${{ env.CUDA_TOOLKIT_VERSION }}/g" \
1006+
manifest.template.json > artifacts/manifest.json
1007+
1008+
echo "=== Generated manifest.json ==="
1009+
cat artifacts/manifest.json
1010+
1011+
# Validate JSON
1012+
python3 -c "import json; json.load(open('artifacts/manifest.json'))"
1013+
echo "JSON validation passed"
1014+
1015+
- name: Detect pre-release tag
1016+
id: prerelease
1017+
run: |
1018+
TAG="${{ github.ref_name }}"
1019+
# Tags like v1.2.3 are stable releases; anything else (v1.2.3-rc.1, v1.2.3-embed.1, etc.) is a pre-release
1020+
if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
1021+
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
1022+
else
1023+
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
1024+
echo "Tag '$TAG' detected as pre-release"
1025+
fi
1026+
8881027
- name: Create Release
8891028
id: create_release
8901029
uses: softprops/action-gh-release@v2
8911030
with:
1031+
prerelease: ${{ steps.prerelease.outputs.is_prerelease == 'true' }}
8921032
generate_release_notes: true
8931033
body: |
8941034
## Download Options
@@ -901,6 +1041,12 @@ jobs:
9011041
| `birda-linux-x64-cuda-${{ github.ref_name }}.tar.gz` | Linux with GPU support (bundled CUDA) |
9021042
| `birda-windows-x64-cuda-${{ github.ref_name }}.zip` | Windows with GPU support (bundled CUDA) |
9031043
| `birda-windows-x64-cuda-${{ github.ref_name }}-setup.exe` | Windows GPU installer (adds to PATH) |
1044+
| `birda-linux-x64-embed-${{ github.ref_name }}.tar.gz` | Linux embeddable (CLI + ONNX Runtime CPU) |
1045+
| `birda-windows-x64-embed-${{ github.ref_name }}.zip` | Windows embeddable (CLI + ONNX Runtime CPU) |
1046+
| `birda-macos-arm64-embed-${{ github.ref_name }}.tar.gz` | macOS embeddable (Signed, CLI + ONNX Runtime CPU) |
1047+
| `birda-cuda-libs-linux-x64-${{ github.ref_name }}.tar.gz` | Linux CUDA libraries only |
1048+
| `birda-cuda-libs-windows-x64-${{ github.ref_name }}.zip` | Windows CUDA libraries only |
1049+
| `manifest.json` | Version manifest for GUI integration |
9041050
9051051
### macOS Installation
9061052
@@ -928,6 +1074,7 @@ jobs:
9281074
artifacts/**/*.tar.gz
9291075
artifacts/**/*.zip
9301076
artifacts/**/*-setup.exe
1077+
artifacts/manifest.json
9311078
9321079
- name: Scan release assets with VirusTotal
9331080
continue-on-error: true

manifest.template.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"version": "${VERSION}",
3+
"min_gui_version": "1.1.0",
4+
"assets": {
5+
"embed": {
6+
"linux-x64": "birda-linux-x64-embed-${TAG}.tar.gz",
7+
"windows-x64": "birda-windows-x64-embed-${TAG}.zip",
8+
"macos-arm64": "birda-macos-arm64-embed-${TAG}.tar.gz"
9+
},
10+
"cuda_libs": {
11+
"linux-x64": "birda-cuda-libs-linux-x64-${TAG}.tar.gz",
12+
"windows-x64": "birda-cuda-libs-windows-x64-${TAG}.zip"
13+
}
14+
},
15+
"cuda": {
16+
"onnxruntime": "${ONNXRUNTIME_VERSION}",
17+
"cuda_toolkit": "${CUDA_TOOLKIT_VERSION}",
18+
"cudnn": "${CUDNN_VERSION}"
19+
}
20+
}

0 commit comments

Comments
 (0)