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 }}'){ 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); } } create_release: needs: check_version runs-on: ubuntu-22.04 if: needs.check_version.outputs.ALREADY_RELEASE == '0' 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