diff --git a/Jenkinsfile b/Jenkinsfile index ef53ee8..9a9190d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,8 +9,9 @@ // from the agent's environment (ARCHIVE_PC_REPO / ARCHIVE_QUEST_REPO), each // overridable per run. A build is picked by snapshot tags. // -// On a push, only the platforms whose code changed are rebuilt. A manual run -// picks the platforms with PLATFORMS. See ci/jenkins/README.md. +// A push builds only the platforms whose client code changed (never for +// docs or CI-only changes). A manual run picks the platforms with PLATFORMS. +// See ci/jenkins/README.md. // // Finished builds are renamed for players and published to the downloads bucket // (ci/downloads) unless PUBLISH_DOWNLOADS is off. The build scripts keep their @@ -76,10 +77,15 @@ pipeline { for (cs in currentBuild.changeSets) { for (entry in cs.items) changed.addAll(entry.affectedPaths) } - def touches = { prefixes -> changed.any { p -> prefixes.any { p.startsWith(it) } } } - def common = ['Jenkinsfile', 'ci/jenkins/'] - buildPc = touches(common + ['DorkNet.ClientMod/', 'tools/build_pc.py']) - buildQuest = touches(common + ['DorkNet.Quest/']) + // Only client-facing changes rebuild (and so republish) a + // platform; Markdown doesn't count. The job's Git path filter + // uses the same paths, so other pushes don't start a run at all. + // A CI-only change (Jenkinsfile, ci/) takes a manual run. + def touches = { prefixes -> + changed.any { p -> !p.toLowerCase().endsWith('.md') && prefixes.any { p.startsWith(it) } } + } + buildPc = touches(['DorkNet.ClientMod/', 'tools/build_pc.py']) + buildQuest = touches(['DorkNet.Quest/']) echo "Push build; ${changed.size()} changed file(s)" } else { buildPc = params.PLATFORMS in ['both', 'pc'] diff --git a/ci/jenkins/README.md b/ci/jenkins/README.md index 0540fec..7d27eb7 100644 --- a/ci/jenkins/README.md +++ b/ci/jenkins/README.md @@ -60,10 +60,18 @@ Resolve a table for another build locally with `build.py build --dump-cs`. ## Triggers -- **Push** to the branch (GitHub webhook) rebuilds only what changed: - - `DorkNet.ClientMod/` and the PC scripts rebuild PC; +- **Push** to the branch (GitHub webhook) builds only for client-facing + changes, and only the platform they touch: + - `DorkNet.ClientMod/` and `tools/build_pc.py` rebuild PC; - `DorkNet.Quest/` rebuilds Quest; - - `Jenkinsfile` and `ci/jenkins/` rebuild both. + - Markdown files never count; server, docs and CI-only pushes (including + the `Jenkinsfile` and `ci/`) build nothing. Run those manually. + + Set the same filter on the job so other pushes don't start a run at all: + under the job's **Git** source, add **Additional Behaviours → Polling + ignores commits in certain paths** with included regions + `DorkNet[.]ClientMod/.*`, `DorkNet[.]Quest/.*`, `tools/build_pc[.]py` (one + per line) and excluded region `.*[.]md`. - **Build with Parameters** runs a manual build: - `PLATFORMS` (both / pc / quest), and `PC_FULL_CLIENT` for the full PC client; - snapshot tags, and per-run repository overrides;