Files
sanderling/.github/actions/folio-app/action.yml
T
pj 95a19fcc1e ci: pin the first-party actions to commit shas (#86)
third-party actions here were already sha-pinned; the actions/* ones were
on major tags, which are mutable and can be repointed. same treatment and
same trailing version comment, so an upgrade stays a readable diff.
2026-08-17 10:26:05 +05:30

82 lines
3.2 KiB
YAML

name: folio app
description: Install the toolchain folio needs on one platform, and build the app there.
inputs:
platform:
description: android, ios or web
required: true
runs:
using: composite
steps:
- name: Set up the JDKs
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: temurin
# The metro gradle plugin folio builds with needs a 21 runtime; the
# sidecar toolchain pins 17. Both are installed so gradle can pick.
java-version: |
17
21
# The iOS app builds its Kotlin framework through the folio gradle project,
# which configures :app:androidApp, so this is needed off Android too.
# `make sanderling-android` wants it as well, for the sidecar JAR.
- name: Set up Android SDK
if: inputs.platform != 'web'
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1
- name: Cache Gradle
if: inputs.platform != 'ios'
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: folio-gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
folio-gradle-${{ runner.os }}-
# idb-companion is not in homebrew-core, only in facebook/homebrew-fb, so
# it has to be named by its full tap path. xcodegen and just are core.
- name: Install idb-companion, xcodegen and just
if: inputs.platform == 'ios'
shell: bash
run: brew install facebook/fb/idb-companion xcodegen just
# Both asset tarballs are built by the prepare scripts, and the runner
# bundle is an xcodebuild of companion/Sources. Keyed on the scripts and
# the versions the Makefile embeds, so a later run reuses them. This has to
# land before `make sanderling-ios`, which is what consumes them.
- name: Cache the companion and runner bundles
if: inputs.platform == 'ios'
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
internal/driver/ioscompanion/companionassets/assets
internal/driver/ioscompanion/runnerassets/assets
key: ios-assets-${{ runner.os }}-${{ hashFiles('internal/driver/ioscompanion/companionassets/prepare.sh', 'companion/prepare.sh', 'companion/project.yml', 'companion/Sources/**') }}
# Without this the emulator falls back to software rendering and every
# step costs several seconds.
- name: Enable KVM
if: inputs.platform == 'android'
shell: bash
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
- name: Build the folio APK
if: inputs.platform == 'android'
shell: bash
working-directory: examples/folio
run: ./gradlew :app:androidApp:assembleDebug
- name: Build the folio wasmJs app
if: inputs.platform == 'web'
shell: bash
working-directory: examples/folio
run: ./gradlew :app:webApp:wasmJsBrowserDevelopmentExecutableDistribution