Try setting up an emulator in CI #62
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: [push, pull_request] | |
jobs: | |
build: | |
name: Build & test | |
runs-on: ubuntu-latest | |
container: | |
image: httptoolkit/act-build-base:v3.0.0 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build a single-file Android script | |
run: | | |
mkdir -p ./build/ | |
paste -sd'\n' ./config.js \ | |
./native-connect-hook.js \ | |
./native-tls-hook.js \ | |
./android/android-proxy-override.js \ | |
./android/android-system-certificate-injection.js \ | |
./android/android-certificate-unpinning.js \ | |
./android/android-certificate-unpinning-fallback.js \ | |
./android/android-disable-root-detection.js \ | |
> ./build/android-frida-interception-script.js | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: android-frida-interception-script.js | |
path: ./build/android-frida-interception-script.js | |
if-no-files-found: error | |
- name: Publish the combined script to GitHub Releases | |
uses: svenstaro/upload-release-action@v2 | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | |
with: | |
body: | | |
The pre-combined scripts for the ${{ github.ref_name }} release. | |
This contains the same content as the repo, but pre-combined into a single | |
script for convenient usage. | |
This script still requires configuration: you'll need to provide the | |
`CERT_PEM` and typically `PROXY_HOST` and `PROXY_PORT` variables in the | |
first section of the file. | |
asset_name: android-frida-interception-script-${{ github.ref }}.js | |
file: ./build/android-frida-interception-script.js | |
tag: ${{ github.ref }} | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
test-android: | |
name: Test on Android emulator | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
api-level: [30] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Install Frida CLI | |
run: | | |
pip install --user frida-tools | |
echo "$HOME/.local/bin" >> $GITHUB_PATH | |
# Apparently significantly improves emulator performance: | |
- name: Enable KVM | |
run: | | |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
sudo udevadm control --reload-rules | |
sudo udevadm trigger --name-match=kvm | |
# Cache the emulator AVD: | |
- name: AVD cache | |
uses: actions/cache@v4 | |
id: avd-cache | |
with: | |
path: | | |
~/.android/avd/* | |
~/.android/adb* | |
key: avd-${{ matrix.api-level }} | |
- name: Create AVD and cache snapshot | |
if: steps.avd-cache.outputs.cache-hit != 'true' | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ matrix.api-level }} | |
target: google_apis | |
force-avd-creation: false | |
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
script: | | |
echo "Generated AVD snapshot for caching." | |
- name: Run tests | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ matrix.api-level }} | |
target: google_apis | |
force-avd-creation: false | |
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
script: | | |
adb devices | |
bash test/setup-emulator.sh | |
echo "Emulator ready to test" | |
adb shell pgrep -f frida-server |