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
0 commit comments