Build SKIA Graphite #27
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: 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 | |
| - name: Package Graphite Headers | |
| if: matrix.target == 'apple' | |
| id: package_headers | |
| run: | | |
| set -eo pipefail | |
| 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="skia-graphite-headers-${TAG}.tar.gz" | |
| mkdir -p release-assets | |
| tar -czf "release-assets/$ARCHIVE" \ | |
| ./packages/skia/cpp/dawn/include \ | |
| ./packages/skia/cpp/skia/src/gpu/graphite | |
| 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 Graphite Headers to GitHub release | |
| if: matrix.target == 'apple' | |
| uses: softprops/action-gh-release@v2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: ${{ needs.prepare-release.outputs.tag_name }} | |
| files: ${{ steps.package_headers.outputs.asset_path }} | |
| prerelease: true |