From 85b7340be44723f01a4a1514a22779c803b48d77 Mon Sep 17 00:00:00 2001 From: Niko Maroulis Date: Fri, 12 Jun 2026 21:51:03 -0400 Subject: [PATCH] Build NIF 2.18 precompiled artifacts on OTP 29, release v0.8.22 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The precompile matrix built each target on OTP 27 and OTP 28, but both report NIF 2.17, so the jobs overwrote each other's artifacts and no 2.18 tarball was ever published despite mix.exs advertising it. OTP 29 is the first release to report NIF 2.18 — installing there 404'd on the missing artifact. Build the second matrix entry on OTP 29 / Elixir 1.20 instead. --- .github/workflows/precompile.yml | 10 ++++++---- CHANGELOG.md | 6 ++++++ docs/release-guide.md | 2 +- mix.exs | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/precompile.yml b/.github/workflows/precompile.yml index 85fbc2e..ea188bf 100644 --- a/.github/workflows/precompile.yml +++ b/.github/workflows/precompile.yml @@ -18,10 +18,12 @@ jobs: otp: '27.0' elixir: '1.18' backend: metal + # OTP 29 is the first release to report NIF 2.18; OTP 27/28 both + # report 2.17, so building on 28 would just overwrite the 27 artifact. - os: macos-14 target: aarch64-apple-darwin - otp: '28.0' - elixir: '1.18' + otp: '29.0' + elixir: '1.20' backend: metal - os: ubuntu-22.04 target: x86_64-linux-gnu @@ -30,8 +32,8 @@ jobs: backend: cpu - os: ubuntu-22.04 target: x86_64-linux-gnu - otp: '28.0' - elixir: '1.18' + otp: '29.0' + elixir: '1.20' backend: cpu runs-on: ${{ matrix.os }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ec7c81..34a1645 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## v0.8.22 + +### Fixed + +- **Precompiled NIF 2.18 artifacts** — `mix.exs` advertises precompiled NIFs for NIF versions 2.17 and 2.18, but the precompile workflow built each target on OTP 27 *and* OTP 28, and both of those report NIF 2.17 (2.18 only arrived with OTP 29). The two jobs therefore produced identically named `nif-2.17` tarballs that overwrote each other on upload, and no 2.18 artifact was ever published — so installing on OTP 29 (NIF 2.18) failed with a 404 when fetching the precompiled binary. The precompile matrix now builds on OTP 27 (NIF 2.17) and OTP 29 (NIF 2.18), publishing both NIF versions for each target. The llama.cpp submodule is unchanged (4c6595503, tag b9601). + ## v0.8.21 ### Changed diff --git a/docs/release-guide.md b/docs/release-guide.md index 5642fee..ff20cd7 100644 --- a/docs/release-guide.md +++ b/docs/release-guide.md @@ -96,7 +96,7 @@ git push origin vX.Y.Z ``` The tag push triggers the **precompile workflow** (`.github/workflows/precompile.yml`) which: -1. Builds precompiled NIFs for macOS (Metal) and Linux (CPU) across OTP 27 and 28 +1. Builds precompiled NIFs for macOS (Metal) and Linux (CPU) across OTP 27 (NIF 2.17) and OTP 29 (NIF 2.18) 2. Uploads `.tar.gz` artifacts to the GitHub release 3. Runs `mix elixir_make.checksum --all --ignore-unavailable` and auto-commits `checksum.exs` to master diff --git a/mix.exs b/mix.exs index f1ec42e..419951f 100644 --- a/mix.exs +++ b/mix.exs @@ -37,7 +37,7 @@ end defmodule LlamaCppEx.MixProject do use Mix.Project - @version "0.8.21" + @version "0.8.22" @source_url "https://github.com/nyo16/llama_cpp_ex" def project do