Switch release assets to r2pm bindist zips (triplet naming)

- src/Makefile: bindist target producing r2ai-$(r2 -qv)-os-arch-bits.zip
  with plugins/, bin/, man/ and prompts/ (prompts dir overridable via
  R2AI_PROMPTSDIR; uname fallback for old r2pm)
- ci: split bindist job (linux x64/arm64 + macos) and windows bindist
  build (radare2 -qv for the zip name), attach zips + decai.r2.js to tag
  releases; no version pin so the action resolves the current release
This commit is contained in:
Abhi committed 2026-10-13 11:39:08 +05:30
1 parent 1586d27e93
commit 3c7ed851d8
3 files changed
+107 -31

No files matched your search

+68 -29
View File
@@ -56,39 +56,76 @@ jobs:
if ($LASTEXITCODE -ne 0) { meson configure build }
meson compile -C build
- name: Create release artifacts (tags only)
if: startsWith(github.ref, 'refs/tags/')
shell: bash
run: |
mkdir -p release
# Collect common binary artefact names produced by Make/Meson
# Include both "r2ai.*" and "libr2ai.*" variants for DLL/dylib/so on all platforms.
find src -type f \( -iname "r2ai.dll" -o -iname "libr2ai.dll" -o -iname "r2ai.dylib" -o -iname "libr2ai.dylib" -o -iname "r2ai.so" -o -iname "libr2ai.so" -o -iname "r2ai.exe" \) -exec cp -f {} release/ \; || true
# Also check top-level build output directories
find . -maxdepth 3 -type f \( -iname "r2ai.dll" -o -iname "libr2ai.dll" -o -iname "r2ai.dylib" -o -iname "libr2ai.dylib" -o -iname "r2ai.so" -o -iname "libr2ai.so" -o -iname "r2ai.exe" \) -exec cp -f {} release/ \; || true
cp -f decai/decai.r2.js release/ || true
if command -v zip >/dev/null 2>&1; then
zip -j "release/r2ai-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.build_system }}.zip" release/*
else
powershell.exe -Command "Compress-Archive -Path release/* -DestinationPath 'release/r2ai-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.build_system }}.zip'"
fi
bindist:
name: Build r2pm binary (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Upload artifacts (tags only)
if: startsWith(github.ref, 'refs/tags/')
- name: Install radare2
uses: radareorg/github-actions@v3
- name: Package r2pm binary
run: make -C src bindist
- name: Upload r2pm binary artifact
uses: actions/upload-artifact@v7
with:
name: ${{ matrix.os }}-${{ matrix.build_system }}-binary
path: release/r2ai-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.build_system }}.zip
name: bindist-${{ matrix.os }}
path: r2ai-*.zip
if-no-files-found: error
# - name: Smoke test
# run: |
# if command -v r2 >/dev/null 2>&1; then
# r2 -q -c 'r2ai -h' -- || true
# fi
windows-bindist:
name: Build r2pm binary (Windows)
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Setup Meson/Ninja
run: |
python -m pip install --upgrade pip
pip install meson ninja
- name: Install radare2
id: r2
uses: radareorg/github-actions@v3
- name: Build with Meson
shell: powershell
run: |
cd src
$prefix = "${{ steps.r2.outputs.prefix }}"
meson setup build --backend ninja --prefix="$prefix" -Dr2_prefix="$prefix"
if ($LASTEXITCODE -ne 0) { meson configure build }
meson compile -C build
- name: Package r2pm binary
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path bindist\plugins,bindist\bin,bindist\prompts | Out-Null
Get-ChildItem src\build\ -Filter "*r2ai*.dll" -ErrorAction SilentlyContinue | Copy-Item -Destination bindist\plugins
Get-ChildItem src\..\build\ -Filter "*r2ai*.dll" -ErrorAction SilentlyContinue | Copy-Item -Destination bindist\plugins
Copy-Item src\build\r2ai.exe bindist\bin
Copy-Item prompts\*.r2ai.md bindist\prompts
$rv = (& radare2 -qv).Trim()
Compress-Archive -Path bindist\* -DestinationPath "r2ai-$rv-windows-x86-64.zip" -Force
- name: Upload r2pm binary artifact
uses: actions/upload-artifact@v7
with:
name: windows-bindist
path: r2ai-*.zip
if-no-files-found: error
release:
name: Create Release
needs: build
needs: [bindist, windows-bindist]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
permissions:
@@ -105,10 +142,12 @@ jobs:
exit 0
fi
- name: Download artifacts
- name: Download r2pm binary artifacts
uses: actions/download-artifact@v8
with:
pattern: '*bindist*'
path: release-artifacts
merge-multiple: true
- name: Add decai.r2.js to release artifacts
run: cp decai/decai.r2.js release-artifacts/
@@ -117,6 +156,6 @@ jobs:
uses: softprops/action-gh-release@v3
with:
files: |
release-artifacts/**/*.zip
release-artifacts/*.zip
release-artifacts/decai.r2.js
generate_release_notes: true
generate_release_notes: true
+3
View File
@@ -12,3 +12,6 @@ venv
*.dylib
*.a
third_party
# r2pm binary packages
r2ai-*.zip
+36 -2
View File
@@ -8,6 +8,7 @@ R2BINDIR=$(shell r2pm -H R2PM_BINDIR)
R2INCDIR=$(shell r2 -NNH R2_INCDIR)/libr
R2LIBDIR=$(shell r2 -NNH R2_LIBDIR)
R2MANDIR=$(shell r2pm -H R2PM_MANDIR)
R2AI_PROMPTSDIR=$(HOME)/.config/r2ai/prompts
ifeq ($(R2MANDIR),)
R2MANDIR=$(shell r2 -NNH R2_PREFIX)/share/man
endif
@@ -70,6 +71,37 @@ all: $(OBJS) r2check
$(AR) rcs libr2ai.a $(OBJS)
$(CC) -pie -o r2ai$(DOTEXE) $(OBJS) $(CFLAGS) $(LDFLAGS) -lm main.c
# Binary package for r2pm -bi: plugins/, bin/, man/ and prompts/ for this r2 version and platform
# r2pm -H R2PM_* needs a recent r2pm; fall back to uname when missing
R2PM_OS_SH=$(shell r2pm -H R2PM_OS 2>/dev/null)
R2PM_ARCH_SH=$(shell r2pm -H R2PM_ARCH 2>/dev/null)
R2PM_BITS_SH=$(shell r2pm -H R2PM_BITS 2>/dev/null)
ifeq ($(R2PM_OS_SH),)
ifeq ($(shell uname -s),Darwin)
R2PM_OS_SH=darwin
else
R2PM_OS_SH=linux
endif
endif
ifeq ($(R2PM_ARCH_SH),)
ifeq ($(shell uname -m),x86_64)
R2PM_ARCH_SH=x86
else ifneq (,$(filter $(shell uname -m),aarch64 arm64))
R2PM_ARCH_SH=arm
else
R2PM_ARCH_SH=$(shell uname -m)
endif
endif
ifeq ($(R2PM_BITS_SH),)
R2PM_BITS_SH=$(shell getconf LONG_BIT 2>/dev/null || echo 64)
endif
BINDIST_ZIP=r2ai-$(shell r2 -qv)-$(R2PM_OS_SH)-$(R2PM_ARCH_SH)-$(R2PM_BITS_SH).zip
bindist: all
rm -rf build/bindist ../$(BINDIST_ZIP)
$(MAKE) user-install R2USRPLUGDIR=$(CURDIR)/build/bindist/plugins R2BINDIR=$(CURDIR)/build/bindist/bin R2MANDIR=$(CURDIR)/build/bindist/man R2AI_PROMPTSDIR=$(CURDIR)/build/bindist/prompts
cd build/bindist && zip -q -r $(CURDIR)/../$(BINDIST_ZIP) plugins bin man prompts
try: all
$(MAKE) user-install
$(MAKE) doc-install
@@ -87,12 +119,12 @@ user-install: user-uninstall
mkdir -p $(R2USRPLUGDIR)
mkdir -p $(R2BINDIR)
mkdir -p $(R2MANDIR)/man1
mkdir -p $(HOME)/.config/r2ai/prompts
mkdir -p $(R2AI_PROMPTSDIR)
$(MAKE) user-uninstall
cp -f r2ai$(DOTLIB) $(R2USRPLUGDIR)/r2ai$(DOTLIB)
cp -f r2ai$(DOTEXE) $(R2BINDIR)/r2ai$(DOTEXE)
cp -f r2ai.1 $(R2MANDIR)/man1/r2ai.1
cp -r ../prompts/* $(HOME)/.config/r2ai/prompts/
cp -r ../prompts/* $(R2AI_PROMPTSDIR)/
user-uninstall:
rm -f $(R2USRPLUGDIR)/r2ai$(DOTLIB)
@@ -120,3 +152,5 @@ r2check:
@r2 -NN -qcq --
clean:
rm -f *.o *.d
.PHONY: all bindist try doc-install fmt user-install user-uninstall install uninstall r2check clean test