mirror of
https://github.com/different-ai/openwork
synced 2026-04-26 01:25:10 +02:00
Extends the unused file detection script with sibling repo CI/CD cross-referencing, expanded infra coverage (build configs, tsconfig, docker-compose, .opencode skills), progress indicator, two-bucket output display, and smart generic filename filtering. Handles standalone openwork without factory layout gracefully — auto-detects whether _repos/ exists and skips sibling checks if not.
62 lines
2.8 KiB
Markdown
62 lines
2.8 KiB
Markdown
# find-unused.sh
|
|
|
|
Wrapper around [knip](https://knip.dev) that detects unused files and cross-references them against CI configs, build configs, package.json scripts, tsconfig files, convention-based usage, file-based routing directories, and sibling repo CI/CD pipelines to reduce false positives.
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
bash scripts/find-unused.sh
|
|
```
|
|
|
|
Requires `npx` (knip is fetched automatically). A fake `DATABASE_URL` is injected so config resolution doesn't fail.
|
|
|
|
The script auto-detects whether it's running inside a factory layout (`../../.._repos/`). When inside a factory, it cross-references sibling repos. When standalone, it skips sibling checks gracefully and still runs all internal checks.
|
|
|
|
## What it does
|
|
|
|
1. **Runs `knip --include files`** to get a list of unused files across the monorepo.
|
|
2. **Indexes infra files** — collects all build/config/CI files into a single searchable set:
|
|
- GitHub workflow YAMLs
|
|
- Dockerfiles and docker-compose files
|
|
- Deployment configs (Vercel, Tauri)
|
|
- Build tool configs (vite, tailwind, postcss, next, drizzle, tsup, playwright)
|
|
- Build scripts (`.mjs`, `.ts`, `.sh` across all workspaces)
|
|
- `.opencode` skill scripts
|
|
- All `package.json` files (for script references)
|
|
- All `tsconfig*.json` files (for path aliases and includes)
|
|
3. **Cross-references** each file against:
|
|
- **Internal infra** — all indexed config/build files, searching by filename and relative path
|
|
- **Convention patterns** — filenames like `postinstall`, `drizzle.config`, Tauri hooks
|
|
- **File-based routing dirs** — Next.js server routes, app routes, and API routes that are entry points by convention
|
|
- **Sibling repo CI/CD** — workflows, Dockerfiles, and build scripts in sibling repos and factory-level CI, with smart filtering to avoid false positives on generic filenames (e.g., `index`, `utils`, `config`)
|
|
4. **Displays results in two buckets** (oldest first within each):
|
|
- `✗` **Safe to remove** — no references found anywhere (red)
|
|
- `⚠` **Review before removing** — referenced in infra/CI (yellow) or sibling CI (cyan)
|
|
|
|
A progress indicator shows the current file being checked during cross-referencing.
|
|
|
|
Certain paths are ignored entirely (scripts, dev tools) — see the `IGNORE_PREFIXES` array in the script.
|
|
|
|
## Using knip directly
|
|
|
|
The script only checks for unused **files**. Knip can detect much more — run it directly for deeper analysis:
|
|
|
|
```bash
|
|
# Unused exports (functions, types, constants)
|
|
npx knip --include exports
|
|
|
|
# Unused dependencies in package.json
|
|
npx knip --include dependencies
|
|
|
|
# Everything at once
|
|
npx knip
|
|
|
|
# Scope to a single workspace
|
|
npx knip --workspace apps/app
|
|
|
|
# Auto-fix removable issues (careful — modifies files)
|
|
npx knip --fix
|
|
```
|
|
|
|
See the [knip docs](https://knip.dev) for the full set of options.
|