mirror of
https://github.com/frida/frida
synced 2026-08-13 06:26:05 -04:00
1934 lines
71 KiB
YAML
1934 lines
71 KiB
YAML
name: CI
|
|
|
|
on: push
|
|
|
|
env:
|
|
ANDROID_NDK_VERSION: r25b
|
|
NODE_TARGETS_DEFAULT: '16.0.0 18.0.0 20.0.0 22.0.0'
|
|
NODE_TARGETS_FREEBSD: '20.0.0'
|
|
ELECTRON_TARGETS_DEFAULT: '31.0.0'
|
|
ELECTRON_TARGETS_FREEBSD: '30.0.0'
|
|
|
|
jobs:
|
|
publish-prod:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- package-windows
|
|
- package-windows-sfx
|
|
- package-macos
|
|
- package-linux
|
|
- package-ios
|
|
- package-watchos
|
|
- package-tvos
|
|
- package-android
|
|
- package-qnx
|
|
- package-apple-universal
|
|
- assemble-ios-assets
|
|
- assemble-tvos-assets
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Grab needed submodules
|
|
run: python tools/ensure-submodules.py frida-core frida-python frida-node
|
|
- name: Install tools
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y reprepro
|
|
sudo npm install -g cloudflare-cli
|
|
- name: Download release assets
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
pattern: release-asset-*
|
|
merge-multiple: true
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for Windows/x86
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-windows-x86
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for Windows/x86_64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-windows-x86_64
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for macOS/x86_64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-macos-x86_64
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for macOS/arm64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-macos-arm64
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for Linux/x86
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-linux-x86
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for Linux/x86_64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-linux-x86_64
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for Linux/armhf
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-linux-armhf
|
|
path: build/release-assets/
|
|
- name: Download Node.js and Electron prebuilds for Linux/arm64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-node-linux-arm64
|
|
path: build/release-assets/
|
|
- name: Package iOS assets
|
|
uses: ./.github/actions/package-ios-assets
|
|
- name: Package tvOS assets
|
|
uses: ./.github/actions/package-tvos-assets
|
|
- name: Package Cirrus CI artifacts
|
|
run: .github/scripts/package-cirrus-ci-artifacts.sh ${{ github.sha }}
|
|
- name: Rename release assets
|
|
run: .github/scripts/rename-release-assets.sh
|
|
- name: Publish release to GitHub
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
name: "Frida ${{ env.FRIDA_VERSION }}"
|
|
body: "See https://frida.re/news/ for details."
|
|
files: build/release-assets/*
|
|
- name: Prepare Python packages
|
|
uses: ./.github/actions/prepare-python-packages
|
|
- name: Publish Python bindings to pypi.org
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
packages-dir: build/python-packages/
|
|
- name: Publish .deb packages
|
|
uses: ./.github/actions/publish-debs
|
|
with:
|
|
site: production
|
|
- name: Setup npm authentication
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
registry-url: "https://registry.npmjs.org"
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
- name: Publish Node.js bindings to npm
|
|
run: |
|
|
cd subprojects/frida-node
|
|
git submodule update --init --recursive
|
|
npm version $FRIDA_VERSION
|
|
mkdir prebuilds
|
|
cp ../../build/release-assets/frida-*-node-*-linux-x64.tar.gz prebuilds/
|
|
npm install
|
|
npm publish
|
|
- name: Publish frida-gadget-ios to npm
|
|
run: |
|
|
cd releng/modules/frida-gadget-ios
|
|
npm version $FRIDA_VERSION
|
|
npm publish
|
|
- name: Trigger magisk-frida CI
|
|
run: |
|
|
curl \
|
|
-X POST \
|
|
-H "Accept: application/vnd.github.v3+json" \
|
|
-H "Authorization: token ${{ secrets.MAGISK_FRIDA_TOKEN }}" \
|
|
https://api.github.com/repos/ViRb3/magisk-frida/dispatches \
|
|
-d '{"event_type":"build"}'
|
|
|
|
publish-dev:
|
|
if: github.ref == 'refs/heads/main'
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- frida-windows
|
|
- frida-macos
|
|
- frida-linux
|
|
- assemble-ios-assets
|
|
- assemble-tvos-assets
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Grab needed submodules
|
|
run: python tools/ensure-submodules.py frida-core frida-python
|
|
- name: Install tools
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y reprepro
|
|
sudo npm install -g cloudflare-cli
|
|
- name: Package iOS assets
|
|
uses: ./.github/actions/package-ios-assets
|
|
- name: Package tvOS assets
|
|
uses: ./.github/actions/package-tvos-assets
|
|
- name: Prepare Python packages
|
|
uses: ./.github/actions/prepare-python-packages
|
|
- name: Publish Python bindings to TestPyPI
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
packages-dir: build/python-packages/
|
|
repository-url: https://test.pypi.org/legacy/
|
|
- name: Publish .deb packages
|
|
uses: ./.github/actions/publish-debs
|
|
with:
|
|
site: development
|
|
|
|
assemble-ios-assets:
|
|
runs-on: macos-latest
|
|
needs: frida-ios
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Download universal frida-server for iOS/arm64(e)
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-server-ios-arm64e
|
|
path: ios-arm64e/
|
|
- name: Create universal frida-server for iOS
|
|
run: |
|
|
lipo ios-arm64e/frida-server -thin arm64 -output frida-server-arm64
|
|
lipo ios-arm64e/frida-server -thin arm64e -output frida-server-arm64e
|
|
for arch in arm64 arm64e; do
|
|
codesign -f -s "-" --preserve-metadata=entitlements frida-server-$arch
|
|
done
|
|
./releng/mkfatmacho.py \
|
|
frida-server-ios-universal \
|
|
frida-server-arm64 \
|
|
frida-server-arm64e
|
|
- name: Download universal frida-agent for iOS/arm64(e)
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-agent-ios-arm64e
|
|
path: ios-arm64e/
|
|
- name: Sign universal frida-agent for iOS/arm64(e)
|
|
run: codesign -f -s "-" ios-arm64e/frida-agent.dylib
|
|
- name: Assemble iOS assets
|
|
run: |
|
|
mkdir -p ios-assets/usr/bin ios-assets/usr/lib/frida
|
|
mv frida-server-ios-universal ios-assets/usr/bin/frida-server
|
|
mv ios-arm64e/frida-agent.dylib ios-assets/usr/lib/frida/frida-agent.dylib
|
|
- name: Upload iOS assets
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ios-assets
|
|
path: ios-assets/*
|
|
|
|
assemble-tvos-assets:
|
|
runs-on: macos-latest
|
|
needs: frida-tvos
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Download frida-server for tvOS/arm64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-server-tvos-arm64
|
|
path: tvos-arm64/
|
|
- name: Prepare frida-server for tvOS/arm64
|
|
run: codesign -f -s "-" --preserve-metadata=entitlements tvos-arm64/frida-server
|
|
- name: Download frida-agent for tvOS/arm64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-agent-tvos-arm64
|
|
path: tvos-arm64/
|
|
- name: Prepare frida-agent for tvOS/arm64
|
|
run: codesign -f -s "-" tvos-arm64/frida-agent.dylib
|
|
- name: Assemble tvOS assets
|
|
run: |
|
|
mkdir -p tvos-assets/usr/bin tvos-assets/usr/lib/frida
|
|
mv tvos-arm64/frida-server tvos-assets/usr/bin/frida-server
|
|
mv tvos-arm64/frida-agent.dylib tvos-assets/usr/lib/frida/frida-agent.dylib
|
|
- name: Upload tvOS assets
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: tvos-assets
|
|
path: tvos-assets/*
|
|
|
|
package-apple-universal:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
runs-on: macos-latest
|
|
needs: [frida-macos, frida-ios, frida-watchos, frida-tvos]
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Download frida-gadget for macOS/x86_64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-macos-x86_64
|
|
path: macos-x86_64/
|
|
- name: Download frida-gadget for macOS/arm64(e)
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-macos-arm64e
|
|
path: macos-arm64e/
|
|
- name: Create universal frida-gadget for macOS
|
|
run: |
|
|
lipo \
|
|
macos-x86_64/frida-gadget.dylib \
|
|
macos-arm64e/frida-gadget.dylib \
|
|
-create -output frida-gadget-macos-universal.dylib
|
|
install_name_tool \
|
|
-id @executable_path/../Frameworks/FridaGadget.dylib \
|
|
frida-gadget-macos-universal.dylib
|
|
codesign \
|
|
-f -s "$MACOS_CERTID" \
|
|
frida-gadget-macos-universal.dylib
|
|
- name: Compress universal frida-gadget for macOS
|
|
run: xz -T 0 frida-gadget-macos-universal.dylib
|
|
- name: Upload universal frida-gadget for macOS
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-macos-universal
|
|
path: frida-gadget-macos-universal.dylib.xz
|
|
- name: Download frida-gadget for iOS/arm64(e)
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-ios-arm64e
|
|
path: ios-arm64e/
|
|
- name: Create universal frida-gadget for iOS
|
|
run: |
|
|
mv ios-arm64e/frida-gadget.dylib frida-gadget-ios-universal.dylib
|
|
install_name_tool \
|
|
-id @executable_path/Frameworks/FridaGadget.dylib \
|
|
frida-gadget-ios-universal.dylib
|
|
codesign \
|
|
-f -s "$IOS_CERTID" \
|
|
frida-gadget-ios-universal.dylib
|
|
- name: Compress universal frida-gadget for iOS
|
|
run: |
|
|
gzip -k frida-gadget-ios-universal.dylib
|
|
xz -T 0 frida-gadget-ios-universal.dylib
|
|
- name: Upload universal frida-gadget for iOS (gz)
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-ios-universal-gz
|
|
path: frida-gadget-ios-universal.dylib.gz
|
|
- name: Upload universal frida-gadget for iOS (xz)
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-ios-universal-xz
|
|
path: frida-gadget-ios-universal.dylib.xz
|
|
- name: Download frida-gadget for iOS/x86_64-simulator
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-ios-x86_64-simulator
|
|
path: ios-x86_64-simulator/
|
|
- name: Download frida-gadget for iOS/arm64-simulator
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-ios-arm64-simulator
|
|
path: ios-arm64-simulator/
|
|
- name: Create universal frida-gadget for iOS Simulator
|
|
run: |
|
|
lipo \
|
|
ios-x86_64-simulator/frida-gadget.dylib \
|
|
ios-arm64-simulator/frida-gadget.dylib \
|
|
-create -output frida-gadget-ios-simulator-universal.dylib
|
|
install_name_tool \
|
|
-id @executable_path/Frameworks/FridaGadget.dylib \
|
|
frida-gadget-ios-simulator-universal.dylib
|
|
codesign \
|
|
-f -s "$IOS_CERTID" \
|
|
frida-gadget-ios-simulator-universal.dylib
|
|
- name: Compress universal frida-gadget for iOS Simulator
|
|
run: xz -T 0 frida-gadget-ios-simulator-universal.dylib
|
|
- name: Upload universal frida-gadget for iOS Simulator
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-ios-simulator-universal
|
|
path: frida-gadget-ios-simulator-universal.dylib.xz
|
|
- name: Download frida-gadget for watchOS/arm64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-watchos-arm64
|
|
path: watchos-arm64/
|
|
- name: Download frida-gadget for watchOS/arm64-simulator
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-watchos-arm64-simulator
|
|
path: watchos-arm64-simulator/
|
|
- name: Package frida-gadget for watchOS
|
|
run: |
|
|
for arch in arm64 arm64-simulator; do
|
|
cp watchos-$arch/frida-gadget.dylib frida-gadget-watchos-$arch.dylib
|
|
install_name_tool \
|
|
-id @executable_path/Frameworks/FridaGadget.dylib \
|
|
frida-gadget-watchos-$arch.dylib
|
|
codesign \
|
|
-f -s "$WATCHOS_CERTID" \
|
|
frida-gadget-watchos-$arch.dylib
|
|
xz -T 0 frida-gadget-watchos-$arch.dylib
|
|
done
|
|
- name: Upload frida-gadget for watchOS/arm64
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-watchos-arm64
|
|
path: frida-gadget-watchos-arm64.dylib.xz
|
|
- name: Upload frida-gadget for watchOS/arm64-simulator
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-watchos-arm64-simulator
|
|
path: frida-gadget-watchos-arm64-simulator.dylib.xz
|
|
- name: Download frida-gadget for tvOS/arm64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-tvos-arm64
|
|
path: tvos-arm64/
|
|
- name: Download frida-gadget for tvOS/arm64-simulator
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-gadget-tvos-arm64-simulator
|
|
path: tvos-arm64-simulator/
|
|
- name: Package frida-gadget for tvOS
|
|
run: |
|
|
for arch in arm64 arm64-simulator; do
|
|
cp tvos-$arch/frida-gadget.dylib frida-gadget-tvos-$arch.dylib
|
|
install_name_tool \
|
|
-id @executable_path/Frameworks/FridaGadget.dylib \
|
|
frida-gadget-tvos-$arch.dylib
|
|
codesign \
|
|
-f -s "$TVOS_CERTID" \
|
|
frida-gadget-tvos-$arch.dylib
|
|
xz -T 0 frida-gadget-tvos-$arch.dylib
|
|
done
|
|
- name: Upload frida-gadget for tvOS/arm64
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-tvos-arm64
|
|
path: frida-gadget-tvos-arm64.dylib.xz
|
|
- name: Upload frida-gadget for tvOS/arm64-simulator
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-asset-frida-gadget-tvos-arm64-simulator
|
|
path: frida-gadget-tvos-arm64-simulator.dylib.xz
|
|
- name: Download Swift bindings for macOS/x86_64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-swift-macos-x86_64
|
|
path: macos-x86_64/
|
|
- name: Download Swift bindings for macOS/arm64
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: frida-swift-macos-arm64
|
|
path: macos-arm64/
|
|
- name: Create universal Swift bindings for macOS
|
|
run: |
|
|
lipo \
|
|
macos-x86_64/Frida.framework/Frida \
|
|
macos-arm64/Frida.framework/Frida \
|
|
-create -output Frida.framework
|
|
- name: Package universal Swift bindings for macOS
|
|
run: |
|
|
tar \
|
|
-cJf frida-swift-macos-universal.tar.xz \
|
|
Frida.framework
|
|
env:
|
|
XZ_OPT: "-T 0"
|
|
- name: Upload universal Swift bindings for macOS
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: release-assets
|
|
path: frida-swift-macos-universal.tar.xz
|
|
|
|
package-windows:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-windows
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-windows-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-windows-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-windows-${{ matrix.arch }}
|
|
- name: Package frida-server
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-server-windows-${{ matrix.arch }}
|
|
- name: Package frida-portal
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-portal-windows-${{ matrix.arch }}
|
|
- name: Package frida-inject
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-inject-windows-${{ matrix.arch }}
|
|
- name: Package frida-gadget
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-gadget-windows-${{ matrix.arch }}
|
|
- name: Package .NET bindings
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-clr-windows-${{ matrix.arch }}
|
|
- name: Package QML bindings
|
|
if: matrix.arch == 'x86_64'
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-qml-windows-${{ matrix.arch }}
|
|
|
|
package-windows-sfx:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-windows
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64]
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-sfx
|
|
with:
|
|
name: frida-gum-devkit-windows-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-sfx
|
|
with:
|
|
name: frida-gumjs-devkit-windows-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-sfx
|
|
with:
|
|
name: frida-core-devkit-windows-${{ matrix.arch }}
|
|
|
|
package-macos:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-macos
|
|
strategy:
|
|
matrix:
|
|
arch: [x86_64, arm64, arm64e]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-macos-${{ matrix.arch }}
|
|
- name: Package gum-graft
|
|
if: matrix.arch != 'arm64e'
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: gum-graft-macos-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-macos-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-macos-${{ matrix.arch }}
|
|
- name: Package frida-server
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-server-macos-${{ matrix.arch }}
|
|
- name: Package frida-portal
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-portal-macos-${{ matrix.arch }}
|
|
- name: Package frida-inject
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-inject-macos-${{ matrix.arch }}
|
|
- name: Package QML bindings
|
|
if: matrix.arch == 'x86_64'
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-qml-macos-${{ matrix.arch }}
|
|
|
|
package-linux:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-linux
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64-musl, mips, mipsel, mips64, mips64el]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-linux-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-linux-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-linux-${{ matrix.arch }}
|
|
- name: Package frida-server
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-server-linux-${{ matrix.arch }}
|
|
- name: Package frida-portal
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-portal-linux-${{ matrix.arch }}
|
|
- name: Package frida-gadget
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-gadget-linux-${{ matrix.arch }}
|
|
- name: Package frida-inject
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-inject-linux-${{ matrix.arch }}
|
|
- name: Package QML bindings
|
|
if: matrix.arch == 'x86_64'
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-qml-linux-${{ matrix.arch }}
|
|
|
|
package-ios:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-ios
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64e, x86_64-simulator, arm64-simulator]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-ios-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-ios-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-ios-${{ matrix.arch }}
|
|
- name: Package frida-portal
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-portal-ios-${{ matrix.arch }}
|
|
|
|
package-watchos:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-watchos
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64-simulator]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-watchos-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-watchos-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-watchos-${{ matrix.arch }}
|
|
|
|
package-tvos:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-tvos
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64-simulator]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-tvos-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-tvos-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-tvos-${{ matrix.arch }}
|
|
|
|
package-android:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-android
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64, arm, arm64]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-android-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-android-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-android-${{ matrix.arch }}
|
|
- name: Package frida-server
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-server-android-${{ matrix.arch }}
|
|
- name: Package frida-portal
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-portal-android-${{ matrix.arch }}
|
|
- name: Package frida-gadget
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-gadget-android-${{ matrix.arch }}
|
|
- name: Package frida-inject
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-inject-android-${{ matrix.arch }}
|
|
|
|
package-qnx:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: frida-qnx
|
|
strategy:
|
|
matrix:
|
|
arch: [armeabi]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Package Gum devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gum-devkit-qnx-${{ matrix.arch }}
|
|
- name: Package GumJS devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-gumjs-devkit-qnx-${{ matrix.arch }}
|
|
- name: Package Core devkit
|
|
uses: ./.github/actions/package-artifact-files-as-tarball
|
|
with:
|
|
name: frida-core-devkit-qnx-${{ matrix.arch }}
|
|
- name: Package frida-server
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-server-qnx-${{ matrix.arch }}
|
|
- name: Package frida-portal
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-portal-qnx-${{ matrix.arch }}
|
|
- name: Package frida-gadget
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-gadget-qnx-${{ matrix.arch }}
|
|
- name: Package frida-inject
|
|
uses: ./.github/actions/package-artifact-file
|
|
with:
|
|
name: frida-inject-qnx-${{ matrix.arch }}
|
|
|
|
frida-windows:
|
|
needs: sdk-windows
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64]
|
|
fail-fast: false
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-windows-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
architecture: ${{ matrix.arch == 'x86_64' && 'x64' || matrix.arch }}
|
|
- name: Install Qt
|
|
if: ${{ contains(matrix.arch, '64') }}
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: '6.7.0'
|
|
cache: true
|
|
setup-python: false
|
|
- name: Configure
|
|
run: >-
|
|
.\configure
|
|
--prefix=$Env:FRIDA_PREFIX
|
|
--host=windows-${{ matrix.arch }}
|
|
--enable-gadget
|
|
--enable-server
|
|
--enable-portal
|
|
--enable-inject
|
|
--
|
|
"-Dfrida_qml=auto"
|
|
"-Dfrida-gum:devkits=gum,gumjs"
|
|
"-Dfrida-core:devkits=core"
|
|
- name: Compile
|
|
run: .\make
|
|
- name: Install
|
|
run: .\make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gum/
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/core/
|
|
- name: Upload frida-server
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-server-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server.exe
|
|
- name: Upload frida-portal
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-portal-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal.exe
|
|
- name: Upload frida-inject
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-inject-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject.exe
|
|
- name: Upload 32-bit frida-gadget
|
|
if: ${{ !contains(matrix.arch, '64') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/32/frida-gadget.dll
|
|
- name: Upload 64-bit frida-gadget
|
|
if: ${{ contains(matrix.arch, '64') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/64/frida-gadget.dll
|
|
- name: Package Python bindings
|
|
run: |
|
|
$Env:FRIDA_EXTENSION = "$Env:FRIDA_PREFIX\lib\site-packages\frida\_frida.pyd"
|
|
cd subprojects\frida-python
|
|
pip wheel -w "$Env:FRIDA_PREFIX\wheels" --no-deps .
|
|
- name: Upload Python bindings
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-python-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/wheels/*.whl
|
|
- name: Build Node.js bindings
|
|
run: |
|
|
$installdir = "$Env:FRIDA_PREFIX\prebuilds"
|
|
$nodeTargets = '${{ env.NODE_TARGETS_DEFAULT }}'.Split(' ')
|
|
$electronTargets = '${{ env.ELECTRON_TARGETS_DEFAULT }}'.Split(' ')
|
|
if ('${{ matrix.arch }}' -eq 'x86') {
|
|
$nodeTargets = $nodeTargets | where { [int]($_.Split('.')[0]) -le 16 }
|
|
$electronTargets = @()
|
|
}
|
|
$prebuilds = @{
|
|
node = $nodeTargets
|
|
electron = $electronTargets
|
|
}
|
|
$Env:FRIDA_DEPS = "$pwd\deps"
|
|
$Env:PKG_CONFIG_PATH = "$Env:FRIDA_PREFIX\lib\pkgconfig"
|
|
function Run() {
|
|
$program = $args[0]
|
|
$arglist = $args | Select-Object -Skip 1
|
|
& $program $arglist
|
|
$result = $LASTEXITCODE
|
|
if ($result -ne 0) {
|
|
throw "'$program $arglist' failed with exit status $result"
|
|
}
|
|
}
|
|
Run python .\tools\ensure-submodules.py frida-node
|
|
cd subprojects\frida-node
|
|
Run npm version $FRIDA_VERSION
|
|
New-Item -ItemType Directory -Path $installdir
|
|
foreach ($item in $prebuilds.GetEnumerator()) {
|
|
$runtime = $item.Key
|
|
foreach ($target in $item.Value) {
|
|
Run .\configure `
|
|
--prefix=$Env:FRIDA_PREFIX `
|
|
--host=windows-${{ matrix.arch }} `
|
|
--with-runtime=$runtime `
|
|
--with-target=$target
|
|
Run .\make prebuild
|
|
Copy-Item .\build\*.tar.gz -Destination $installdir
|
|
Remove-Item build -Recurse
|
|
}
|
|
}
|
|
- name: Upload Node.js bindings
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-node-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/prebuilds/*.tar.gz
|
|
- name: Build .NET bindings
|
|
run: >-
|
|
Remove-Item build -Recurse
|
|
&& .\configure
|
|
--prefix=$Env:FRIDA_PREFIX
|
|
--host=windows-${{ matrix.arch }}-md
|
|
--enable-frida-clr
|
|
--disable-frida-python
|
|
--disable-frida-tools
|
|
--
|
|
"-Dfrida-core:compiler_backend=disabled"
|
|
&& .\make install
|
|
- name: Upload .NET bindings
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-clr-windows-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/Frida.dll
|
|
- name: Upload QML bindings
|
|
if: ${{ contains(matrix.arch, '64') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-qml-windows-${{ matrix.arch }}
|
|
path: |
|
|
${{ env.FRIDA_PREFIX }}/lib/qml/
|
|
!*.lib
|
|
!*.pdb
|
|
|
|
frida-macos:
|
|
needs: sdk-macos
|
|
strategy:
|
|
matrix:
|
|
arch: [x86_64, arm64, arm64e]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Install Qt
|
|
if: matrix.arch != 'arm64e'
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: '6.7.0'
|
|
cache: true
|
|
setup-python: false
|
|
- name: Configure
|
|
run: >-
|
|
./configure
|
|
"--prefix=$FRIDA_PREFIX"
|
|
--host=macos-${{ matrix.arch }}
|
|
--enable-gadget
|
|
--enable-server
|
|
--enable-portal
|
|
--enable-inject
|
|
--enable-frida-python
|
|
--enable-frida-swift
|
|
--
|
|
-Dfrida_qml=${{ matrix.arch != 'arm64e' && 'enabled' || 'disabled' }}
|
|
-Dfrida-gum:graft_tool=enabled
|
|
-Dfrida-gum:devkits=gum,gumjs
|
|
-Dfrida-core:devkits=core
|
|
- name: Compile
|
|
run: make
|
|
- name: Install
|
|
run: make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gum/
|
|
- name: Upload gum-graft
|
|
if: matrix.arch != 'arm64e'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: gum-graft-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/gum-graft
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/core/
|
|
- name: Upload frida-server
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-server-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
|
|
- name: Upload frida-portal
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-portal-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
|
|
- name: Upload frida-inject
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-inject-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
|
|
- name: Upload frida-gadget
|
|
if: matrix.arch != 'arm64'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/frida-gadget.dylib
|
|
- name: Upload Swift bindings
|
|
if: matrix.arch != 'arm64e'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-swift-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/Frameworks/
|
|
- name: Package Python bindings
|
|
run: |
|
|
export FRIDA_EXTENSION=$(find "$FRIDA_PREFIX" -name _frida.abi3.so)
|
|
case ${{ matrix.arch }} in
|
|
x86_64)
|
|
platform=macosx-10.13-x86_64
|
|
;;
|
|
arm64*)
|
|
platform=macosx-11.0-arm64
|
|
;;
|
|
esac
|
|
export _PYTHON_HOST_PLATFORM=$platform
|
|
cd subprojects/frida-python
|
|
pip wheel -w "$FRIDA_PREFIX/wheels" --no-deps .
|
|
- name: Upload Python bindings
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-python-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/wheels/*.whl
|
|
- name: Build Node.js bindings
|
|
if: matrix.arch != 'arm64e'
|
|
run: |
|
|
installdir=$FRIDA_PREFIX/prebuilds
|
|
declare -A prebuilds=(
|
|
[node]="${{ env.NODE_TARGETS_DEFAULT }}"
|
|
[electron]="${{ env.ELECTRON_TARGETS_DEFAULT }}"
|
|
)
|
|
export FRIDA_DEPS=$PWD/deps
|
|
export PKG_CONFIG_PATH=$FRIDA_PREFIX/lib/pkgconfig
|
|
python tools/ensure-submodules.py frida-node
|
|
cd subprojects/frida-node
|
|
npm version $FRIDA_VERSION
|
|
mkdir "$installdir"
|
|
for runtime targets in ${(kv)prebuilds}; do
|
|
for target in ${(@s/ /)targets}; do
|
|
./configure \
|
|
"--prefix=$FRIDA_PREFIX" \
|
|
--host=macos-${{ matrix.arch }} \
|
|
--with-runtime=$runtime \
|
|
--with-target=$target
|
|
make prebuild
|
|
cp build/*.tar.gz "$installdir"
|
|
rm -rf build
|
|
done
|
|
done
|
|
shell: zsh {0}
|
|
- name: Upload Node.js bindings
|
|
if: matrix.arch != 'arm64e'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-node-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/prebuilds/*.tar.gz
|
|
- name: Upload QML bindings
|
|
if: matrix.arch != 'arm64e'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-qml-macos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/qml/
|
|
|
|
frida-linux:
|
|
needs: sdk-linux
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64-musl, mips, mipsel, mips64, mips64el]
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
container: ghcr.io/frida/x-tools-linux-${{ matrix.arch }}:latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Configure qemu-user
|
|
if: ${{ !startsWith(matrix.arch, 'x86') }}
|
|
run: echo "FRIDA_QEMU_SYSROOT=/opt/x-tools/$XTOOLS_HOST/$XTOOLS_HOST/sysroot" >> $GITHUB_ENV
|
|
- name: Prepare environment for installing Qt
|
|
if: matrix.arch == 'x86_64'
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y sudo
|
|
echo "PIP_BREAK_SYSTEM_PACKAGES=1" >> $GITHUB_ENV
|
|
- name: Install Qt
|
|
if: matrix.arch == 'x86_64'
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: '6.7.0'
|
|
cache: true
|
|
setup-python: false
|
|
- name: Configure
|
|
run: >-
|
|
./configure
|
|
"--prefix=$FRIDA_PREFIX"
|
|
--host=$XTOOLS_HOST
|
|
--enable-gadget
|
|
--enable-server
|
|
--enable-portal
|
|
--enable-inject
|
|
--enable-frida-python
|
|
--
|
|
-Dlibdir=lib
|
|
-Dfrida_qml=${{ matrix.arch == 'x86_64' && 'enabled' || 'disabled' }}
|
|
-Dfrida-gum:devkits=gum,gumjs
|
|
-Dfrida-core:devkits=core
|
|
- name: Compile
|
|
run: make
|
|
- name: Install
|
|
run: make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gum/
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/core/
|
|
- name: Upload frida-server
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-server-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
|
|
- name: Upload frida-portal
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-portal-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
|
|
- name: Upload frida-inject
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-inject-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
|
|
- name: Upload 32-bit frida-gadget
|
|
if: ${{ !contains(matrix.arch, '64') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/32/frida-gadget.so
|
|
- name: Upload 64-bit frida-gadget
|
|
if: ${{ contains(matrix.arch, '64') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/64/frida-gadget.so
|
|
- name: Package Python bindings
|
|
run: |
|
|
export FRIDA_EXTENSION=$(find "$FRIDA_PREFIX" -name _frida.abi3.so)
|
|
case ${{ matrix.arch }} in
|
|
*-musl)
|
|
py_oses=(musllinux_1_1)
|
|
;;
|
|
x86*)
|
|
py_oses=(manylinux_2_5 manylinux1)
|
|
;;
|
|
arm*|ppc*|s390x)
|
|
py_oses=(manylinux_2_17 manylinux2014)
|
|
;;
|
|
*)
|
|
py_oses=(manylinux_2_5)
|
|
;;
|
|
esac
|
|
frida_arch=$(echo "${{ matrix.arch }}" | cut -f1 -d"-")
|
|
case $frida_arch in
|
|
x86)
|
|
py_arch=i686
|
|
;;
|
|
armhf)
|
|
py_arch=armv7l
|
|
;;
|
|
arm64)
|
|
py_arch=aarch64
|
|
;;
|
|
*)
|
|
py_arch=$frida_arch
|
|
;;
|
|
esac
|
|
cd subprojects/frida-python
|
|
export _PYTHON_HOST_PLATFORM=linux-$py_arch
|
|
for py_os in "${py_oses[@]}"; do
|
|
echo "plat_name = ${py_os}_${py_arch}" >> setup.cfg
|
|
pip wheel -w "$FRIDA_PREFIX/wheels" --no-deps .
|
|
git checkout setup.cfg
|
|
done
|
|
shell: bash
|
|
- name: Upload Python bindings
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-python-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/wheels/*.whl
|
|
- name: Build Node.js bindings
|
|
if: ${{ !(startsWith(matrix.arch, 'mips') || endsWith(matrix.arch, '-musl') || matrix.arch == 'armbe8' || matrix.arch == 'arm64be') }}
|
|
run: |
|
|
installdir=$FRIDA_PREFIX/prebuilds
|
|
declare -A prebuilds=(
|
|
[node]="${{ env.NODE_TARGETS_DEFAULT }}"
|
|
[electron]="${{ contains(matrix.arch, '64') && env.ELECTRON_TARGETS_DEFAULT || '' }}"
|
|
)
|
|
export FRIDA_DEPS=$PWD/deps
|
|
export PKG_CONFIG_PATH=$FRIDA_PREFIX/lib/pkgconfig
|
|
python tools/ensure-submodules.py frida-node
|
|
cd subprojects/frida-node
|
|
npm version $FRIDA_VERSION
|
|
mkdir "$installdir"
|
|
for runtime in "${!prebuilds[@]}"; do
|
|
targets=${prebuilds[$runtime]}
|
|
for target in $targets; do
|
|
./configure \
|
|
"--prefix=$FRIDA_PREFIX" \
|
|
--host=$XTOOLS_HOST \
|
|
--with-runtime=$runtime \
|
|
--with-target=$target
|
|
make prebuild
|
|
cp build/*.tar.gz "$installdir"
|
|
rm -rf build
|
|
done
|
|
done
|
|
shell: bash
|
|
- name: Upload Node.js bindings
|
|
if: ${{ !(startsWith(matrix.arch, 'mips') || endsWith(matrix.arch, '-musl') || matrix.arch == 'armbe8' || matrix.arch == 'arm64be') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-node-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/prebuilds/*.tar.gz
|
|
- name: Upload QML bindings
|
|
if: matrix.arch == 'x86_64'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-qml-linux-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/qml/
|
|
|
|
frida-ios:
|
|
needs: [sdk-macos, sdk-ios]
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64e, x86_64-simulator, arm64-simulator]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
env:
|
|
XCODE11: /Applications/Xcode_11.7.app
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Configure
|
|
run: >-
|
|
./configure
|
|
--prefix=/usr
|
|
--host=ios-${{ matrix.arch }}
|
|
--enable-portal
|
|
--
|
|
-Dfrida-gum:devkits=gum,gumjs
|
|
-Dfrida-core:assets=installed
|
|
-Dfrida-core:devkits=core
|
|
- name: Compile
|
|
run: make
|
|
- name: Install
|
|
run: DESTDIR="$FRIDA_PREFIX" make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/devkits/gum/
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/devkits/core/
|
|
- name: Upload frida-server
|
|
if: ${{ matrix.arch != 'arm64' && !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-server-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-server
|
|
- name: Upload frida-portal
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-portal-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-portal
|
|
- name: Upload frida-inject
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-inject-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-inject
|
|
- name: Upload frida-helper
|
|
if: ${{ matrix.arch != 'arm64' && !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-helper-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/frida-helper
|
|
- name: Upload frida-agent
|
|
if: ${{ matrix.arch != 'arm64' && !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-agent-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/frida-agent.dylib
|
|
- name: Upload frida-gadget
|
|
if: matrix.arch != 'arm64'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-ios-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/frida-gadget.dylib
|
|
|
|
frida-watchos:
|
|
needs: [sdk-macos, sdk-watchos]
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64-simulator]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Configure
|
|
run: >-
|
|
./configure
|
|
"--prefix=$FRIDA_PREFIX"
|
|
--host=watchos-${{ matrix.arch }}
|
|
--
|
|
-Dfrida-gum:devkits=gum,gumjs
|
|
-Dfrida-core:devkits=core
|
|
- name: Compile
|
|
run: make
|
|
- name: Install
|
|
run: make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-watchos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gum/
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-watchos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-watchos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/core/
|
|
- name: Upload frida-gadget
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-watchos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/frida-gadget.dylib
|
|
|
|
frida-tvos:
|
|
needs: [sdk-macos, sdk-tvos]
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64-simulator]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Configure
|
|
run: >-
|
|
./configure
|
|
--prefix=/usr
|
|
--host=tvos-${{ matrix.arch }}
|
|
--enable-portal
|
|
--
|
|
-Dfrida-gum:devkits=gum,gumjs
|
|
-Dfrida-core:assets=installed
|
|
-Dfrida-core:devkits=core
|
|
- name: Compile
|
|
run: make
|
|
- name: Install
|
|
run: DESTDIR="$FRIDA_PREFIX" make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/devkits/gum/
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/devkits/core/
|
|
- name: Upload frida-server
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-server-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-server
|
|
- name: Upload frida-portal
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-portal-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-portal
|
|
- name: Upload frida-inject
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-inject-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-inject
|
|
- name: Upload frida-helper
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-helper-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/frida-helper
|
|
- name: Upload frida-agent
|
|
if: ${{ !endsWith(matrix.arch, '-simulator') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-agent-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/frida-agent.dylib
|
|
- name: Upload frida-gadget
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-tvos-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida/frida-gadget.dylib
|
|
|
|
frida-android:
|
|
needs: [sdk-linux, sdk-android-32, sdk-android-64]
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64, arm, arm64]
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Set up NDK
|
|
id: setup-ndk
|
|
uses: nttld/setup-ndk@v1
|
|
with:
|
|
ndk-version: ${{ env.ANDROID_NDK_VERSION }}
|
|
add-to-path: false
|
|
- name: Add ANDROID_NDK_ROOT to environment
|
|
run: echo "ANDROID_NDK_ROOT=${{ steps.setup-ndk.outputs.ndk-path }}" >> $GITHUB_ENV
|
|
- name: Configure
|
|
run: >-
|
|
./configure
|
|
"--prefix=$FRIDA_PREFIX"
|
|
--host=android-${{ matrix.arch }}
|
|
--enable-portal
|
|
--
|
|
-Dfrida-gum:devkits=gum,gumjs
|
|
-Dfrida-core:devkits=core
|
|
- name: Compile
|
|
run: make
|
|
- name: Install
|
|
run: make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gum/
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/core/
|
|
- name: Upload frida-server
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-server-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
|
|
- name: Upload frida-portal
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-portal-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
|
|
- name: Upload frida-inject
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-inject-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
|
|
- name: Upload 32-bit frida-gadget
|
|
if: ${{ !contains(matrix.arch, '64') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/32/frida-gadget.so
|
|
- name: Upload 64-bit frida-gadget
|
|
if: ${{ contains(matrix.arch, '64') }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-android-${{ matrix.arch }}
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/64/frida-gadget.so
|
|
|
|
frida-qnx:
|
|
runs-on: ubuntu-latest
|
|
needs: sdk-linux
|
|
container: ghcr.io/frida/qnx-tools:latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Add CFLAGS to environment
|
|
run: echo "CFLAGS=\"--sysroot=$QNX_TARGET/armle-v7\"" >> $GITHUB_ENV
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk arm-unknown-nto-qnx6.5.0eabi
|
|
- name: Configure
|
|
run: >-
|
|
./configure
|
|
"--prefix=$FRIDA_PREFIX"
|
|
--host=arm-unknown-nto-qnx6.5.0eabi
|
|
--enable-portal
|
|
--
|
|
-Dfrida-gum:devkits=gum,gumjs
|
|
-Dfrida-core:devkits=core
|
|
- name: Compile
|
|
run: make
|
|
- name: Install
|
|
run: make install
|
|
- name: Upload Gum devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gum-devkit-qnx-armeabi
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gum/
|
|
- name: Upload GumJS devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gumjs-devkit-qnx-armeabi
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/gumjs/
|
|
- name: Upload Core devkit
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-core-devkit-qnx-armeabi
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/devkits/core/
|
|
- name: Upload frida-server
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-server-qnx-armeabi
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
|
|
- name: Upload frida-portal
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-portal-qnx-armeabi
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
|
|
- name: Upload frida-inject
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-inject-qnx-armeabi
|
|
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
|
|
- name: Upload frida-gadget
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: frida-gadget-qnx-armeabi
|
|
path: ${{ env.FRIDA_PREFIX }}/lib/frida/32/frida-gadget.so
|
|
|
|
toolchain-windows:
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-windows-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll toolchain
|
|
run: python releng\deps.py roll toolchain windows-x86
|
|
|
|
sdk-windows:
|
|
needs: toolchain-windows
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64]
|
|
config: [md, mdd, mt, mtd]
|
|
fail-fast: false
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-windows-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll SDK
|
|
run: python releng\deps.py roll sdk windows-${{ matrix.arch }}-${{ matrix.config }} --activate
|
|
|
|
toolchain-macos:
|
|
strategy:
|
|
matrix:
|
|
arch: [x86_64, arm64]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll toolchain
|
|
run: releng/deps.py roll toolchain macos-${{ matrix.arch }}
|
|
|
|
sdk-macos:
|
|
needs: toolchain-macos
|
|
strategy:
|
|
matrix:
|
|
arch: [x86_64, arm64, arm64e]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk macos-${{ matrix.arch }} --activate
|
|
|
|
sdk-ios:
|
|
needs: toolchain-macos
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64e, x86_64-simulator, arm64-simulator]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk ios-${{ matrix.arch }} --activate
|
|
|
|
sdk-watchos:
|
|
needs: toolchain-macos
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64-simulator]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk watchos-${{ matrix.arch }} --activate
|
|
|
|
sdk-tvos:
|
|
needs: toolchain-macos
|
|
strategy:
|
|
matrix:
|
|
arch: [arm64, arm64-simulator]
|
|
fail-fast: false
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-macos-env
|
|
with:
|
|
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
|
|
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk tvos-${{ matrix.arch }} --activate
|
|
|
|
toolchain-linux:
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64beilp32, arm64-musl]
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
container: ghcr.io/frida/x-tools-linux-${{ matrix.arch }}:latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Roll toolchain
|
|
run: releng/deps.py roll toolchain $XTOOLS_HOST
|
|
|
|
sdk-linux:
|
|
needs: toolchain-linux
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64beilp32, arm64-musl, mips, mipsel, mips64, mips64el]
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
container: ghcr.io/frida/x-tools-linux-${{ matrix.arch }}:latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Set FRIDA_CAN_RUN_HOST_BINARIES
|
|
if: ${{ matrix.arch == 'x86' }}
|
|
run: echo "FRIDA_CAN_RUN_HOST_BINARIES=yes" >> $GITHUB_ENV
|
|
- name: Configure qemu-user
|
|
if: ${{ !startsWith(matrix.arch, 'x86') }}
|
|
run: echo "FRIDA_QEMU_SYSROOT=/opt/x-tools/$XTOOLS_HOST/$XTOOLS_HOST/sysroot" >> $GITHUB_ENV
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk $XTOOLS_HOST --activate
|
|
|
|
sdk-android-32:
|
|
needs: toolchain-linux
|
|
strategy:
|
|
matrix:
|
|
arch: [x86, arm]
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
container: ghcr.io/frida/x-tools-linux-x86:latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Set up NDK
|
|
id: setup-ndk
|
|
uses: nttld/setup-ndk@v1
|
|
with:
|
|
ndk-version: ${{ env.ANDROID_NDK_VERSION }}
|
|
add-to-path: false
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk android-${{ matrix.arch }} --build=$XTOOLS_HOST --activate
|
|
env:
|
|
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
|
|
|
sdk-android-64:
|
|
needs: toolchain-linux
|
|
strategy:
|
|
matrix:
|
|
arch: [x86_64, arm64]
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
container: ghcr.io/frida/x-tools-linux-x86_64:latest
|
|
steps:
|
|
- name: Check out repo
|
|
uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
uses: ./.github/actions/setup-linux-env
|
|
with:
|
|
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
|
|
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
|
cloudflare-email: ${{ secrets.CF_EMAIL }}
|
|
cloudflare-token: ${{ secrets.CF_TOKEN }}
|
|
- name: Set up NDK
|
|
id: setup-ndk
|
|
uses: nttld/setup-ndk@v1
|
|
with:
|
|
ndk-version: ${{ env.ANDROID_NDK_VERSION }}
|
|
add-to-path: false
|
|
- name: Roll SDK
|
|
run: releng/deps.py roll sdk android-${{ matrix.arch }} --build=$XTOOLS_HOST --activate
|
|
env:
|
|
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|