Skip to content

Build SKIA Graphite #25

Build SKIA Graphite

Build SKIA Graphite #25

name: Build SKIA Graphite
on:
workflow_dispatch:
jobs:
prepare-release:
runs-on: ubuntu-latest
outputs:
skia_branch: ${{ steps.skia_meta.outputs.branch }}
skia_branch_slug: ${{ steps.skia_meta.outputs.branch_slug }}
tag_name: ${{ steps.release_meta.outputs.tag_name }}
release_name: ${{ steps.release_meta.outputs.release_name }}
steps:
- name: Checkout repository
uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v5.0.0
with:
submodules: recursive
fetch-depth: 0
- name: Determine Skia branch
id: skia_meta
run: |
set -eo pipefail
if [ ! -d "externals/skia" ]; then
echo "::error::externals/skia not found."
exit 1
fi
branch=$(git -C externals/skia branch --show-current || true)
if [ -z "$branch" ]; then
branch=$(git -C externals/skia describe --all --exact-match 2>/dev/null || true)
fi
if [ -z "$branch" ]; then
branch=$(git -C externals/skia rev-parse --short HEAD)
fi
# Strip remotes/origin/chrome/ prefix if present
branch=${branch#remotes/origin/chrome/}
slug=${branch//\//-}
echo "branch=$branch" >> "$GITHUB_OUTPUT"
echo "branch_slug=$slug" >> "$GITHUB_OUTPUT"
- name: Compute release metadata
id: release_meta
run: |
tag="skia-graphite-${SKIA_BRANCH_SLUG}"
echo "tag_name=$tag" >> "$GITHUB_OUTPUT"
echo "release_name=Skia Graphite ${SKIA_BRANCH}" >> "$GITHUB_OUTPUT"
env:
SKIA_BRANCH: ${{ steps.skia_meta.outputs.branch }}
SKIA_BRANCH_SLUG: ${{ steps.skia_meta.outputs.branch_slug }}
- name: Create GitHub release
id: create_release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.release_meta.outputs.tag_name }}
name: ${{ steps.release_meta.outputs.release_name }}
body: "Skia Graphite prebuilt binaries for version ${{ steps.skia_meta.outputs.branch }}"
draft: false
prerelease: true
generate_release_notes: false
build:
needs: prepare-release
runs-on: macos-latest-xlarge
strategy:
matrix:
include:
- target: "apple"
artifact_name: "skia-graphite-apple-xcframeworks"
package_root: "./packages/skia/libs/apple"
- target: "android-arm"
artifact_name: "skia-graphite-android-arm"
package_root: "./externals/skia/out/android/arm"
- target: "android-arm64"
artifact_name: "skia-graphite-android-arm-64"
package_root: "./externals/skia/out/android/arm64"
- target: "android-x86"
artifact_name: "skia-graphite-android-arm-x86"
package_root: "./externals/skia/out/android/x86"
- target: "android-x64"
artifact_name: "skia-graphite-android-arm-x64"
package_root: "./externals/skia/out/android/x64"
fail-fast: false
steps:
- name: checkout
uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v5.0.0
with:
submodules: recursive
- name: Setup Android NDK
id: setup-ndk
if: startsWith(matrix.target, 'android')
uses: nttld/setup-ndk@afb4c9964b521afb97c864b7d40b11e6911bd410 # v1.5.0
with:
ndk-version: r27d
- name: Set ANDROID_NDK
if: startsWith(matrix.target, 'android')
run: echo "ANDROID_NDK=$ANDROID_HOME/ndk-bundle" >> $GITHUB_ENV
- name: Setup Ninja
uses: seanmiddleditch/gha-setup-ninja@master
- name: Setup
uses: ./.github/actions/setup
with:
download_skia: 'false'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Update depot_tools
working-directory: ./externals/depot_tools
run: ./update_depot_tools
- name: Apply Dawn patch
run: |
DAWN_GNI_FILE="./externals/skia/build_overrides/dawn.gni"
if [ -f "$DAWN_GNI_FILE" ]; then
echo "Applying patch to dawn.gni..."
# Remove the specified lines from the end of the file
sed -i.bak '/# PartitionAlloc is an optional dependency:/,$d' "$DAWN_GNI_FILE"
echo "Patch applied successfully."
echo "Modified dawn.gni content:"
cat "$DAWN_GNI_FILE"
else
echo "Warning: dawn.gni file not found at $DAWN_GNI_FILE"
fi
- name: Build Skia with Graphite - ${{ matrix.target }}
working-directory: ./packages/skia
env:
ANDROID_NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
GIT_SYNC_DEPS_SKIP_EMSDK: 'true'
ZERO_AR_DATE: 1
SK_GRAPHITE: 1
run: yarn build-skia ${{ matrix.target }}
- name: Package binaries - ${{ matrix.artifact_name }}
id: package
run: |
set -eo pipefail
ROOT="${{ matrix.package_root }}"
BASENAME="$(basename "$ROOT")"
PARENT="$(dirname "$ROOT")"
TAG="${DISPATCH_TAG}"
if [ -z "$TAG" ]; then
TAG="${SKIA_BRANCH_SLUG}"
fi
if [ -z "$TAG" ]; then
TAG="${GITHUB_REF_NAME:-}"
fi
if [ -z "$TAG" ]; then
TAG="${GITHUB_SHA}"
fi
ARCHIVE="${{ matrix.artifact_name }}-${TAG}.tar.gz"
mkdir -p release-assets
tar -czf "release-assets/$ARCHIVE" -C "$PARENT" "$BASENAME"
echo "asset_path=release-assets/$ARCHIVE" >> "$GITHUB_OUTPUT"
echo "asset_name=$ARCHIVE" >> "$GITHUB_OUTPUT"
shell: bash
env:
DISPATCH_TAG: ${{ needs.prepare-release.outputs.tag_name }}
SKIA_BRANCH_SLUG: ${{ needs.prepare-release.outputs.skia_branch_slug }}
- name: Upload binaries to GitHub release - ${{ matrix.artifact_name }}
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.prepare-release.outputs.tag_name }}
files: ${{ steps.package.outputs.asset_path }}
prerelease: true