You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CONTRIBUTING.md edits (targeted, preserve existing structure):
- Add Java 17 baseline section near top — explicit list of Java
21+ APIs / language features to avoid (List.getFirst/getLast,
Thread.threadId, switch type/deconstruction patterns,
case null+default, List.reversed) so contributors don't get
surprised by Linux CI on JDK 17.
- Update branch-naming hint to also accept issue-prefixed names
like 42/fix/short-description.
- Refresh "Required CI checks" list to reflect post-v1.6 reality:
JDK 17/21/25 matrix on Build and run tests, plus the new
Examples Generation Smoke Test and the PR-only Performance
Smoke Check.
- Rewrite the Release flow subsection so it matches what
cut-release.ps1 actually does today: bumps in *all three*
POMs (root + examples + benchmarks), README install snippets
intentionally pinned to the previously published tag until
JitPack BUILD SUCCESS confirms the new build, tag from
develop (not main), post-release commit flips snippets after
the publish window closes.
- Replace dead test references (BuiltInTemplateRenderTest,
CvTemplateV1LayoutSnapshotTest — both deleted with Templates
v2 in v1.6.0) with the v2 PresetVisualParityTest /
PresetLayoutSnapshotTest pair.
- Drop reference to LivePreviewProvider (file no longer in tree).
New files (OSS-standard, missing until now):
- .github/pull_request_template.md — checklist a contributor sees
on every "New PR" page: targets develop, branch convention,
Java 17 compat, CHANGELOG entry hint, README guard reminder,
examples gallery row count.
- .github/ISSUE_TEMPLATE/bug_report.md — repro template with
canonical API skeleton + environment block.
- .github/ISSUE_TEMPLATE/feature_request.md — use case +
proposed API + ADR-worthy gate.
- CODE_OF_CONDUCT.md — Contributor Covenant 2.1 verbatim with
the maintainer email pointed at the published gmail in pom.xml.
Local verification:
- ./mvnw -B -ntp test -Dtest='CanonicalSurfaceGuardTest,DocumentationCoverageTest,DocumentationExamplesTest' → 25/0/0/0
<!-- Workarounds you've tried, related issues, prior art in iText / JasperReports / openhtmltopdf, etc. -->
28
+
29
+
## Would this be a breaking change?
30
+
31
+
-[ ] No — additive only (new node, new builder method, new template preset).
32
+
-[ ] Possibly — affects public-record shape, deprecates an existing API, or changes default rendering behaviour.
33
+
34
+
## Optional: ADR-worthy?
35
+
36
+
If this is a structural change (sealed hierarchy, new sub-package, new SPI), please describe the architectural impact briefly. The maintainer may ask for a draft ADR under `docs/adr/` before implementation.
<!-- 1–3 sentences: what changed and why. Reference any related issue. -->
4
+
5
+
## Type of change
6
+
7
+
-[ ] Bug fix (no public API change)
8
+
-[ ] New feature / public API addition
9
+
-[ ] Documentation only
10
+
-[ ] CI / build / tooling
11
+
-[ ] Refactor (no behavioural change)
12
+
13
+
## Checklist
14
+
15
+
-[ ]**PR targets `develop`** (the integration branch); **not `main`**.
16
+
-[ ] Branch name follows `<type>/<short-description>` (e.g. `feature/canvas-clip`, `fix/table-overflow`, `docs/recipe-themes`); issue-prefixed names like `42/fix/short-description` are also fine.
17
+
-[ ]`./mvnw -B -ntp clean verify` passes locally.
18
+
-[ ]**Java 17 compatible**— no `List.getFirst()` / `getLast()`, no `Thread.threadId()`, no switch type / deconstruction patterns, no `case null, default ->`. CI matrices Temurin 17 / 21 / 25 and will catch JDK regressions.
19
+
-[ ]**Public API change** (if any): `CHANGELOG.md` entry added under the next `## v<X.Y.Z> — Planned` heading.
-[ ]**Examples touched** (if any): runnable via `./mvnw -f examples/pom.xml exec:java -Dexec.mainClass=…`; if a new example, also added to `GenerateAllExamples` and the gallery row count in `examples/README.md`.
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+31-11Lines changed: 31 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,6 +13,19 @@ Read these files first:
13
13
14
14
They explain the current public surface, the engine/template split, and the recommended extension points.
15
15
16
+
## Java 17 baseline
17
+
18
+
GraphCompose targets **Java 17+** as of v1.6.1. CI runs the full test suite against Temurin JDK 17 / 21 / 25 in parallel matrix, so JDK-incompatibility regressions fail the PR immediately.
19
+
20
+
When writing new code, avoid Java 21+ APIs and language constructs that don't exist in 17:
Use `feature/...` for new functionality, `fix/...` for bug fixes, and `docs/...` for documentation-only changes.
49
+
Use `feature/...` for new functionality, `fix/...` for bug fixes, and `docs/...` for documentation-only changes. Issue-prefixed names (`42/fix/short-description`) are also welcome — convenient when the branch closes a specific issue.
37
50
3.**Commit small, focused changes.** Each commit message should describe the *why*, not just the *what*. Recent commits on `develop` (`Prepare v1.5.0 release`, `Align public docs with the canonical surface`) are reasonable length and structure templates.
38
51
4.**Run the validation gate locally** before opening a PR:
39
52
```bash
40
53
./mvnw -B -ntp clean verify
41
54
```
42
55
This runs the architecture-and-documentation guards plus the full test suite. The same gate runs in CI on every PR.
43
56
5.**Push** your feature branch to your fork and open a pull request against `develop` on `DemchaAV/GraphCompose`. Reference any related issue and describe the user-visible change in the PR body.
44
-
6.**CI runs automatically.** The required status checks are `Architecture and Documentation Guards` and `Build and run tests`. The PR cannot merge into a protected branch until both are green.
57
+
6.**CI runs automatically.** Active jobs:
58
+
-`Architecture and Documentation Guards`— fast canonical / engine-boundary guard tests, fail-first gate
59
+
-`Build and run tests (JDK 17)`, `(JDK 21)`, `(JDK 25)`— full `mvnw verify` in parallel matrix across the supported JVMs
60
+
-`Examples Generation Smoke Test`— regenerates all 26 runnable examples and uploads the PDFs as a CI artifact
61
+
-`Performance Smoke Check`— PR-only coarse benchmark to catch performance regressions
62
+
63
+
The PR cannot merge into a protected branch until all required checks are green.
45
64
7.**Address review comments**, then squash any fixup commits before merge. The maintainer merges through GitHub once review is complete.
1. Release prep lands on `develop`— version bump in `pom.xml` + `examples/pom.xml`, fresh CHANGELOG entry, README install snippets refreshed, migration guide updated when needed.
61
-
2.The maintainer merges `develop` into `main`via pull request — this is the only path a commit takes to reach `main`.
62
-
3.The maintainer tags the release on `main` (`vX.Y.Z`) and creates the GitHub release with notes copied from the matching `CHANGELOG.md` section.
63
-
4.JitPack picks up the new tag automatically; the `Installation` block in the README is the consumer-facing source of truth.
79
+
1.**Release prep** lands on `develop`— version bumps in `pom.xml`, `examples/pom.xml`, and `benchmarks/pom.xml`; fresh CHANGELOG entry; migration guide for minor releases. **README install snippets stay pinned to the previously published tag** (e.g. `v1.6.0`) until JitPack confirms the new build, otherwise consumers copying the snippet during the publish window hit a 404.
80
+
2.**`scripts/cut-release.ps1 -Version <X.Y.Z>`** automates the bump + CHANGELOG date + commit + tag + push from `develop`. The maintainer fast-forwards `main`from `develop` after the tag lands (`git push origin develop:main`).
81
+
3.**JitPack** picks up the new tag automatically. After JitPack reports `BUILD SUCCESS`, a separate post-release commit on `develop` flips the README install snippets to the new version.
82
+
4.**GitHub Release** is created with notes from the matching `CHANGELOG.md` section.
64
83
65
-
See [docs/release-process.md](./docs/release-process.md) for the full checklist.
84
+
See [docs/release-process.md](./docs/release-process.md) for the full checklist (audit gates, hotfix protocol, lessons learned).
66
85
67
86
## Repository map
68
87
@@ -95,7 +114,7 @@ See [docs/release-process.md](./docs/release-process.md) for the full checklist.
95
114
2. Keep structural cleanup separate from behavior changes whenever possible.
96
115
3. If you touch public examples or screenshots, update the related docs in the same change.
97
116
4. Run the smallest relevant tests while iterating, then run `./mvnw -B -ntp clean verify` before opening a pull request.
98
-
5. For quick visual iteration on a template, you can use the experimental live preview tool in test scope by running [GraphComposeDevTool.java](./src/test/java/com/demcha/compose/devtool/GraphComposeDevTool.java)and editing [LivePreviewProvider.java](./src/test/java/com/demcha/preview/LivePreviewProvider.java).
117
+
5. For quick visual iteration on a template, run [GraphComposeDevTool.java](./src/test/java/com/demcha/compose/devtool/GraphComposeDevTool.java)in test scope — it hot-reloads the rendered PDF as you edit your template source.
99
118
100
119
## Contributor architecture rules
101
120
@@ -286,9 +305,10 @@ Choose the smallest tests that match the change:
0 commit comments