diff --git a/src/content/docs/setup/bindings.md b/src/content/docs/setup/bindings.md index 6a3d5cb..d026751 100644 --- a/src/content/docs/setup/bindings.md +++ b/src/content/docs/setup/bindings.md @@ -18,6 +18,7 @@ this process or in a `docker run` container when `runtime:` is set. Per binding you can override: - the branch list +- path patterns (`frontend/**`; empty means every path) - the check name - the pipeline file path - the timeout diff --git a/src/content/docs/start/comparison.md b/src/content/docs/start/comparison.md index 5f9685c..76c755d 100644 --- a/src/content/docs/start/comparison.md +++ b/src/content/docs/start/comparison.md @@ -29,7 +29,8 @@ Bitbucket, and Forgejo. Pick Woodpecker if you want steps that are not install/test/build, matrix builds, artifacts between steps, more than one machine running jobs, or a forge -that is not GitHub. +that is not GitHub. A binding path filter here skips one Check Run when no +file matches; it is not a matrix of jobs per directory. Pick openpreflight if the server-plus-agent split is more than you want to run for a handful of private repos, and a Check Run that says pass or fail with diff --git a/src/content/docs/start/configuration.md b/src/content/docs/start/configuration.md index 3e60859..ef75d00 100644 --- a/src/content/docs/start/configuration.md +++ b/src/content/docs/start/configuration.md @@ -81,10 +81,11 @@ Single row, `id = 1`. Changed from **Settings** in the UI or Per repo, highest first at run time: **binding → App → settings**. -A binding can override branches, check name, pipeline file, timeout, -install/test/build commands, and whether logs are shareable. The bindings -table is itself the allow-list: a signed webhook for a repo with no enabled -binding is dropped. +A binding can override branches, paths, check name, pipeline file, timeout, +install/test/build commands, and whether logs are shareable. Empty paths means +every path. A complete file list with no match skips (Check Run `skipped`) +before clone. The bindings table is itself the allow-list: a signed webhook for +a repo with no enabled binding is dropped. ## Pipeline file diff --git a/src/content/docs/start/faq.md b/src/content/docs/start/faq.md index d83dd06..5d7dc28 100644 --- a/src/content/docs/start/faq.md +++ b/src/content/docs/start/faq.md @@ -71,19 +71,14 @@ try it, an issue saying which version and what broke is useful. ## Does it work for monorepos? -It runs, but it will run everything on every push. - -There is no path filter. A binding matches a repo and optionally a branch list -(exact names, or a `release/*` prefix), and that is the whole filter. A commit -touching one directory runs the same `install`, `test`, and `build` as a commit -touching all of them. - -A plan is also exactly three steps in a fixed order, so the usual monorepo -answer (one job per affected package, in parallel) has nothing to express -itself with. Combined with `max_concurrent_jobs` defaulting to 1, a busy -monorepo is the case this is worst at. Do the path filtering inside your own -`test` command, or use a tool built for it; see -[Comparison](/start/comparison/). +A binding can list path patterns (`frontend/**`, comma or newline). Empty +paths is every path, as before. When the file list for the SHA is complete +and nothing matches, the job is **skipped** (Check Run conclusion `skipped`) +before clone, so required checks do not hang. If GitHub truncates the list +(300 files) or the commits API errors, the job still runs. + +It is still one job and three steps, not a matrix of jobs per directory. +Woodpecker still wins for fan-out; see [Comparison](/start/comparison/). ## Does the project use itself for CI? diff --git a/src/content/docs/using/api.md b/src/content/docs/using/api.md index 91bd59b..bd6f51d 100644 --- a/src/content/docs/using/api.md +++ b/src/content/docs/using/api.md @@ -58,7 +58,7 @@ aliases that mirror `PATCH` / `DELETE` for the HTML UI are omitted. | Method | Path | Purpose | |---|---|---| | `GET` | `/api/v1/bindings` | List bindings | -| `PUT` | `/api/v1/bindings` | Upsert one repo binding | +| `PUT` | `/api/v1/bindings` | Upsert one repo binding (`paths` optional) | | `POST` | `/api/v1/bindings/bulk` | Picker checkboxes | | `POST` | `/api/v1/bindings/{id}/toggle` | Enable / disable | | `DELETE` | `/api/v1/bindings/{id}` | Remove binding |