-
-
Notifications
You must be signed in to change notification settings - Fork 164
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Standardize Python project configuration developer guide
- Closes #1827
- Loading branch information
1 parent
64d0136
commit ad84220
Showing
3 changed files
with
100 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
99 changes: 99 additions & 0 deletions
99
docs/developer-guide/standardize-python-project-configuration.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
--- | ||
myst: | ||
html_meta: | ||
"description": "Standardize project configuration in Plone with meta" | ||
"property=og:description": "Standardize project configuration in Plone with meta" | ||
"property=og:title": "Standardize project configuration in Plone with meta" | ||
"keywords": "Plone 6, standardize, project, configuration, development, meta" | ||
--- | ||
|
||
# Standardize Python project configuration | ||
|
||
This part of the documentation describes how to standardize Python project configuration in Plone. | ||
It does not cover Volto or any other JavaScript-based project, which has its own ecosystem. | ||
|
||
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 [`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 `meta` repository, sharing them with the rest of the Plone community. | ||
|
||
|
||
## `meta` basic usage | ||
|
||
`meta` has a rich set of features. | ||
This section describes the most common use cases. | ||
|
||
```{seealso} | ||
See a description of all of [`meta`'s features](https://github.com/plone/meta/blob/main/config/README.md#quick-start). | ||
``` | ||
|
||
|
||
### Setup | ||
|
||
Clone `meta` to any machine, then change your current working directory into `meta/config`, create a Python virtual environment, activate it, and install `meta`'s requirements. | ||
|
||
```shell | ||
git clone https://github.com/plone/meta.git | ||
cd meta/config | ||
python3 -m venv venv | ||
. venv/bin/activate | ||
pip install -r requirements.txt | ||
``` | ||
|
||
|
||
### `config-package.py` script | ||
|
||
The {file}`config-package.py` Python script from `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 `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 | ||
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 | ||
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 `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 | ||
python config-package.py [OPTIONS] PATH/TO/PACKAGE | ||
``` |