Files
r2flutter/.github/workflows/ci.yml
T
2026-10-16 00:26:09 +02:00

273 lines
8.4 KiB
YAML

name: ci
env:
R2V: 6.2.4
on:
push:
pull_request:
permissions:
contents: write
jobs:
build-linux24:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
- name: Installing radare2 ${{ env.R2V }}
uses: radareorg/github-actions@v3
with:
version: ${{ env.R2V }}
from-git: false
- name: Building r2flutter
run: make && make user-install
- name: Basic Testing
run: make test
- name: Radare Testing
run: r2r test/db/cmd
- name: Radare Extras Testing
run: r2r test/db/extras
- name: Package r2pm binary
run: make bindist
- name: Verify r2pm binary
run: |
unzip -l r2flutter-${{ env.R2V }}-linux-x86-64.zip
unzip -l r2flutter-${{ env.R2V }}-linux-x86-64.zip | grep -q 'bin/r2flutter$'
unzip -l r2flutter-${{ env.R2V }}-linux-x86-64.zip | grep -q 'plugins/core_flutter.so$'
- name: Upload r2pm binary
uses: actions/upload-artifact@v7
with:
name: bindist-linux-x86-64
path: r2flutter-*.zip
if-no-files-found: error
- name: Package Debian build
run: make -C dist/debian
- name: Verify Debian package
shell: bash
run: |
shopt -s nullglob
packages=(dist/debian/r2flutter_*_amd64.deb)
test "${#packages[@]}" -eq 1
package="${packages[0]}"
version="$(./configure -qV)"
test "$(dpkg-deb --field "${package}" Package)" = r2flutter
test "$(dpkg-deb --field "${package}" Version)" = "${version}"
test "$(dpkg-deb --field "${package}" Architecture)" = amd64
test "$(dpkg-deb --field "${package}" Depends)" = radare2
contents="$(dpkg-deb --contents "${package}")"
printf '%s\n' "${contents}"
grep -E '^-.+ root/root .+ \./usr/local/bin/r2flutter$' <<< "${contents}"
plugin=".$(r2 -H R2_LIBR_PLUGINS)/core_flutter.so"
grep -Fq "${plugin}" <<< "${contents}"
make user-uninstall
sudo dpkg --force-depends --install "${package}"
test "$(r2flutter -V)" = "r2flutter ${version}"
test "$(r2 -q -c 'r2flutter -V' --)" = "r2flutter ${version}"
- name: Upload Debian package
uses: actions/upload-artifact@v7
with:
name: r2flutter-debian-amd64
path: dist/debian/r2flutter_*_amd64.deb
if-no-files-found: error
meson-linux24:
name: Meson build on Linux
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
- name: Install build dependencies
run: sudo apt-get update -y && sudo apt-get install -y build-essential meson ninja-build
- name: Installing radare2 ${{ env.R2V }}
uses: radareorg/github-actions@v3
with:
version: ${{ env.R2V }}
from-git: false
- name: Configure Meson
run: meson setup build-meson
- name: Build with Meson
run: meson compile -C build-meson
- name: Test Meson build
run: meson test -C build-meson --print-errorlogs
build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v7
- name: Installing radare2 ${{ env.R2V }}
uses: radareorg/github-actions@v3
with:
version: ${{ env.R2V }}
from-git: false
- name: Building r2flutter
run: make && make user-install
- name: Basic Testing
run: make test
- name: Radare Testing
run: r2r test/db/cmd
- name: Radare Extras Testing
run: r2r test/db/extras
- name: Package r2pm binary
run: make bindist
- name: Verify r2pm binary
run: |
unzip -l r2flutter-${{ env.R2V }}-darwin-arm-64.zip
unzip -l r2flutter-${{ env.R2V }}-darwin-arm-64.zip | grep -q 'bin/r2flutter$'
unzip -l r2flutter-${{ env.R2V }}-darwin-arm-64.zip | grep -q 'plugins/core_flutter.dylib$'
- name: Upload r2pm binary
uses: actions/upload-artifact@v7
with:
name: bindist-darwin-arm-64
path: r2flutter-*.zip
if-no-files-found: error
build-linux-arm:
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v7
- name: Installing radare2 ${{ env.R2V }}
uses: radareorg/github-actions@v3
with:
version: ${{ env.R2V }}
from-git: false
- name: Building r2flutter
run: make && make user-install
- name: Basic Testing
run: make test
- name: Package r2pm binary
run: make bindist
- name: Upload r2pm binary
uses: actions/upload-artifact@v7
with:
name: bindist-linux-arm-64
path: r2flutter-*.zip
if-no-files-found: error
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
with:
python-version: 3.14.x
- name: Prepare MSVC toolchain
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Install build tools
shell: pwsh
run: python -m pip install meson ninja
- name: Install radare2 ${{ env.R2V }}
uses: radareorg/github-actions@v3
with:
version: ${{ env.R2V }}
from-git: false
- name: Build and package r2flutter
shell: pwsh
run: ./dist/windows/build.ps1
- name: Verify Windows package
shell: pwsh
run: |
Expand-Archive -Path r2flutter-$env:R2V-windows-x86-64.zip -DestinationPath check-zip -Force
Get-ChildItem -Recurse check-zip | Select-Object -ExpandProperty FullName
$root = 'check-zip'
if (-not (Test-Path "$root/bin/r2flutter.exe")) { throw 'missing r2flutter.exe' }
if (-not (Test-Path "$root/plugins/core_flutter.dll")) { throw 'missing core_flutter.dll' }
- name: Upload Windows package
uses: actions/upload-artifact@v7
with:
name: bindist-windows-x86-64
path: r2flutter-*.zip
if-no-files-found: error
r2-xps:
name: Build radare2 with r2flutter XPS
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install build dependencies
run: sudo apt-get update -y && sudo apt-get install -y build-essential
- name: Build radare2 from source with r2flutter
run: |
git clone --depth=1 https://github.com/radareorg/radare2.git
cd radare2
cp -f ../r2plugin/config.mk libr/xps/config.mk
git clone .. libr/xps/p/r2flutter
make -C libr/xps
./configure --prefix=/usr
make -j$(nproc)
sudo make install
- name: Test embedded r2flutter plugin
run: |
r2 -q -c 'Lc~r2flutter' -- | grep r2flutter
r2 -q -c 'r2flutter -V' -- | grep 'r2flutter '
check-release:
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
needs:
- build-linux24
- meson-linux24
- build-macos
- build-linux-arm
- build-windows
- r2-xps
runs-on: ubuntu-24.04
outputs:
is_release: ${{ steps.tag.outputs.is_release }}
steps:
- name: Check release tag
id: tag
shell: bash
run: |
if [[ "${GITHUB_REF_NAME}" =~ ^[0-9] ]]; then
echo "is_release=yes" >> "$GITHUB_OUTPUT"
else
echo "is_release=no" >> "$GITHUB_OUTPUT"
fi
release:
if: ${{ needs.check-release.outputs.is_release == 'yes' }}
needs: check-release
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Prepare release notes
shell: bash
run: |
tag="${GITHUB_REF_NAME}"
previous_tag="$(git tag --merged "${tag}^" --sort=-version:refname | awk '/^[0-9]/{print; exit}')"
{
echo "# ${tag}"
echo
if [ -n "${previous_tag}" ]; then
echo "## Changes since ${previous_tag}"
echo
git log --pretty=format:'- %s (%h)' "${previous_tag}..${tag}"
else
echo "## Changes"
echo
git log --pretty=format:'- %s (%h)' "${tag}"
fi
echo
} > RELEASE_NOTES.md
- name: Download release artifacts
uses: actions/download-artifact@v8
with:
path: release-artifacts
- name: Create GitHub release
uses: softprops/action-gh-release@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
body_path: RELEASE_NOTES.md
generate_release_notes: false
files: |
release-artifacts/r2flutter-debian-amd64/r2flutter_*_amd64.deb
release-artifacts/bindist-*/r2flutter-*.zip