337 lines
13 KiB
YAML
337 lines
13 KiB
YAML
name: Florida
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 9/12 * * *"
|
|
workflow_dispatch:
|
|
push:
|
|
branches: ["main", "ci"]
|
|
paths:
|
|
- ".github/workflows/build.yml"
|
|
- "patches/**"
|
|
|
|
jobs:
|
|
check_version:
|
|
runs-on: ubuntu-22.04
|
|
|
|
outputs:
|
|
FRIDA_VERSION: ${{ steps.pullFridaLatestRelease.outputs.FRIDA_VERSION }}
|
|
ALREADY_RELEASE: ${{ steps.checkReleaseVersion.outputs.ALREADY_RELEASE }}
|
|
steps:
|
|
- name: Pull Frida Latest Release
|
|
id: pullFridaLatestRelease
|
|
uses: actions/github-script@v3
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
const releaseResponse = await github.repos.getLatestRelease({
|
|
owner: 'frida',
|
|
repo: 'frida',
|
|
})
|
|
const {
|
|
data: { tag_name: ver }
|
|
} = releaseResponse;
|
|
core.setOutput('FRIDA_VERSION', ver);
|
|
|
|
- name: Split Repository Name
|
|
id: split_name
|
|
run: |
|
|
repo_name=${{ github.repository }}
|
|
IFS='/' read -ra repo_parts <<< "$repo_name"
|
|
echo "owner=${repo_parts[0]}" >> $GITHUB_OUTPUT
|
|
echo "repo=${repo_parts[1]}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Check release version
|
|
id: checkReleaseVersion
|
|
uses: actions/github-script@v3
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
try {
|
|
const releaseVersion = '${{ steps.pullFridaLatestRelease.outputs.FRIDA_VERSION }}'
|
|
const releaseResponse = await github.repos.getReleaseByTag({
|
|
owner: '${{ steps.split_name.outputs.owner }}',
|
|
repo: '${{ steps.split_name.outputs.repo }}',
|
|
tag: releaseVersion
|
|
});
|
|
const {
|
|
data: { tag_name: ver }
|
|
} = releaseResponse;
|
|
if (ver == '${{ steps.pullFridaLatestRelease.outputs.FRIDA_VERSION }}'){
|
|
if ( ${{ ( github.event_name == 'push' || github.event_name == 'workflow_dispatch') }}){
|
|
core.setOutput('ALREADY_RELEASE', '2');
|
|
} else {
|
|
core.setOutput('ALREADY_RELEASE', '1');
|
|
}
|
|
}
|
|
else{
|
|
core.setOutput('ALREADY_RELEASE', '0');
|
|
}
|
|
} catch (e) {
|
|
if(e.message == 'Not Found'){
|
|
core.setOutput('ALREADY_RELEASE', '0');
|
|
}
|
|
else{
|
|
core.setFailed(e.message);
|
|
}
|
|
}
|
|
|
|
- name: Delete release
|
|
if: ${{ steps.checkReleaseVersion.outputs.ALREADY_RELEASE == '2' }}
|
|
uses: dev-drprasad/delete-tag-and-release@v1.0
|
|
with:
|
|
tag_name: ${{ steps.pullFridaLatestRelease.outputs.FRIDA_VERSION }}
|
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
delete_release: true
|
|
|
|
create_release:
|
|
needs: check_version
|
|
runs-on: ubuntu-22.04
|
|
if: needs.check_version.outputs.ALREADY_RELEASE != '1'
|
|
|
|
steps:
|
|
- uses: actions/create-release@master
|
|
id: createRelease
|
|
name: Create Runner Release
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: "${{ needs.check_version.outputs.FRIDA_VERSION }}"
|
|
release_name: "${{ needs.check_version.outputs.FRIDA_VERSION }}"
|
|
prerelease: false
|
|
|
|
android_build:
|
|
runs-on: ubuntu-22.04
|
|
needs: [check_version, create_release]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 16
|
|
|
|
- name: Set up JDK 17
|
|
uses: actions/setup-java@v3
|
|
with:
|
|
distribution: "temurin"
|
|
java-version: "17"
|
|
|
|
- name: Setup Android NDK
|
|
id: setup-ndk
|
|
uses: nttld/setup-ndk@v1
|
|
with:
|
|
ndk-version: r25c
|
|
local-cache: true
|
|
|
|
- name: Set up Python 3.8
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.8
|
|
|
|
- name: install dependencies
|
|
run: |
|
|
sudo apt-get update && DEBIAN_FRONTEND=noninteractive sudo apt-get install build-essential tree ninja-build gcc-multilib g++-multilib lib32stdc++-9-dev flex bison ruby ruby-dev python3-requests python3-setuptools python3-dev python3-pip libc6-dev libc6-dev-i386 -y
|
|
sudo gem install fpm -v 1.11.0 --no-document
|
|
python3 -m pip install lief
|
|
|
|
- name: build frida for Android
|
|
shell: bash
|
|
run: |
|
|
git config --global user.name "GitHub Actions"
|
|
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
export ANDROID_NDK_ROOT=${{ steps.setup-ndk.outputs.ndk-path }}
|
|
git clone --recurse-submodules https://github.com/frida/frida
|
|
cd frida
|
|
for path in ../patches/*
|
|
do
|
|
name=$(basename $path)
|
|
real=$(realpath $path)
|
|
echo "Apply patches in $real to frida/$name"
|
|
cd $name
|
|
git am ../../patches/$name/*.patch
|
|
cd ..
|
|
echo $i
|
|
done
|
|
make core-android-arm
|
|
make core-android-arm64
|
|
make core-android-x86
|
|
make core-android-x86_64
|
|
|
|
- name: Split Repository Name
|
|
id: split_name
|
|
run: |
|
|
repo_name=${{ github.repository }}
|
|
IFS='/' read -ra repo_parts <<< "$repo_name"
|
|
echo "owner=${repo_parts[0]}" >> $GITHUB_OUTPUT
|
|
echo "repo=${repo_parts[1]}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Check release version
|
|
id: checkReleaseVersion
|
|
uses: actions/github-script@v3
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
try {
|
|
const releaseVersion = '${{ needs.check_version.outputs.FRIDA_VERSION }}'
|
|
const releaseResponse = await github.repos.getReleaseByTag({
|
|
owner: '${{ steps.split_name.outputs.owner }}',
|
|
repo: '${{ steps.split_name.outputs.repo }}',
|
|
tag: releaseVersion
|
|
})
|
|
const {
|
|
data: { id: releaseId, html_url: htmlUrl, upload_url: uploadUrl }
|
|
} = releaseResponse;
|
|
core.setOutput('id', releaseId);
|
|
core.setOutput('html_url', htmlUrl);
|
|
core.setOutput('upload_url', uploadUrl);
|
|
core.setOutput('version', releaseVersion);
|
|
} catch (e) {
|
|
core.setFailed(e.message);
|
|
}
|
|
|
|
- name: package build result for Android
|
|
shell: bash
|
|
run: |
|
|
pushd frida
|
|
|
|
gzip build/frida-android-arm/bin/frida-server
|
|
gzip build/frida-android-arm64/bin/frida-server
|
|
|
|
gzip build/frida-android-x86/bin/frida-server
|
|
gzip build/frida-android-x86_64/bin/frida-server
|
|
|
|
gzip build/frida-android-arm/bin/frida-inject
|
|
gzip build/frida-android-arm64/bin/frida-inject
|
|
|
|
gzip build/frida-android-x86/bin/frida-inject
|
|
gzip build/frida-android-x86_64/bin/frida-inject
|
|
|
|
gzip build/frida-android-arm/lib/frida/32/frida-gadget.so
|
|
gzip build/frida-android-arm64/lib/frida/64/frida-gadget.so
|
|
|
|
gzip build/frida-android-x86/lib/frida/32/frida-gadget.so
|
|
gzip build/frida-android-x86_64/lib/frida/64/frida-gadget.so
|
|
|
|
popd
|
|
|
|
- name: Upload android arm frida-server for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-arm/bin/frida-server.gz'
|
|
asset_name: 'florida-server-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-arm.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android arm64 frida-server for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-arm64/bin/frida-server.gz'
|
|
asset_name: 'florida-server-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-arm64.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android x86 frida-server for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-x86/bin/frida-server.gz'
|
|
asset_name: 'florida-server-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-x86.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android x86_64 frida-server for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-x86_64/bin/frida-server.gz'
|
|
asset_name: 'florida-server-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-x86_64.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android arm frida-inject for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-arm/bin/frida-inject.gz'
|
|
asset_name: 'florida-inject-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-arm.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android arm64 frida-inject for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-arm64/bin/frida-inject.gz'
|
|
asset_name: 'florida-inject-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-arm64.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android x86 frida-inject for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-x86/bin/frida-inject.gz'
|
|
asset_name: 'florida-inject-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-x86.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android x86_64 frida-inject for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-x86_64/bin/frida-inject.gz'
|
|
asset_name: 'florida-inject-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-arm-x86_64.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android arm frida-gadget for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-arm/lib/frida/32/frida-gadget.so.gz'
|
|
asset_name: 'florida-gadget-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-arm.so.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android arm64 frida-gadget for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-arm64/lib/frida/64/frida-gadget.so.gz'
|
|
asset_name: 'florida-gadget-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-arm64.so.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android x86 frida-gadget for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-x86/lib/frida/32/frida-gadget.so.gz'
|
|
asset_name: 'florida-gadget-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-x86.so.gz'
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload android x86_64 frida-gadget for Florida
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: '${{ steps.checkReleaseVersion.outputs.upload_url }}'
|
|
asset_path: '${{ github.workspace }}/frida/build/frida-android-x86_64/lib/frida/64/frida-gadget.so.gz'
|
|
asset_name: 'florida-gadget-${{ needs.check_version.outputs.FRIDA_VERSION }}-android-x86_64.so.gz'
|
|
asset_content_type: application/octet-stream
|
|
|