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/nim-codex rev-parse HEAD > vendor/nim-codex/.codex-commit - name: Cache libcodex build id: cache-libcodex uses: actions/cache@v4 with: path: vendor/nim-codex/build key: ${{ runner.os }}-${{ matrix.target.cpu }}-libcodex-${{ hashFiles('vendor/nim-codex/.codex-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 libcodex (Linux) if: matrix.target.lib_ext == 'so' && steps.cache-libcodex.outputs.cache-hit != 'true' run: | make update make libcodex - name: Build libcodex (MacOS) if: matrix.target.os == 'macos-latest' && steps.cache-libcodex.outputs.cache-hit != 'true' run: | make update CODEX_LIB_PARAMS="--passL:\"-Wl,-install_name,@rpath/libcodex.dylib\"" make libcodex - name: Build libcodex (Windows) if: matrix.target.os == 'windows-latest' && steps.cache-libcodex.outputs.cache-hit != 'true' shell: msys2 {0} run: | pacman -Sy --noconfirm make git config --global core.symlinks false make update make libcodex - 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=codex-linux-${{ matrix.target.cpu }}.zip zip -j $ZIPFILE vendor/nim-codex/build/libcodex.${{ matrix.target.lib_ext }} vendor/nim-codex/library/libcodex.h echo "ZIPFILE=$ZIPFILE" >> $GITHUB_ENV - name: Package artifacts MacOS if: matrix.target.os == 'macos-latest' run: | ZIPFILE=codex-macos-${{ matrix.target.cpu }}.zip zip -j $ZIPFILE vendor/nim-codex/build/libcodex.${{ matrix.target.lib_ext }} vendor/nim-codex/library/libcodex.h echo "ZIPFILE=$ZIPFILE" >> $GITHUB_ENV - name: Package artifacts (Windows) if: matrix.target.os == 'windows-latest' shell: msys2 {0} run: | ZIPFILE=codex-windows-${{ matrix.target.cpu }}.zip (cd vendor/nim-codex/build && 7z a -tzip "${GITHUB_WORKSPACE}/${ZIPFILE}" libcodex.dll) (cd vendor/nim-codex/library && 7z a -tzip "${GITHUB_WORKSPACE}/${ZIPFILE}" libcodex.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