1515 branches : [main]
1616 paths :
1717 - " showcase/**"
18+ - " .github/workflows/showcase_build.yml"
19+ - " .github/workflows/showcase_build_check.yml"
1820 workflow_dispatch :
1921 inputs :
2022 service :
8385 # single-line strings, but mixing styles (list vs. string)
8486 # in the same filters block is easy to misread during review.
8587 filters : |
88+ workflow_config:
89+ - '.github/workflows/showcase_build.yml'
90+ - '.github/workflows/showcase_build_check.yml'
8691 shell:
8792 - 'showcase/shell/**'
8893 - 'showcase/shared/**'
@@ -141,6 +146,9 @@ jobs:
141146 - 'showcase/shared/**'
142147 - 'showcase/scripts/**'
143148 - 'showcase/integrations/*/manifest.yaml'
149+ - 'showcase/integrations/*/docs-links.json'
150+ - 'showcase/integrations/*/docs/setup/**'
151+ - 'showcase/integrations/*/src/**'
144152 showcase_harness:
145153 - 'showcase/harness/**'
146154 - 'showcase/shared/**'
@@ -187,16 +195,11 @@ jobs:
187195 {"dispatch_name":"built-in-agent","filter_key":"built_in_agent","context":"showcase/integrations/built-in-agent","image":"showcase-built-in-agent","railway_id":"f4f8371a-bc46-45b2-b6d4-9c9af608bdbf","timeout":15,"lfs":false,"build_args":"","dockerfile":"","health_path":"/api/health"},
188196 {"dispatch_name":"shell-dojo","filter_key":"shell_dojo","context":".","image":"showcase-shell-dojo","railway_id":"7ad1ece7-2228-49cd-8a78-bddf30322907","timeout":10,"lfs":false,"build_args":"","dockerfile":"showcase/shell-dojo/Dockerfile","health_path":"/"},
189197 {"dispatch_name":"shell-dashboard","filter_key":"shell_dashboard","context":".","image":"showcase-shell-dashboard","railway_id":"4d5dfd74-be61-40b2-8564-b53b7dd4c15b","timeout":10,"lfs":true,"build_args_sha":"__GH_SHA__","build_args_branch":"__GH_REF_NAME__","build_args_pb_url":"https://showcase-pocketbase-production.up.railway.app","build_args_shell_url":"https://showcase.copilotkit.ai","build_args_ops_url":"https://showcase-harness-production.up.railway.app","dockerfile":"showcase/shell-dashboard/Dockerfile","health_path":"/"},
190- {"dispatch_name":"shell-docs","filter_key":"shell_docs","context":".","image":"showcase-shell-docs","railway_id":"7badfb8d-4228-414c-9145-b4026803714f","timeout":10,"lfs":true,"build_args_sha":"__GH_SHA__","build_args_branch":"__GH_REF_NAME__","build_args_analytics":"yes","dockerfile":"showcase/shell-docs/Dockerfile","health_path":"/"},
198+ {"dispatch_name":"shell-docs","filter_key":"shell_docs","context":".","image":"showcase-shell-docs","railway_id":"7badfb8d-4228-414c-9145-b4026803714f","timeout":10,"lfs":true,"build_args_sha":"__GH_SHA__","build_args_branch":"__GH_REF_NAME__","build_args_base_url":"https://docs.copilotkit.ai","build_args_shell_url":"https://showcase.copilotkit.ai"," build_args_analytics":"yes","dockerfile":"showcase/shell-docs/Dockerfile","health_path":"/"},
191199 {"dispatch_name":"showcase-harness","filter_key":"showcase_harness","context":".","image":"showcase-harness","railway_id":"3a14bfed-0537-4d71-897b-7c593dca161d","timeout":20,"lfs":false,"build_args":"","dockerfile":"showcase/harness/Dockerfile","health_path":"/health"},
192200 {"dispatch_name":"showcase-aimock","filter_key":"showcase_aimock","context":"showcase/aimock","image":"showcase-aimock","railway_id":"0fa0435d-8a66-46f0-84fd-e4250b580013","timeout":5,"lfs":false,"build_args":"","dockerfile":"showcase/aimock/Dockerfile","health_path":"/health"}
193201 ]'
194202
195- # Substitute trusted git context (sha, ref_name) into JSON placeholders.
196- # Routed through env: above to satisfy zizmor template-injection check.
197- ALL_SERVICES="${ALL_SERVICES//__GH_SHA__/$GITHUB_SHA_ENV}"
198- ALL_SERVICES="${ALL_SERVICES//__GH_REF_NAME__/$GITHUB_REF_NAME_ENV}"
199-
200203 DISPATCH="$DISPATCH_SERVICE"
201204 CHANGES="${FILTER_CHANGES:-[]}"
202205
@@ -211,11 +214,14 @@ jobs:
211214 # dispatch == <specific service>: narrow to that service only (skips paths-filter so
212215 # drift-rebuild and manual single-service dispatches work regardless of $changes).
213216 # dispatch == "": push event — include services whose filter_key appears in paths-filter CHANGES.
214- MATRIX=$(echo "$ALL_SERVICES" | jq -c --arg dispatch "$DISPATCH" --argjson changes "$CHANGES" '
215- [.[] | (.filter_key as $fk | select(
217+ MATRIX=$(echo "$ALL_SERVICES" | jq -c --arg dispatch "$DISPATCH" --argjson changes "$CHANGES" --arg sha "$GITHUB_SHA_ENV" --arg ref "$GITHUB_REF_NAME_ENV" '
218+ [.[] |
219+ if .build_args_sha == "__GH_SHA__" then .build_args_sha = $sha else . end |
220+ if .build_args_branch == "__GH_REF_NAME__" then .build_args_branch = $ref else . end |
221+ (.filter_key as $fk | select(
216222 $dispatch == "all" or
217223 ($dispatch != "" and $dispatch != "all" and $dispatch == .dispatch_name) or
218- ($dispatch == "" and ($changes | index($ fk) != null))
224+ ($dispatch == "" and (( $changes | index("workflow_config") != null) or ($changes | index($ fk) != null) ))
219225 ))]
220226 ')
221227
@@ -310,33 +316,49 @@ jobs:
310316
311317 - name : Prepare build args
312318 id : build-args
319+ env :
320+ BUILD_ARGS_SHA : ${{ matrix.service.build_args_sha }}
321+ BUILD_ARGS_BRANCH : ${{ matrix.service.build_args_branch }}
322+ BUILD_ARGS_PB_URL : ${{ matrix.service.build_args_pb_url }}
323+ BUILD_ARGS_BASE_URL : ${{ matrix.service.build_args_base_url }}
324+ BUILD_ARGS_SHELL_URL : ${{ matrix.service.build_args_shell_url }}
325+ BUILD_ARGS_OPS_URL : ${{ matrix.service.build_args_ops_url }}
326+ BUILD_ARGS_ANALYTICS : ${{ matrix.service.build_args_analytics }}
327+ NEXT_PUBLIC_POSTHOG_KEY : ${{ secrets.POSTHOG_PROJECT_KEY }}
328+ NEXT_PUBLIC_REB2B_KEY : ${{ secrets.REB2B_KEY }}
329+ NEXT_PUBLIC_SCARF_PIXEL_ID : ${{ secrets.SCARF_PIXEL_ID }}
330+ NEXT_PUBLIC_REO_KEY : ${{ secrets.REO_PROJECT_KEY }}
331+ NEXT_PUBLIC_GOOGLE_ANALYTICS_TRACKING_ID : ${{ secrets.GOOGLE_ANALYTICS_TRACKING_ID }}
313332 run : |
314333 ARGS=""
315- if [ -n "${{ matrix.service.build_args_sha }}" ]; then
316- ARGS="COMMIT_SHA=${{ matrix.service.build_args_sha }}"
317- ARGS="${ARGS}"$'\n'"BRANCH=${{ matrix.service.build_args_branch }}"
334+ if [ -n "$BUILD_ARGS_SHA" ]; then
335+ ARGS="COMMIT_SHA=${BUILD_ARGS_SHA}"
336+ ARGS="${ARGS}"$'\n'"BRANCH=${BUILD_ARGS_BRANCH}"
337+ fi
338+ if [ -n "$BUILD_ARGS_PB_URL" ]; then
339+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_POCKETBASE_URL=${BUILD_ARGS_PB_URL}"
318340 fi
319- if [ -n "${{ matrix.service.build_args_pb_url }} " ]; then
320- ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_POCKETBASE_URL =${{ matrix.service.build_args_pb_url } }"
341+ if [ -n "$BUILD_ARGS_BASE_URL " ]; then
342+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_BASE_URL =${BUILD_ARGS_BASE_URL }"
321343 fi
322- if [ -n "${{ matrix.service.build_args_shell_url }} " ]; then
323- ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_SHELL_URL=${{ matrix.service.build_args_shell_url } }"
344+ if [ -n "$BUILD_ARGS_SHELL_URL " ]; then
345+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_SHELL_URL=${BUILD_ARGS_SHELL_URL }"
324346 fi
325- if [ -n "${{ matrix.service.build_args_ops_url }} " ]; then
347+ if [ -n "$BUILD_ARGS_OPS_URL " ]; then
326348 # OPS_BASE_URL is required at build time by shell-dashboard's
327349 # next.config.ts rewrites() — without it `next build` aborts.
328- ARGS="${ARGS:+${ARGS}$'\n'}OPS_BASE_URL=${{ matrix.service.build_args_ops_url } }"
350+ ARGS="${ARGS:+${ARGS}$'\n'}OPS_BASE_URL=${BUILD_ARGS_OPS_URL }"
329351 fi
330- if [ "${{ matrix.service.build_args_analytics }} " = "yes" ]; then
352+ if [ "$BUILD_ARGS_ANALYTICS " = "yes" ]; then
331353 # Client-side analytics keys for the shell-docs bundle.
332354 # NEXT_PUBLIC_* values must reach `next build` so they get
333355 # inlined into client JS chunks. Sourced from repo secrets;
334356 # Railway runtime env doesn't reach this build step.
335- ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_POSTHOG_KEY=${{ secrets.POSTHOG_PROJECT_KEY } }"
336- ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_REB2B_KEY=${{ secrets.REB2B_KEY } }"
337- ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_SCARF_PIXEL_ID=${{ secrets.SCARF_PIXEL_ID } }"
338- ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_REO_KEY=${{ secrets.REO_PROJECT_KEY } }"
339- ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_GOOGLE_ANALYTICS_TRACKING_ID=${{ secrets.GOOGLE_ANALYTICS_TRACKING_ID } }"
357+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_POSTHOG_KEY=${NEXT_PUBLIC_POSTHOG_KEY }"
358+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_REB2B_KEY=${NEXT_PUBLIC_REB2B_KEY }"
359+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_SCARF_PIXEL_ID=${NEXT_PUBLIC_SCARF_PIXEL_ID }"
360+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_REO_KEY=${NEXT_PUBLIC_REO_KEY }"
361+ ARGS="${ARGS:+${ARGS}$'\n'}NEXT_PUBLIC_GOOGLE_ANALYTICS_TRACKING_ID=${NEXT_PUBLIC_GOOGLE_ANALYTICS_TRACKING_ID }"
340362 fi
341363 # Use delimiter to safely pass multiline value
342364 echo "args<<BUILDARGS_EOF" >> $GITHUB_OUTPUT
0 commit comments