Skip to content

[AI Search] Namespace binding docs, API restructure, and managed storage #70783

[AI Search] Namespace binding docs, API restructure, and managed storage

[AI Search] Namespace binding docs, API restructure, and managed storage #70783

Workflow file for this run

name: CI
on:
pull_request:
branches:
- production
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
pre-build:
name: Pre Build
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 1
- name: Set up node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: 24.x
cache: npm
- name: Check for CRLF line endings
run: |
if git grep -Il $'\r'; then
echo "::error::CRLF line endings detected. Configure your editor to use LF line endings (this repo has an .editorconfig file that most editors respect automatically)."
exit 1
fi
- name: Check for invalid file extensions
run: |
FILES=$(
find src/content \
-type f \
-not -name '*.mdx' \
-not -name '*.md' \
-not -name '*.json' \
-not -name '*.yml' \
-not -name '*.yaml' \
-not -name '*.txt' \
-not -wholename 'src/content/collections/*'
)
if [ -n "$FILES" ]; then
echo "Found files with invalid file extensions:\n\n$FILES"
exit 1
fi
- name: Restore node_modules (cache hit)
id: node-modules-cache
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: node_modules
key: node-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}-${{ hashFiles('package.json') }}
- name: Install node_modules (cache miss)
run: npm ci
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- name: Post codeowners comment
run: npx tsx bin/post-codeowners-comment/index.ts
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check Astro and CF Worker
run: npm run check
- name: Run eslint
uses: reviewdog/action-eslint@556a3fdaf8b4201d4d74d406013386aa4f7dab96 # v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
fail_level: error
filter_mode: nofilter
- name: Check formatting (js,jsx,ts,tsx,mjs,css)
run: npm run format:core:check
- name: Validate redirects
run: npx tsm bin/validate-redirects.ts
- name: Tests
run: npm run test:prebuild
build:
name: Build
needs: pre-build
runs-on: ubuntu-latest
outputs:
link_check_failed: ${{ steps.check_link_result.outputs.failed }}
permissions:
contents: read
pull-requests: write
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 1
- name: Set up node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: 24.x
cache: npm
- name: Restore node_modules (cache hit)
id: node-modules-cache
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: node_modules
key: node-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}-${{ hashFiles('package.json') }}
- name: Install node_modules (cache miss)
run: npm ci
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- name: Restore Astro assets from cache
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: |
node_modules/.astro/assets
key: astro-assets-${{ hashFiles('src/assets/**') }}
restore-keys: |
astro-assets-
# The starlight-links-validator plugin runs in astro:build:done, which fires
# AFTER all pages have been written to dist/. If link validation fails, the
# build exits non-zero but dist/ is complete. We use continue-on-error so the
# job succeeds (allowing deploy + post-build to run), then check the outcome below.
# We capture build output with tee so we can grep it to distinguish link-check
# failures from real build failures.
- name: Build
id: build_step
continue-on-error: true
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RUN_LINK_CHECK: true
run: |
set -o pipefail
npm run build 2>&1 | tee /tmp/build-output.log
# Distinguish between "link check failed" and "real build failure" by grepping
# the captured build output for the link validator's specific error message.
# The link validator runs in astro:build:done (after all pages are written to
# dist/), so its error string can only appear when the build itself completed.
# Any other failure — including partial builds with a non-empty dist/ — will
# not contain that string and will correctly fail here.
- name: Check build result
id: check_link_result
shell: bash
run: |
if [ "${{ steps.build_step.outcome }}" = "success" ]; then
echo "failed=false" >> "$GITHUB_OUTPUT"
exit 0
fi
# Build failed. Was it only the link validator?
if grep -q "Links validation failed" /tmp/build-output.log; then
echo "failed=true" >> "$GITHUB_OUTPUT"
echo "::warning::Build succeeded but link validation failed. Preview will still be deployed."
else
echo "::error::Build failed for a reason other than link validation. Check the Build step logs."
exit 1
fi
- name: Upload artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
with:
name: dist
path: dist
post-build:
name: Post Build
needs: build
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 1
- name: Set up node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: 24.x
cache: npm
- name: Restore node_modules (cache hit)
id: node-modules-cache
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: node_modules
key: node-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}-${{ hashFiles('package.json') }}
- name: Install node_modules (cache miss)
run: npm ci
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- name: Download artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: dist
path: dist
- name: Tests (Workers)
run: npm run test:postbuild
- name: Link validation
if: needs.build.outputs.link_check_failed == 'true'
run: |
echo "::error::starlight-links-validator found broken internal links during the build. See the Build job logs for details."
exit 1
notify:
name: Notify
needs: [pre-build, build, post-build]
if: always()
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 1
- name: Set up node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: 24.x
cache: npm
- name: Restore node_modules (cache hit)
id: node-modules-cache
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: node_modules
key: node-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}-${{ hashFiles('package.json') }}
- name: Install node_modules (cache miss)
run: npm ci
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- name: Post PR CI failure comment
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx tsx bin/post-pr-ci-failure-comment/index.ts
publish-preview:
name: Deploy Preview
needs: build
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 1
- name: Set up node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: 24.x
cache: npm
- name: Restore node_modules (cache hit)
id: node-modules-cache
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: node_modules
key: node-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}-${{ hashFiles('package.json') }}
- name: Install node_modules (cache miss)
run: npm ci
if: steps.node-modules-cache.outputs.cache-hit != 'true'
- name: Download artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: dist
path: dist
- name: Deploy to Cloudflare Workers
id: deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
run: |
SHORT_SHA="${PR_HEAD_SHA:0:8}"
BRANCH_SLUG=$(echo "$PR_HEAD_REF" | iconv -c -t ascii//TRANSLIT | sed -E 's/[~^]+//g' | sed -E 's/[^a-zA-Z0-9]+/-/g' | sed -E 's/^-+|-+$//g' | tr A-Z a-z)
echo "branch_slug=$BRANCH_SLUG" >> "$GITHUB_OUTPUT"
npx wrangler deploy --dispatch-namespace preview-deployments --name $SHORT_SHA
npx wrangler deploy --dispatch-namespace preview-deployments --name $BRANCH_SLUG
- name: Post preview URL on PR
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_SLUG: ${{ steps.deploy.outputs.branch_slug }}
run: npx tsx bin/post-preview-url-comment/index.ts
continue-on-error: true