From 728845b5f4440912fb9653bfb560b0d98b2cdab7 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 18 Dec 2025 12:15:17 +0100 Subject: [PATCH] Add artifacts upload for c binding --- .github/workflows/artifacts.yml | 139 ++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 .github/workflows/artifacts.yml diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml new file mode 100644 index 00000000..eee865bd --- /dev/null +++ b/.github/workflows/artifacts.yml @@ -0,0 +1,139 @@ +name: Artifacts + +on: + push: + tags: + - "v*" + workflow_dispatch: + +jobs: + build: + runs-on: ${{ matrix.target.os }} + strategy: + matrix: + target: + - os: ubuntu-latest + cpu: amd64 + lib_ext: so + + - os: ubuntu-24.04-arm + cpu: arm64 + lib_ext: so + + - os: macos-latest + lib_ext: dylib + cpu: arm64 + + - os: windows-latest + cpu: amd64 + lib_ext: dll + + steps: + - name: Check out sources + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Install Rust 1.85.0 + if: matrix.target.os != 'windows-latest' + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.85.0 + + - name: Record submodule commit + run: git -C vendor/logos-storage-nim rev-parse HEAD > vendor/logos-storage-nim/.storage-commit + + - name: Cache libstorage build + id: cache-libstorage + uses: actions/cache@v4 + with: + path: vendor/logos-storage-nim/build + key: ${{ runner.os }}-${{ matrix.target.cpu }}-libstorage-${{ hashFiles('vendor/logos-storage-nim/.storage-commit') }} + + - name: MSYS2 (Windows amd64) + if: matrix.target.os == 'windows-latest' && matrix.target.cpu == 'amd64' + uses: msys2/setup-msys2@v2 + with: + path-type: inherit + msystem: UCRT64 + install: >- + base-devel + git + mingw-w64-ucrt-x86_64-toolchain + mingw-w64-ucrt-x86_64-cmake + mingw-w64-ucrt-x86_64-ntldd-git + mingw-w64-ucrt-x86_64-rust + + - name: Build libstorage (Linux) + if: matrix.target.lib_ext == 'so' && steps.cache-libstorage.outputs.cache-hit != 'true' + run: | + make update + make libstorage + + - name: Build libstorage (MacOS) + if: matrix.target.os == 'macos-latest' && steps.cache-libstorage.outputs.cache-hit != 'true' + run: | + make update + STORAGE_LIB_PARAMS="--passL:\"-Wl,-install_name,@rpath/libstorage.dylib\"" make libstorage + + - name: Build libstorage (Windows) + if: matrix.target.os == 'windows-latest' && steps.cache-libstorage.outputs.cache-hit != 'true' + shell: msys2 {0} + run: | + pacman -Sy --noconfirm make + git config --global core.symlinks false + make update + make libstorage + + - name: Package artifacts Linux + if: matrix.target.os == 'ubuntu-latest' || matrix.target.os == 'ubuntu-24.04-arm' + run: | + sudo apt-get update && sudo apt-get install -y zip + ZIPFILE=storage-linux-${{ matrix.target.cpu }}.zip + zip -j $ZIPFILE vendor/logos-storage-nim/build/libstorage.${{ matrix.target.lib_ext }} vendor/logos-storage-nim/library/libstorage.h + echo "ZIPFILE=$ZIPFILE" >> $GITHUB_ENV + + - name: Package artifacts MacOS + if: matrix.target.os == 'macos-latest' + run: | + ZIPFILE=storage-macos-${{ matrix.target.cpu }}.zip + zip -j $ZIPFILE vendor/logos-storage-nim/build/libstorage.${{ matrix.target.lib_ext }} vendor/logos-storage-nim/library/libstorage.h + echo "ZIPFILE=$ZIPFILE" >> $GITHUB_ENV + + - name: Package artifacts (Windows) + if: matrix.target.os == 'windows-latest' + shell: msys2 {0} + run: | + ZIPFILE=storage-windows-${{ matrix.target.cpu }}.zip + (cd vendor/logos-storage-nim/build && 7z a -tzip "${GITHUB_WORKSPACE}/${ZIPFILE}" libstorage.dll) + (cd vendor/logos-storage-nim/library && 7z a -tzip "${GITHUB_WORKSPACE}/${ZIPFILE}" libstorage.h) + echo "ZIPFILE=$ZIPFILE" >> $GITHUB_ENV + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ZIPFILE }} + path: ${{ env.ZIPFILE }} + if-no-files-found: error + + publish-release: + needs: build + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') + steps: + - name: Check out sources + uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v5 + with: + path: dist + - name: Create release + uses: softprops/action-gh-release@v2 + with: + files: dist/** + draft: true \ No newline at end of file