Skip to content

fix(extract): record JSX namespace member tags as member accesses #3258

fix(extract): record JSX namespace member tags as member accesses

fix(extract): record JSX namespace member tags as member accesses #3258

Workflow file for this run

name: Ecosystem CI
on:
push:
branches: [main]
paths:
- 'crates/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'rust-toolchain.toml'
- 'tests/ecosystem/**'
- '.github/workflows/ecosystem.yml'
pull_request:
branches: [main]
paths:
- 'crates/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'rust-toolchain.toml'
- 'tests/ecosystem/**'
- '.github/workflows/ecosystem.yml'
workflow_dispatch:
concurrency:
group: ecosystem-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
permissions: {}
env:
CARGO_TERM_COLOR: always
FALLOW_QUIET: "1"
jobs:
ecosystem:
name: Ecosystem (${{ matrix.project.name }})
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
project:
- name: vite
repo: vitejs/vite
ref: main
path: packages/vite
- name: create-t3-app
repo: t3-oss/create-t3-app
ref: main
path: cli
- name: next.js-with-typescript
repo: vercel/next.js
ref: canary
path: examples/with-typescript
sparse: examples/with-typescript
- name: sveltekit-template
repo: sveltejs/kit
ref: main
path: packages/create-svelte/templates/default
- name: remix-indie-stack
repo: remix-run/indie-stack
ref: main
path: .
steps:
- name: Checkout fallow
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: ./.github/actions/setup-rust
with:
cache-key: ecosystem
- name: Build fallow (release)
run: cargo build --release -p fallow-cli
- name: Clone target project
env:
PROJECT_REPO: ${{ matrix.project.repo }}
PROJECT_REF: ${{ matrix.project.ref }}
PROJECT_SPARSE: ${{ matrix.project.sparse }}
run: |
# Five third-party repositories are cloned per run, which makes
# transient network and TLS errors the dominant failure mode. The
# analysis step below is deliberately non-gating, so a blip while
# fetching someone else's repository should not be the one thing
# that turns this workflow red.
clone_project() {
if [ -n "$PROJECT_SPARSE" ]; then
git clone --depth 1 --filter=blob:none --sparse \
--branch "$PROJECT_REF" \
"https://github.com/$PROJECT_REPO.git" \
ecosystem-project
else
git clone --depth 1 \
--branch "$PROJECT_REF" \
"https://github.com/$PROJECT_REPO.git" \
ecosystem-project
fi
}
for attempt in 1 2 3; do
if clone_project; then
break
fi
if [ "$attempt" -eq 3 ]; then
echo "::error::could not clone $PROJECT_REPO after $attempt attempts"
exit 1
fi
echo "clone attempt $attempt failed, retrying"
rm -rf ecosystem-project
sleep "$((attempt * 15))"
done
if [ -n "$PROJECT_SPARSE" ]; then
cd ecosystem-project
git sparse-checkout set "$PROJECT_SPARSE"
fi
- name: Run fallow dead-code
# Never fail the workflow — this is for monitoring, not gating
continue-on-error: true
env:
PROJECT_NAME: ${{ matrix.project.name }}
PROJECT_PATH: ${{ matrix.project.path }}
run: |
cd "ecosystem-project/$PROJECT_PATH"
"$GITHUB_WORKSPACE/target/release/fallow" dead-code --format json \
> "$GITHUB_WORKSPACE/ecosystem-$PROJECT_NAME.json" 2>&1 || true
- name: Upload results
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ecosystem-${{ matrix.project.name }}
path: ecosystem-${{ matrix.project.name }}.json
retention-days: 30