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
docs: join broken sentences (one sentence per line)
Join lines where a single sentence was broken across multiple lines.
Per Plone style, each sentence should be exactly one line for clean
diffs. Also fix code blocks in write-custom-templates.md that were
incorrectly joined, and restore admonition formatting.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/sources/explanation/architecture.md
+11-25Lines changed: 11 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,9 +14,7 @@ myst:
14
14
## Overview
15
15
16
16
plone.meta is a code generation tool.
17
-
It reads per-repository configuration
18
-
from {file}`.meta.toml`, renders Jinja2 templates, validates the output, and
19
-
manages git operations.
17
+
It reads per-repository configuration from {file}`.meta.toml`, renders Jinja2 templates, validates the output, and manages git operations.
20
18
21
19
## Components
22
20
@@ -26,17 +24,13 @@ The core of plone.meta is a set of Jinja2 templates stored in
26
24
{file}`src/plone/meta/default/`.
27
25
Each template corresponds to a configuration file in the target repository.
28
26
29
-
Templates use `%(variable)s` style placeholders (Python string formatting
30
-
syntax within the Jinja2 context) for inserting configuration values.
31
-
The template engine has `trim_blocks` and `lstrip_blocks` enabled for clean
32
-
output, and `keep_trailing_newline` preserves proper file endings.
27
+
Templates use `%(variable)s` style placeholders (Python string formatting syntax within the Jinja2 context) for inserting configuration values.
28
+
The template engine has `trim_blocks` and `lstrip_blocks` enabled for clean output, and `keep_trailing_newline` preserves proper file endings.
33
29
34
30
#### Modular tox templates
35
31
36
-
The {file}`tox.ini.j2` template uses a modular architecture with Jinja2
37
-
`{% include %}` directives.
38
-
Rather than a single monolithic template, the tox configuration is composed
39
-
from focused sub-templates:
32
+
The {file}`tox.ini.j2` template uses a modular architecture with Jinja2 `{% include %}` directives.
33
+
Rather than a single monolithic template, the tox configuration is composed from focused sub-templates:
40
34
41
35
- {file}`tox-init.j2` -- tox initialization and configuration header
42
36
- {file}`tox-base.j2` -- base test environment definition
@@ -49,8 +43,7 @@ This modular structure makes the templates easier to maintain and extend.
49
43
50
44
### PackageConfiguration class
51
45
52
-
The {file}`config_package.py` module contains the `PackageConfiguration` class,
53
-
which orchestrates the entire process:
46
+
The {file}`config_package.py` module contains the `PackageConfiguration` class, which orchestrates the entire process:
54
47
55
48
1.**Read** {file}`.meta.toml` from the target repository
56
49
2.**Detect** whether the repository is GitHub or GitLab hosted
@@ -82,15 +75,11 @@ If validation fails, you are prompted to proceed or abort.
82
75
2. Commits all changes with a descriptive message
83
76
3. Optionally pushes to the remote
84
77
85
-
Branch names follow the pattern `config-with-<type>-template-<commit-hash>`,
86
-
where the commit hash refers to the plone.meta repository, making it clear
87
-
which version of the templates was used.
78
+
Branch names follow the pattern `config-with-<type>-template-<commit-hash>`, where the commit hash refers to the plone.meta repository, making it clear which version of the templates was used.
88
79
89
80
## GitHub Actions workflow architecture
90
81
91
-
Rather than generating complete CI workflows inline, plone.meta generates
92
-
a thin {file}`meta.yml` that uses GitHub's `workflow_call` to reference reusable
93
-
workflows stored in the plone/meta repository itself.
82
+
Rather than generating complete CI workflows inline, plone.meta generates a thin {file}`meta.yml` that uses GitHub's `workflow_call` to reference reusable workflows stored in the plone/meta repository itself.
94
83
This means:
95
84
96
85
- Workflow logic is maintained in one place
@@ -101,10 +90,8 @@ This means:
101
90
## Test matrix
102
91
103
92
A key architectural feature of plone.meta 2.x is the test matrix.
104
-
Rather than testing against a single Python version, plone.meta generates
105
-
test environments for all combinations of Plone versions and Python versions.
106
-
The default matrix covers Plone 6.0, 6.1, and 6.2 across Python 3.10
107
-
through 3.14.
93
+
Rather than testing against a single Python version, plone.meta generates test environments for all combinations of Plone versions and Python versions.
94
+
The default matrix covers Plone 6.0, 6.1, and 6.2 across Python 3.10 through 3.14.
108
95
109
96
The test matrix is reflected in multiple generated outputs:
110
97
@@ -114,8 +101,7 @@ The test matrix is reflected in multiple generated outputs:
114
101
matrix combinations in CI
115
102
-**GitLab CI**: Matrix jobs are generated in {file}`.gitlab-ci.yml`
116
103
117
-
Each combination uses its own constraints file, allowing different Plone
118
-
versions to pin different dependency versions.
104
+
Each combination uses its own constraints file, allowing different Plone versions to pin different dependency versions.
Copy file name to clipboardExpand all lines: docs/sources/explanation/configuration-philosophy.md
+8-19Lines changed: 8 additions & 19 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,10 +20,8 @@ plone.meta is designed around two principles:
20
20
21
21
## The extra_lines approach
22
22
23
-
Rather than adding a configuration option for every possible customization,
24
-
almost all generated files support an `extra_lines` key in {file}`.meta.toml`.
25
-
This key accepts raw configuration text that is appended to the generated
26
-
file.
23
+
Rather than adding a configuration option for every possible customization, almost all generated files support an `extra_lines` key in {file}`.meta.toml`.
24
+
This key accepts raw configuration text that is appended to the generated file.
27
25
28
26
This approach has several advantages:
29
27
@@ -33,33 +31,24 @@ This approach has several advantages:
33
31
-**Low maintenance:** New configuration options in tools (flake8, tox,
34
32
isort, etc.) do not require changes to plone.meta itself.
35
33
36
-
The tradeoff is that `extra_lines` content is not validated against the
37
-
template -- it is simply appended.
38
-
But this is intentional: it keeps the tool simple and avoids becoming a
39
-
configuration management framework.
34
+
The tradeoff is that `extra_lines` content is not validated against the template -- it is simply appended.
35
+
But this is intentional: it keeps the tool simple and avoids becoming a configuration management framework.
40
36
41
37
## When extra_lines is not enough
42
38
43
-
For cases where appending text is insufficient -- where the configuration
44
-
needs to *change* the template output rather than extend it -- plone.meta
45
-
provides specific configuration keys. Examples:
39
+
For cases where appending text is insufficient -- where the configuration needs to *change* the template output rather than extend it -- plone.meta provides specific configuration keys. Examples:
46
40
47
41
-`test_runner` to switch between pytest and zope.testrunner
48
42
-`constraints_file` to override the default pip constraints URL
49
43
-`custom_image` to change the GitLab CI Docker image
If you need a customization that plone.meta does not support, you can [request it](https://github.com/plone/meta/issues/new).
56
48
57
49
## Don't edit generated files
58
50
59
-
This is the cardinal rule of plone.meta: **never directly edit the files
60
-
that plone.meta manages.**
61
-
Any changes will be overwritten the next time `config-package` runs.
51
+
This is the cardinal rule of plone.meta: **never directly edit the files that plone.meta manages.** Any changes will be overwritten the next time `config-package` runs.
62
52
63
53
All customization goes through {file}`.meta.toml`.
64
-
This single file captures the complete delta between the defaults and your
65
-
repository's needs, making it easy to review, maintain, and update.
54
+
This single file captures the complete delta between the defaults and your repository's needs, making it easy to review, maintain, and update.
Copy file name to clipboardExpand all lines: docs/sources/explanation/index.md
+3-6Lines changed: 3 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,24 +21,21 @@ These pages help you understand *why* plone.meta works the way it does.
21
21
:link: why-standardize
22
22
:link-type: doc
23
23
24
-
The motivation behind plone.meta: what problems it solves, what it replaces,
25
-
and why centralized configuration management matters for the Plone ecosystem.
24
+
The motivation behind plone.meta: what problems it solves, what it replaces, and why centralized configuration management matters for the Plone ecosystem.
26
25
:::
27
26
28
27
:::{grid-item-card} Architecture
29
28
:link: architecture
30
29
:link-type: doc
31
30
32
-
How plone.meta works internally: template rendering, file generation,
33
-
validation, and the git workflow.
31
+
How plone.meta works internally: template rendering, file generation, validation, and the git workflow.
34
32
:::
35
33
36
34
:::{grid-item-card} Configuration Philosophy
37
35
:link: configuration-philosophy
38
36
:link-type: doc
39
37
40
-
The design principles behind the `extra_lines` approach: sane defaults
41
-
with simple extensibility.
38
+
The design principles behind the `extra_lines` approach: sane defaults with simple extensibility.
Copy file name to clipboardExpand all lines: docs/sources/explanation/scope.md
+7-20Lines changed: 7 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,8 +13,7 @@ myst:
13
13
14
14
## What plone.meta covers
15
15
16
-
plone.meta manages configuration files for **single-package Python
17
-
repositories** in the Plone ecosystem.
16
+
plone.meta manages configuration files for **single-package Python repositories** in the Plone ecosystem.
18
17
This includes:
19
18
20
19
- Development tool configuration (linting, formatting, editor settings)
@@ -28,38 +27,26 @@ This includes:
28
27
29
28
### JavaScript and frontend projects
30
29
31
-
Volto and other JavaScript-based projects have their own ecosystem with
32
-
different tooling (ESLint, Prettier, Jest, etc.).
30
+
Volto and other JavaScript-based projects have their own ecosystem with different tooling (ESLint, Prettier, Jest, etc.).
33
31
plone.meta is strictly for Python projects.
34
32
35
33
### Monorepo projects
36
34
37
-
Repositories with both backend and frontend code bases -- such as those
38
-
created by [Cookieplone](https://github.com/plone/cookieplone) -- are
39
-
not supported.
35
+
Repositories with both backend and frontend code bases -- such as those created by [Cookieplone](https://github.com/plone/cookieplone) -- are not supported.
40
36
plone.meta expects a single Python package at the top level of the repository.
41
37
42
38
### Multi-version support
43
39
44
-
plone.meta allows testing against multiple Plone versions via the
45
-
`test_matrix` configuration.
46
-
However, it does not support maintaining
47
-
entirely separate dependency sets or build configurations for different
48
-
major Plone versions within a single branch.
40
+
plone.meta allows testing against multiple Plone versions via the `test_matrix` configuration.
41
+
However, it does not support maintaining entirely separate dependency sets or build configurations for different major Plone versions within a single branch.
49
42
50
43
### Package scaffolding
51
44
52
45
plone.meta does not create new packages.
53
46
It configures existing ones.
54
-
For creating new Plone packages, use
55
-
[Cookieplone](https://github.com/plone/cookieplone) or
56
-
[plonecli](https://pypi.org/project/plonecli/).
47
+
For creating new Plone packages, use [Cookieplone](https://github.com/plone/cookieplone) or [plonecli](https://pypi.org/project/plonecli/).
57
48
58
49
### Custom CI logic
59
50
60
51
plone.meta generates standardized CI pipelines.
61
-
If your package needs
62
-
significantly custom CI logic (custom Docker builds, deployment steps,
63
-
integration tests with external services), you can extend via `extra_lines`,
64
-
but at some point it may make more sense to maintain CI configuration
65
-
manually.
52
+
If your package needs significantly custom CI logic (custom Docker builds, deployment steps, integration tests with external services), you can extend via `extra_lines`, but at some point it may make more sense to maintain CI configuration manually.
Copy file name to clipboardExpand all lines: docs/sources/explanation/why-standardize.md
+8-18Lines changed: 8 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,8 +13,7 @@ myst:
13
13
14
14
## The problem
15
15
16
-
The Plone ecosystem consists of over 100 Python packages, each maintained by
17
-
different people at different times.
16
+
The Plone ecosystem consists of over 100 Python packages, each maintained by different people at different times.
18
17
Without coordination, each repository develops its own approach to:
19
18
20
19
- Test configuration and runners
@@ -25,15 +24,12 @@ Without coordination, each repository develops its own approach to:
25
24
- Release processes
26
25
27
26
This leads to fragmentation.
28
-
A developer picking up a new package has to figure out from scratch how to
29
-
run tests, what formatting rules apply, and whether the CI pipeline is current.
30
-
Contributions become harder because the answer to "how do I run the tests?"
31
-
differs for every package.
27
+
A developer picking up a new package has to figure out from scratch how to run tests, what formatting rules apply, and whether the CI pipeline is current.
28
+
Contributions become harder because the answer to "how do I run the tests?" differs for every package.
32
29
33
30
## What plone.meta solves
34
31
35
-
By using plone.meta, every Plone package answers the same set of questions
36
-
in the same way:
32
+
By using plone.meta, every Plone package answers the same set of questions in the same way:
37
33
38
34
-**Do the tests pass?**`tox -e test`
39
35
-**What's the test coverage?**`tox -e coverage`
@@ -51,12 +47,9 @@ Tooling evolves.
51
47
Linting rules change.
52
48
New Python versions are released.
53
49
CI providers update their APIs.
54
-
Without centralization, updating 100+
55
-
repositories is impractical -- each one needs manual changes, review, and
56
-
testing.
50
+
Without centralization, updating 100+ repositories is impractical -- each one needs manual changes, review, and testing.
57
51
58
-
With plone.meta, a tooling update happens in one place (the templates),
59
-
and is then rolled out to all packages via `config-package` or `multi-call`.
52
+
With plone.meta, a tooling update happens in one place (the templates), and is then rolled out to all packages via `config-package` or `multi-call`.
60
53
This makes it practical to:
61
54
62
55
- Adopt new tools (e.g., switching formatters)
@@ -65,8 +58,5 @@ This makes it practical to:
65
58
66
59
## Adoption
67
60
68
-
plone.meta is mandatory for repositories under the
Copy file name to clipboardExpand all lines: docs/sources/how-to/configure-github-actions.md
+6-15Lines changed: 6 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,8 +11,7 @@ myst:
11
11
12
12
<!-- diataxis: how-to -->
13
13
14
-
`plone.meta` generates a {file}`.github/workflows/meta.yml` file that references
15
-
reusable workflows from the plone/meta repository.
14
+
`plone.meta` generates a {file}`.github/workflows/meta.yml` file that references reusable workflows from the plone/meta repository.
16
15
17
16
## Select CI jobs
18
17
@@ -30,9 +29,7 @@ jobs = [
30
29
```
31
30
32
31
:::{note}
33
-
The `"test"` job is no longer included in the default jobs list. Testing
34
-
is now handled by the separate {file}`test-matrix.yml` workflow, which is
35
-
generated automatically when `use_test_matrix` is enabled (the default).
32
+
The `"test"` job is no longer included in the default jobs list. Testing is now handled by the separate {file}`test-matrix.yml` workflow, which is generated automatically when `use_test_matrix` is enabled (the default).
When `use_test_matrix` is enabled (the default), plone.meta generates a
105
-
separate {file}`test-matrix.yml` workflow that tests all combinations of Plone
106
-
versions and Python versions.
100
+
When `use_test_matrix` is enabled (the default), plone.meta generates a separate {file}`test-matrix.yml` workflow that tests all combinations of Plone versions and Python versions.
Using `"*"` as shorthand includes all currently supported Python versions
118
-
for a given Plone version:
111
+
Using `"*"` as shorthand includes all currently supported Python versions for a given Plone version:
119
112
120
113
```toml
121
114
[tox]
122
115
test_matrix = {"6.2" = ["*"]}
123
116
```
124
117
125
-
To disable the test matrix and fall back to a single test job, set
126
-
`use_test_matrix = false` in the `[tox]` section and add `"test"` back to
127
-
the `[github] jobs` list.
118
+
To disable the test matrix and fall back to a single test job, set `use_test_matrix = false` in the `[tox]` section and add `"test"` back to the `[github] jobs` list.
This allows different Python versions in the CI matrix to use appropriate
42
-
base images (for example, Debian Trixie for Python 3.14 support).
39
+
This allows different Python versions in the CI matrix to use appropriate base images (for example, Debian Trixie for Python 3.14 support).
43
40
44
41
## Install OS-level dependencies
45
42
@@ -53,12 +50,9 @@ os_dependencies = """
53
50
## Test matrix support
54
51
55
52
GitLab CI also benefits from the test matrix feature.
56
-
When `use_test_matrix` is enabled (the default), the generated {file}`.gitlab-ci.yml`
57
-
will include test jobs for each combination of Plone version and Python
58
-
version defined in `[tox] test_matrix`.
53
+
When `use_test_matrix` is enabled (the default), the generated {file}`.gitlab-ci.yml` will include test jobs for each combination of Plone version and Python version defined in `[tox] test_matrix`.
59
54
60
-
See {doc}`/how-to/customize-meta-toml` for details on configuring the
61
-
test matrix.
55
+
See {doc}`/how-to/customize-meta-toml` for details on configuring the test matrix.
0 commit comments