From 861e15175e2d4af3db7bcea5e9412a435d679157 Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Thu, 28 May 2026 00:33:38 -0700 Subject: [PATCH 1/3] Add Flutter master shader bundle smoke shard --- .github/workflows/flutter.yml | 13 +++++ .../shader_bundle_app/hook/build.dart | 13 +++++ test_fixtures/shader_bundle_app/lib/main.dart | 5 ++ test_fixtures/shader_bundle_app/pubspec.yaml | 16 ++++++ .../shaders/shared_color.glsl | 3 + .../shader_bundle_app/shaders/smoke.frag | 9 +++ .../shader_bundle_app/shaders/smoke.vert | 7 +++ .../test_bundle.shaderbundle.json | 10 ++++ tool/verify_flutter_master.sh | 55 +++++++++++++++++++ 9 files changed, 131 insertions(+) create mode 100644 test_fixtures/shader_bundle_app/hook/build.dart create mode 100644 test_fixtures/shader_bundle_app/lib/main.dart create mode 100644 test_fixtures/shader_bundle_app/pubspec.yaml create mode 100644 test_fixtures/shader_bundle_app/shaders/shared_color.glsl create mode 100644 test_fixtures/shader_bundle_app/shaders/smoke.frag create mode 100644 test_fixtures/shader_bundle_app/shaders/smoke.vert create mode 100644 test_fixtures/shader_bundle_app/test_bundle.shaderbundle.json create mode 100755 tool/verify_flutter_master.sh diff --git a/.github/workflows/flutter.yml b/.github/workflows/flutter.yml index 2f1a083..654c32d 100644 --- a/.github/workflows/flutter.yml +++ b/.github/workflows/flutter.yml @@ -38,3 +38,16 @@ jobs: run: flutter pub get - name: Run tests run: flutter test + + shader-bundle-smoke: + name: Shader bundle smoke + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + channel: master + - run: flutter --version + - name: Verify Flutter master shader bundle hook behavior + run: tool/verify_flutter_master.sh diff --git a/test_fixtures/shader_bundle_app/hook/build.dart b/test_fixtures/shader_bundle_app/hook/build.dart new file mode 100644 index 0000000..8b4023e --- /dev/null +++ b/test_fixtures/shader_bundle_app/hook/build.dart @@ -0,0 +1,13 @@ +import 'package:flutter_gpu_shaders/build.dart'; +import 'package:hooks/hooks.dart'; + +void main(List args) async { + await build(args, (input, output) async { + await buildShaderBundleJson( + buildInput: input, + buildOutput: output, + manifestFileName: 'test_bundle.shaderbundle.json', + includeDirectories: [input.packageRoot.resolve('shaders/')], + ); + }); +} diff --git a/test_fixtures/shader_bundle_app/lib/main.dart b/test_fixtures/shader_bundle_app/lib/main.dart new file mode 100644 index 0000000..53f054d --- /dev/null +++ b/test_fixtures/shader_bundle_app/lib/main.dart @@ -0,0 +1,5 @@ +import 'package:flutter/widgets.dart'; + +void main() { + runApp(const SizedBox.shrink()); +} diff --git a/test_fixtures/shader_bundle_app/pubspec.yaml b/test_fixtures/shader_bundle_app/pubspec.yaml new file mode 100644 index 0000000..dcc96c0 --- /dev/null +++ b/test_fixtures/shader_bundle_app/pubspec.yaml @@ -0,0 +1,16 @@ +name: shader_bundle_app +description: Fixture app for exercising flutter_gpu_shaders build hooks. +publish_to: none + +environment: + sdk: ^3.10.0 + +dependencies: + flutter: + sdk: flutter + flutter_gpu_shaders: + path: ../.. + hooks: ^2.0.0 + +flutter: + uses-material-design: true diff --git a/test_fixtures/shader_bundle_app/shaders/shared_color.glsl b/test_fixtures/shader_bundle_app/shaders/shared_color.glsl new file mode 100644 index 0000000..109ae12 --- /dev/null +++ b/test_fixtures/shader_bundle_app/shaders/shared_color.glsl @@ -0,0 +1,3 @@ +vec4 sharedColor() { + return vec4(0.1, 0.2, 0.3, 1.0); +} diff --git a/test_fixtures/shader_bundle_app/shaders/smoke.frag b/test_fixtures/shader_bundle_app/shaders/smoke.frag new file mode 100644 index 0000000..67c2cf8 --- /dev/null +++ b/test_fixtures/shader_bundle_app/shaders/smoke.frag @@ -0,0 +1,9 @@ +#version 460 core + +#include + +out vec4 frag_color; + +void main() { + frag_color = sharedColor(); +} diff --git a/test_fixtures/shader_bundle_app/shaders/smoke.vert b/test_fixtures/shader_bundle_app/shaders/smoke.vert new file mode 100644 index 0000000..3dc28a5 --- /dev/null +++ b/test_fixtures/shader_bundle_app/shaders/smoke.vert @@ -0,0 +1,7 @@ +#version 460 core + +in vec2 position; + +void main() { + gl_Position = vec4(position, 0.0, 1.0); +} diff --git a/test_fixtures/shader_bundle_app/test_bundle.shaderbundle.json b/test_fixtures/shader_bundle_app/test_bundle.shaderbundle.json new file mode 100644 index 0000000..867dac1 --- /dev/null +++ b/test_fixtures/shader_bundle_app/test_bundle.shaderbundle.json @@ -0,0 +1,10 @@ +{ + "SmokeVertex": { + "type": "vertex", + "file": "shaders/smoke.vert" + }, + "SmokeFragment": { + "type": "fragment", + "file": "shaders/smoke.frag" + } +} diff --git a/tool/verify_flutter_master.sh b/tool/verify_flutter_master.sh new file mode 100755 index 0000000..8593a7c --- /dev/null +++ b/tool/verify_flutter_master.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +fixture_source="$repo_root/test_fixtures/shader_bundle_app" +workdir="$(mktemp -d)" +trap 'rm -rf "$workdir"' EXIT + +fixture="$workdir/shader_bundle_app" +cp -R "$fixture_source" "$fixture" + +cat > "$fixture/pubspec_overrides.yaml" <&2 + exit 1 +fi + +second_build_log="$workdir/second_build.log" +flutter build bundle -v > "$second_build_log" 2>&1 +if ! grep -q "Skipping target: build_hooks" "$second_build_log"; then + echo "Expected unchanged build to skip build_hooks." >&2 + cat "$second_build_log" >&2 + exit 1 +fi + +cat > shaders/shared_color.glsl <<'GLSL' +vec4 sharedColor() { + return vec4(0.9, 0.8, 0.7, 1.0); +} +GLSL + +third_build_log="$workdir/third_build.log" +flutter build bundle -v > "$third_build_log" 2>&1 +if ! grep -q "build_hooks: Starting due to" "$third_build_log"; then + echo "Expected editing a transitive #include to rerun build_hooks." >&2 + cat "$third_build_log" >&2 + exit 1 +fi + +if [[ ! -s "$bundle" ]]; then + echo "Expected shader bundle at $bundle after rebuild" >&2 + exit 1 +fi From 07224b2d8b8566eda9453ff51476476a24d6161c Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Thu, 28 May 2026 00:36:57 -0700 Subject: [PATCH 2/3] Add stable shader bundle smoke shard --- .github/workflows/flutter.yml | 21 ++++++++-- ...master.sh => verify_shader_bundle_hook.sh} | 40 ++++++++++++++++--- 2 files changed, 53 insertions(+), 8 deletions(-) rename tool/{verify_flutter_master.sh => verify_shader_bundle_hook.sh} (62%) diff --git a/.github/workflows/flutter.yml b/.github/workflows/flutter.yml index 654c32d..a7900df 100644 --- a/.github/workflows/flutter.yml +++ b/.github/workflows/flutter.yml @@ -39,8 +39,8 @@ jobs: - name: Run tests run: flutter test - shader-bundle-smoke: - name: Shader bundle smoke + shader-bundle-smoke-master: + name: Shader bundle smoke (master) runs-on: macos-latest steps: - uses: actions/checkout@v4 @@ -50,4 +50,19 @@ jobs: channel: master - run: flutter --version - name: Verify Flutter master shader bundle hook behavior - run: tool/verify_flutter_master.sh + run: tool/verify_shader_bundle_hook.sh + env: + VERIFY_TRANSITIVE_INCLUDE: true + + shader-bundle-smoke-stable: + name: Shader bundle smoke (stable) + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + channel: stable + - run: flutter --version + - name: Verify Flutter stable shader bundle hook behavior + run: tool/verify_shader_bundle_hook.sh diff --git a/tool/verify_flutter_master.sh b/tool/verify_shader_bundle_hook.sh similarity index 62% rename from tool/verify_flutter_master.sh rename to tool/verify_shader_bundle_hook.sh index 8593a7c..7089f0e 100755 --- a/tool/verify_flutter_master.sh +++ b/tool/verify_shader_bundle_hook.sh @@ -3,6 +3,7 @@ set -euo pipefail repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" fixture_source="$repo_root/test_fixtures/shader_bundle_app" +verify_transitive_include="${VERIFY_TRANSITIVE_INCLUDE:-false}" workdir="$(mktemp -d)" trap 'rm -rf "$workdir"' EXIT @@ -35,21 +36,50 @@ if ! grep -q "Skipping target: build_hooks" "$second_build_log"; then exit 1 fi -cat > shaders/shared_color.glsl <<'GLSL' -vec4 sharedColor() { - return vec4(0.9, 0.8, 0.7, 1.0); +cat > shaders/smoke.frag <<'GLSL' +#version 460 core + +#include + +out vec4 frag_color; + +void main() { + frag_color = vec4(0.4, 0.5, 0.6, 1.0); } GLSL third_build_log="$workdir/third_build.log" flutter build bundle -v > "$third_build_log" 2>&1 if ! grep -q "build_hooks: Starting due to" "$third_build_log"; then - echo "Expected editing a transitive #include to rerun build_hooks." >&2 + echo "Expected editing a directly declared shader to rerun build_hooks." >&2 cat "$third_build_log" >&2 exit 1 fi if [[ ! -s "$bundle" ]]; then - echo "Expected shader bundle at $bundle after rebuild" >&2 + echo "Expected shader bundle at $bundle after direct shader rebuild" >&2 + exit 1 +fi + +if [[ "$verify_transitive_include" != "true" ]]; then + exit 0 +fi + +cat > shaders/shared_color.glsl <<'GLSL' +vec4 sharedColor() { + return vec4(0.9, 0.8, 0.7, 1.0); +} +GLSL + +fourth_build_log="$workdir/fourth_build.log" +flutter build bundle -v > "$fourth_build_log" 2>&1 +if ! grep -q "build_hooks: Starting due to" "$fourth_build_log"; then + echo "Expected editing a transitive #include to rerun build_hooks." >&2 + cat "$fourth_build_log" >&2 + exit 1 +fi + +if [[ ! -s "$bundle" ]]; then + echo "Expected shader bundle at $bundle after transitive include rebuild" >&2 exit 1 fi From e68601174f8864f0ce3cf5cab01dd92ddc2979fa Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Thu, 28 May 2026 00:43:42 -0700 Subject: [PATCH 3/3] Limit stable smoke shard to build compatibility --- .github/workflows/flutter.yml | 4 +++- tool/verify_shader_bundle_hook.sh | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/flutter.yml b/.github/workflows/flutter.yml index a7900df..151b79f 100644 --- a/.github/workflows/flutter.yml +++ b/.github/workflows/flutter.yml @@ -52,6 +52,8 @@ jobs: - name: Verify Flutter master shader bundle hook behavior run: tool/verify_shader_bundle_hook.sh env: + VERIFY_BUILD_HOOK_CACHE: true + VERIFY_DIRECT_SHADER: true VERIFY_TRANSITIVE_INCLUDE: true shader-bundle-smoke-stable: @@ -64,5 +66,5 @@ jobs: with: channel: stable - run: flutter --version - - name: Verify Flutter stable shader bundle hook behavior + - name: Verify Flutter stable shader bundle build compatibility run: tool/verify_shader_bundle_hook.sh diff --git a/tool/verify_shader_bundle_hook.sh b/tool/verify_shader_bundle_hook.sh index 7089f0e..746319d 100755 --- a/tool/verify_shader_bundle_hook.sh +++ b/tool/verify_shader_bundle_hook.sh @@ -3,6 +3,8 @@ set -euo pipefail repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" fixture_source="$repo_root/test_fixtures/shader_bundle_app" +verify_build_hook_cache="${VERIFY_BUILD_HOOK_CACHE:-false}" +verify_direct_shader="${VERIFY_DIRECT_SHADER:-false}" verify_transitive_include="${VERIFY_TRANSITIVE_INCLUDE:-false}" workdir="$(mktemp -d)" trap 'rm -rf "$workdir"' EXIT @@ -28,6 +30,10 @@ if [[ ! -s "$bundle" ]]; then exit 1 fi +if [[ "$verify_build_hook_cache" != "true" ]]; then + exit 0 +fi + second_build_log="$workdir/second_build.log" flutter build bundle -v > "$second_build_log" 2>&1 if ! grep -q "Skipping target: build_hooks" "$second_build_log"; then @@ -36,6 +42,10 @@ if ! grep -q "Skipping target: build_hooks" "$second_build_log"; then exit 1 fi +if [[ "$verify_direct_shader" != "true" ]]; then + exit 0 +fi + cat > shaders/smoke.frag <<'GLSL' #version 460 core