Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
64d0136
Add Standardize project configuration
stevepiercy Jan 2, 2025
ad84220
Add Standardize Python project configuration developer guide
stevepiercy Jan 6, 2025
6d99cd2
Merge branch '6.0' into meta
stevepiercy Jan 6, 2025
80e5ce0
Merge branch '6.0' into meta
stevepiercy Jan 7, 2025
969c2e2
Merge branch '6.0' into meta
stevepiercy Jan 8, 2025
7181d9c
Merge branch '6.0' into meta
stevepiercy Jan 10, 2025
1657f29
- s/`meta`/`plone/meta`
stevepiercy Jan 14, 2025
302d6e2
Remove activate step, adjust commands to include path to binaries
stevepiercy Jan 14, 2025
a27eaa2
Reword monorepo definition
stevepiercy Jan 14, 2025
3fe5f57
Update docs/developer-guide/standardize-python-project-configuration.md
stevepiercy Jan 14, 2025
467dc36
Merge branch '6.0' into meta
stevepiercy Jan 14, 2025
b9a33f6
Update tips submodules/plone.restapi submodules/volto
stevepiercy Jan 21, 2025
a26c7a7
Merge branch '6.0' into meta
stevepiercy Jan 22, 2025
7f11f1f
Merge branch '6.0' into meta
stevepiercy Jan 22, 2025
fe66f6e
Merge branch '6.0' into meta
stevepiercy Jan 26, 2025
22f5865
Merge branch '6.0' into meta
stevepiercy Jan 28, 2025
34a5b3f
- Remove basic usage
stevepiercy Jan 29, 2025
7bd0f0a
Merge remote-tracking branch 'origin/meta' into meta
stevepiercy Jan 29, 2025
acd5224
Merge branch '6.0' into meta
stevepiercy Jan 29, 2025
981969b
Merge branch '6.0' into meta
stevepiercy Jan 30, 2025
122c4e6
Remove duplicate content
stevepiercy Feb 7, 2025
4e8659a
Merge branch '6.0' into meta
stevepiercy Feb 7, 2025
547279d
Fix see also
stevepiercy Feb 7, 2025
f10856c
Merge remote-tracking branch 'origin/meta' into meta
stevepiercy Feb 7, 2025
0b392fd
Merge branch '6.0' into meta
stevepiercy Feb 7, 2025
ed0c2de
Merge branch '6.0' into meta
stevepiercy Feb 8, 2025
c6e8a7c
Merge branch '6.0' into meta
stevepiercy Feb 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/developer-guide/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ You can help consolidate all of development documentation here, even if it is to
:maxdepth: 2

create-a-distribution
standardize-python-project-configuration
```
103 changes: 103 additions & 0 deletions docs/developer-guide/standardize-python-project-configuration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
---
myst:
html_meta:
"description": "Standardize project configuration in Plone with plone/meta"
"property=og:description": "Standardize project configuration in Plone with plone/meta"
"property=og:title": "Standardize project configuration in Plone with plone/meta"
"keywords": "Plone 6, standardize, project, configuration, development, plone/meta"
---

# Standardize Python project configuration

This part of the documentation describes how to standardize Python project configuration in Plone.
It does not cover the following.

- Volto or any other JavaScript-based project, which has its own ecosystem.
- Monorepos, such as [Cookieplone](https://github.com/plone/cookieplone).
Repositories must have a single Python package at the top level.
- Project that support multiple versions of Plone in the same branch.

Plone consists of hundreds of projects.
To lessen the effort of configuring a new project in the Plone GitHub organization, and to keep these projects current with latest configuration practices, the Plone community agreed upon a trusted set of configuration items.
The Plone community manages these configuration items using the [`plone/meta`](https://github.com/plone/meta) project.

You can follow these practices in your own projects, or suggest new or alternative configuration items through the `plone/meta` repository, sharing them with the rest of the Plone community.


## `plone/meta` basic usage

`plone/meta` has a rich set of features.
This section describes the most common use cases.

```{seealso}
See a description of all of [`plone/meta`'s features](https://github.com/plone/meta/blob/main/config/README.md#quick-start).
```


### Setup

Clone `plone/meta` to any machine, then change your current working directory into `meta/config`, create a Python virtual environment, and install `plone/meta`'s requirements.

```shell
git clone https://github.com/plone/meta.git
cd meta/config
python3 -m venv venv
venv/bin/pip install -r requirements.txt
```


### `config-package.py` script

The {file}`config-package.py` Python script from `plone/meta` creates or overwrites configuration files for your project.
See a current list of [configuration files](https://github.com/plone/meta/blob/main/config/README.md#configuration-files) that it will create or overwrite.

This script has several [command line options](https://github.com/plone/meta/blob/main/config/README.md#cli-arguments) that you can use to override the default options.

When you run this script, it automatically goes through the following steps.

1. It creates a new git branch from the current branch in your project.
1. If the file {file}`.meta.toml` is not present in the project, then it creates this and the other new configuration files from `plone/meta`'s Jinja2 templates.
Otherwise, it reads the file {file}`.meta.toml` for regenerating the configuration files.
1. It writes the configuration files.
1. It creates a change log entry.
1. By default, it commits changes.
1. It optionally adds packages, pushes commits, or runs tox from the configuration files.

```{tip}
If you prefer to name the new git branch instead of letting the script name it using its default naming scheme, then either create a new branch `my-new-branch`, switch to it, and use the `--branch current` option, or do all that in one step with the `--branch my-new-branch` option.
```

```{tip}
If you prefer to review changes before committing them, then use the `--no-commit` option.
```

For help for the script, use the following command.

```shell
venv/bin/python config-package.py --help
```


### Generate configuration files

Now you can run the Python script {file}`config-package.py` to generate configuration files from Jinja2 template files to manage your project.

```shell
venv/bin/python config-package.py [OPTIONS] PATH/TO/PACKAGE
```


### Manage configuration files

For each of the configuration files, you should edit its [corresponding stanza](https://github.com/plone/meta/blob/main/config/README.md#applying-a-customized-configuration) in the file {file}`.meta.toml`.

```{warning}
Do not directly edit the configuration files that `plone/meta` manages.
Anytime someone runs the Python script {file}`config-package.py`, any changes made in these files will get clobbered.
```

Then run the Python script {file}`config-package.py` to regenerate configuration files from your project's {file}`.meta.toml`.

```shell
venv/bin/python config-package.py [OPTIONS] PATH/TO/PACKAGE
```
Loading