RepoPlone 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- repoplone-1.0.0/.gitignore +14 -0
- repoplone-1.0.0/Makefile +98 -0
- repoplone-1.0.0/PKG-INFO +491 -0
- repoplone-1.0.0/README.md +452 -0
- repoplone-1.0.0/pyproject.toml +182 -0
- repoplone-1.0.0/src/repoplone/__init__.py +17 -0
- repoplone-1.0.0/src/repoplone/_types/__init__.py +43 -0
- repoplone-1.0.0/src/repoplone/_types/package.py +40 -0
- repoplone-1.0.0/src/repoplone/_types/pipeline.py +38 -0
- repoplone-1.0.0/src/repoplone/_types/repository.py +134 -0
- repoplone-1.0.0/src/repoplone/app.py +20 -0
- repoplone-1.0.0/src/repoplone/cli.py +75 -0
- repoplone-1.0.0/src/repoplone/commands/__init__.py +0 -0
- repoplone-1.0.0/src/repoplone/commands/changelog.py +23 -0
- repoplone-1.0.0/src/repoplone/commands/dependencies/__init__.py +211 -0
- repoplone-1.0.0/src/repoplone/commands/release.py +64 -0
- repoplone-1.0.0/src/repoplone/commands/settings.py +102 -0
- repoplone-1.0.0/src/repoplone/commands/versions.py +72 -0
- repoplone-1.0.0/src/repoplone/defaults.py +4 -0
- repoplone-1.0.0/src/repoplone/distributions.py +53 -0
- repoplone-1.0.0/src/repoplone/exceptions.py +13 -0
- repoplone-1.0.0/src/repoplone/integrations/__init__.py +0 -0
- repoplone-1.0.0/src/repoplone/integrations/base.py +46 -0
- repoplone-1.0.0/src/repoplone/integrations/make.py +15 -0
- repoplone-1.0.0/src/repoplone/integrations/pocompile.py +19 -0
- repoplone-1.0.0/src/repoplone/integrations/release_it.py +42 -0
- repoplone-1.0.0/src/repoplone/integrations/towncrier.py +50 -0
- repoplone-1.0.0/src/repoplone/integrations/uv.py +60 -0
- repoplone-1.0.0/src/repoplone/release/__init__.py +0 -0
- repoplone-1.0.0/src/repoplone/release/_types.py +12 -0
- repoplone-1.0.0/src/repoplone/release/config.py +143 -0
- repoplone-1.0.0/src/repoplone/release/pipeline.py +59 -0
- repoplone-1.0.0/src/repoplone/release/steps/__init__.py +62 -0
- repoplone-1.0.0/src/repoplone/release/steps/backend.py +21 -0
- repoplone-1.0.0/src/repoplone/release/steps/changelog.py +22 -0
- repoplone-1.0.0/src/repoplone/release/steps/frontend.py +21 -0
- repoplone-1.0.0/src/repoplone/release/steps/git.py +20 -0
- repoplone-1.0.0/src/repoplone/release/steps/github.py +34 -0
- repoplone-1.0.0/src/repoplone/release/steps/local_step.py +80 -0
- repoplone-1.0.0/src/repoplone/release/steps/repository.py +41 -0
- repoplone-1.0.0/src/repoplone/release/steps/summary.py +17 -0
- repoplone-1.0.0/src/repoplone/release/steps/version.py +70 -0
- repoplone-1.0.0/src/repoplone/settings/__init__.py +133 -0
- repoplone-1.0.0/src/repoplone/settings/default.toml +55 -0
- repoplone-1.0.0/src/repoplone/settings/parser.py +30 -0
- repoplone-1.0.0/src/repoplone/utils/__init__.py +191 -0
- repoplone-1.0.0/src/repoplone/utils/_git.py +78 -0
- repoplone-1.0.0/src/repoplone/utils/_github.py +104 -0
- repoplone-1.0.0/src/repoplone/utils/_hatch.py +23 -0
- repoplone-1.0.0/src/repoplone/utils/_path.py +21 -0
- repoplone-1.0.0/src/repoplone/utils/_requests.py +27 -0
- repoplone-1.0.0/src/repoplone/utils/changelog.py +149 -0
- repoplone-1.0.0/src/repoplone/utils/dependencies/__init__.py +51 -0
- repoplone-1.0.0/src/repoplone/utils/dependencies/constraints.py +85 -0
- repoplone-1.0.0/src/repoplone/utils/dependencies/frontend.py +158 -0
- repoplone-1.0.0/src/repoplone/utils/dependencies/pyproject.py +246 -0
- repoplone-1.0.0/src/repoplone/utils/dependencies/versions.py +126 -0
- repoplone-1.0.0/src/repoplone/utils/display.py +72 -0
- repoplone-1.0.0/src/repoplone/utils/python_release.py +37 -0
- repoplone-1.0.0/src/repoplone/utils/release.py +125 -0
- repoplone-1.0.0/src/repoplone/utils/settings.py +36 -0
- repoplone-1.0.0/src/repoplone/utils/toml.py +26 -0
- repoplone-1.0.0/src/repoplone/utils/versions/__init__.py +245 -0
- repoplone-1.0.0/src/repoplone/utils/versions/calver.py +29 -0
- repoplone-1.0.0/src/repoplone/utils/versions/semver.py +53 -0
- repoplone-1.0.0/tests/_resources/fake-addon/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/news/.gitkeep +1 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/pyproject.toml +180 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/src/fake/project/__init__.py +14 -0
- repoplone-1.0.0/tests/_resources/fake-addon/backend/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-addon/docker-compose.yml +110 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/mrs.developer.json +9 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/.release-it.json +21 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/news/.gitkeep +0 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/node_modules/@plone/scripts/templates/towncrier_template.jinja +10 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/package.json +57 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/src/index.js +0 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/packages/fake-addon/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/pnpm-lock.yaml +32018 -0
- repoplone-1.0.0/tests/_resources/fake-addon/frontend/pnpm-workspace.yaml +5 -0
- repoplone-1.0.0/tests/_resources/fake-addon/repository.toml +22 -0
- repoplone-1.0.0/tests/_resources/fake-addon/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only/backend/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only/backend/pyproject.toml +13 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only/backend/testpkg/__init__.py +1 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only/docker-compose.yml +0 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only/repository.toml +20 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only-no-section/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only-no-section/backend/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only-no-section/backend/pyproject.toml +13 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only-no-section/backend/testpkg/__init__.py +0 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only-no-section/docker-compose.yml +0 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only-no-section/repository.toml +13 -0
- repoplone-1.0.0/tests/_resources/fake-backend-only-no-section/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/docker-compose.yml +0 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/frontend/mrs.developer.json +6 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/frontend/package.json +1 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/frontend/packages/fake-frontend-only/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/frontend/packages/fake-frontend-only/package.json +8 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/repository.toml +20 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only-no-section/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only-no-section/docker-compose.yml +0 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only-no-section/frontend/mrs.developer.json +6 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only-no-section/frontend/packages/fake-frontend-only-no-section/CHANGELOG.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only-no-section/frontend/packages/fake-frontend-only-no-section/package.json +8 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only-no-section/repository.toml +13 -0
- repoplone-1.0.0/tests/_resources/fake-frontend-only-no-section/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-project/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project/backend/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project/backend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project/backend/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake-project/backend/news/.gitkeep +1 -0
- repoplone-1.0.0/tests/_resources/fake-project/backend/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project/backend/pyproject.toml +630 -0
- repoplone-1.0.0/tests/_resources/fake-project/backend/src/fake/project/__init__.py +14 -0
- repoplone-1.0.0/tests/_resources/fake-project/docker-compose.yml +110 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/mrs.developer.json +9 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/.release-it.json +21 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/news/.gitkeep +0 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/node_modules/@plone/scripts/templates/towncrier_template.jinja +10 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/package.json +57 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/src/index.js +0 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/packages/fake-project/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/pnpm-lock.yaml +32018 -0
- repoplone-1.0.0/tests/_resources/fake-project/frontend/pnpm-workspace.yaml +5 -0
- repoplone-1.0.0/tests/_resources/fake-project/repository.toml +27 -0
- repoplone-1.0.0/tests/_resources/fake-project/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/backend/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/backend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/backend/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/backend/news/.gitkeep +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/backend/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/backend/pyproject.toml +630 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/backend/src/fake/project/__init__.py +14 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/docker-compose.yml +110 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/mrs.developer.json +9 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/.release-it.json +21 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/news/.gitkeep +0 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/node_modules/@plone/scripts/templates/towncrier_template.jinja +10 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/package.json +57 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/src/index.js +0 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/packages/fake-project/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/pnpm-lock.yaml +32018 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/frontend/pnpm-workspace.yaml +5 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/repository.toml +21 -0
- repoplone-1.0.0/tests/_resources/fake-project-calver/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/backend/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/backend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/backend/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/backend/news/.gitkeep +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/backend/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/backend/pyproject.toml +616 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/backend/src/fake/project/__init__.py +14 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/docker-compose.yml +110 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/mrs.developer.json +9 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/.release-it.json +21 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/news/.gitkeep +0 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/node_modules/@plone/scripts/templates/towncrier_template.jinja +10 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/package.json +58 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/src/index.js +0 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/packages/fake-project/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/pnpm-lock.yaml +32024 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/frontend/pnpm-workspace.yaml +5 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/news/+changelog.internal +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/news/+refactor.internal +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/repository.toml +30 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake-project-from-distribution/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/backend/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/backend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/backend/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/backend/news/.gitkeep +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/backend/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/backend/pyproject.toml +629 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/backend/src/fake/project/__init__.py +14 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/docker-compose.yml +110 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/mrs.developer.json +9 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/.release-it.json +21 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/news/.gitkeep +0 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/node_modules/@plone/scripts/templates/towncrier_template.jinja +10 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/package.json +57 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/src/index.js +0 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/packages/fake-project/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/pnpm-lock.yaml +32018 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/frontend/pnpm-workspace.yaml +5 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/news/+changelog.internal +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/news/+refactor.internal +1 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/repository.toml +31 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake-project-root-changelog/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/backend/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/backend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/backend/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/backend/news/.gitkeep +1 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/backend/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/backend/pyproject.toml +639 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/backend/src/fake/distribution/__init__.py +14 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/docker-compose.yml +110 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/mrs.developer.json +9 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/packages/fake-distribution/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/packages/fake-distribution/news/.gitkeep +0 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/packages/fake-distribution/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/packages/fake-distribution/node_modules/@plone/scripts/templates/towncrier_template.jinja +10 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/packages/fake-distribution/package.json +56 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/packages/fake-distribution/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/pnpm-lock.yaml +32018 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/frontend/pnpm-workspace.yaml +5 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/repository.toml +20 -0
- repoplone-1.0.0/tests/_resources/fake_distribution/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/backend/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/backend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/backend/news/.changelog_template.jinja +15 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/backend/news/.gitkeep +1 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/backend/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/backend/pyproject.toml +630 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/backend/src/fake/project/__init__.py +14 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/docker-compose.yml +110 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/README.md +1 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/mrs.developer.json +17 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/.release-it.json +21 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/CHANGELOG.md +3 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/news/.gitkeep +0 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/news/1.feature +1 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/node_modules/@plone/scripts/templates/towncrier_template.jinja +10 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/package.json +59 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/src/index.js +0 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/packages/fake-project/towncrier.toml +33 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/pnpm-lock.yaml +32018 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/frontend/pnpm-workspace.yaml +5 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/repository.toml +28 -0
- repoplone-1.0.0/tests/_resources/frontend-base-package/version.txt +1 -0
- repoplone-1.0.0/tests/_resources/pyproject/distribution.toml +614 -0
- repoplone-1.0.0/tests/_resources/pyproject/package.toml +184 -0
- repoplone-1.0.0/tests/_resources/pyproject/project.toml +629 -0
- repoplone-1.0.0/tests/_resources/repository_toml/deprecated_100.toml +24 -0
- repoplone-1.0.0/tests/_resources/repository_toml/old-compose.toml +24 -0
- repoplone-1.0.0/tests/_resources/repository_toml/updated.toml +26 -0
- repoplone-1.0.0/tests/_resources/vcr/test_deps_check-dist-1.0.0a12.yaml +153 -0
- repoplone-1.0.0/tests/_resources/vcr/test_deps_check-dist-1.0.0a17.yaml +153 -0
- repoplone-1.0.0/tests/_resources/vcr/test_deps_check-plone-6.0.13.yaml +1906 -0
- repoplone-1.0.0/tests/_resources/vcr/test_deps_check-plone-6.1.0.yaml +1906 -0
- repoplone-1.0.0/tests/_resources/vcr/test_deps_upgrade-dist-latest.yaml +287 -0
- repoplone-1.0.0/tests/_resources/vcr/test_deps_upgrade-plone-latest.yaml +1016 -0
- repoplone-1.0.0/tests/_resources/vcr/test_get_package_constraints-Products.CMFPlone-6.1.0.yaml +1740 -0
- repoplone-1.0.0/tests/_resources/vcr/test_get_package_constraints-kitconcept.intranet-1.0.0a17.yaml +382 -0
- repoplone-1.0.0/tests/_resources/vcr/test_get_remote_uv_dependencies-8e03368fd61ccedd60ffb389ccf29e78.yaml +277 -0
- repoplone-1.0.0/tests/_resources/vcr/test_get_remote_uv_dependencies-e7c92eae272959f78219437527680737.yaml +290 -0
- repoplone-1.0.0/tests/commands/changelog/test_changelog.py +33 -0
- repoplone-1.0.0/tests/commands/deps/conftest.py +212 -0
- repoplone-1.0.0/tests/commands/deps/test_deps.py +75 -0
- repoplone-1.0.0/tests/commands/release/test_release.py +191 -0
- repoplone-1.0.0/tests/commands/settings/test_release_pipeline_commands.py +119 -0
- repoplone-1.0.0/tests/commands/settings/test_settings_dump.py +58 -0
- repoplone-1.0.0/tests/commands/test_cli.py +12 -0
- repoplone-1.0.0/tests/commands/versions/test_versions.py +48 -0
- repoplone-1.0.0/tests/commands/versions/test_versions_calver.py +33 -0
- repoplone-1.0.0/tests/conftest.py +247 -0
- repoplone-1.0.0/tests/release/test_config.py +138 -0
- repoplone-1.0.0/tests/release/test_local_step.py +190 -0
- repoplone-1.0.0/tests/release/test_pipeline.py +37 -0
- repoplone-1.0.0/tests/release/test_steps.py +63 -0
- repoplone-1.0.0/tests/release/test_version_step.py +104 -0
- repoplone-1.0.0/tests/settings/test_settings.py +257 -0
- repoplone-1.0.0/tests/test_monorepo_variants.py +150 -0
- repoplone-1.0.0/tests/utils/changelog/conftest.py +15 -0
- repoplone-1.0.0/tests/utils/changelog/test_utils_changelog.py +99 -0
- repoplone-1.0.0/tests/utils/dependencies/conftest.py +32 -0
- repoplone-1.0.0/tests/utils/dependencies/frontend/test_utils_frontend.py +22 -0
- repoplone-1.0.0/tests/utils/dependencies/frontend/test_utils_frontend_base_package.py +73 -0
- repoplone-1.0.0/tests/utils/dependencies/test_utils_constraints.py +99 -0
- repoplone-1.0.0/tests/utils/dependencies/test_utils_pyproject.py +202 -0
- repoplone-1.0.0/tests/utils/test_toml.py +60 -0
- repoplone-1.0.0/tests/utils/test_utils_github.py +41 -0
- repoplone-1.0.0/tests/utils/test_utils_python_release.py +83 -0
- repoplone-1.0.0/tests/utils/test_utils_release.py +97 -0
- repoplone-1.0.0/tests/utils/test_utils_settings.py +70 -0
- repoplone-1.0.0/tests/utils/versions/test_utils_calver.py +31 -0
- repoplone-1.0.0/tests/utils/versions/test_utils_semver.py +63 -0
- repoplone-1.0.0/tests/utils/versions/test_utils_versions.py +170 -0
- repoplone-1.0.0/uv.lock +1986 -0
repoplone-1.0.0/Makefile
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
### Defensive settings for make:
|
|
2
|
+
# https://tech.davis-hansson.com/p/make/
|
|
3
|
+
SHELL:=bash
|
|
4
|
+
.ONESHELL:
|
|
5
|
+
.SHELLFLAGS:=-xeu -o pipefail -O inherit_errexit -c
|
|
6
|
+
.SILENT:
|
|
7
|
+
.DELETE_ON_ERROR:
|
|
8
|
+
MAKEFLAGS+=--warn-undefined-variables
|
|
9
|
+
MAKEFLAGS+=--no-builtin-rules
|
|
10
|
+
|
|
11
|
+
# We like colors
|
|
12
|
+
# From: https://coderwall.com/p/izxssa/colored-makefile-for-golang-projects
|
|
13
|
+
RED=`tput setaf 1`
|
|
14
|
+
GREEN=`tput setaf 2`
|
|
15
|
+
RESET=`tput sgr0`
|
|
16
|
+
YELLOW=`tput setaf 3`
|
|
17
|
+
|
|
18
|
+
# Python checks
|
|
19
|
+
UV?=uv
|
|
20
|
+
|
|
21
|
+
# installed?
|
|
22
|
+
ifeq (, $(shell which $(UV) ))
|
|
23
|
+
$(error "UV=$(UV) not found in $(PATH)")
|
|
24
|
+
endif
|
|
25
|
+
|
|
26
|
+
BACKEND_FOLDER=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
|
|
27
|
+
|
|
28
|
+
VENV_FOLDER=$(BACKEND_FOLDER)/.venv
|
|
29
|
+
BIN_FOLDER=$(VENV_FOLDER)/bin
|
|
30
|
+
|
|
31
|
+
all: build
|
|
32
|
+
|
|
33
|
+
# Add the following 'help' target to your Makefile
|
|
34
|
+
# And add help text after each target name starting with '\#\#'
|
|
35
|
+
.PHONY: help
|
|
36
|
+
help: ## This help message
|
|
37
|
+
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
|
38
|
+
|
|
39
|
+
$(VENV_FOLDER): ## Install dependencies
|
|
40
|
+
@echo "$(GREEN)==> Install environment$(RESET)"
|
|
41
|
+
@uv sync
|
|
42
|
+
|
|
43
|
+
.PHONY: install
|
|
44
|
+
install: $(VENV_FOLDER) ## Install the project
|
|
45
|
+
|
|
46
|
+
.PHONY: clean
|
|
47
|
+
clean: ## Clean environment
|
|
48
|
+
@echo "$(RED)==> Cleaning environment and build$(RESET)"
|
|
49
|
+
rm -rf $(VENV_FOLDER) .python-version .ruff_cache .pytest_cache uv.lock
|
|
50
|
+
|
|
51
|
+
# QA
|
|
52
|
+
.PHONY: lint
|
|
53
|
+
lint: $(VENV_FOLDER) ## Check code base according to our standards
|
|
54
|
+
@echo "$(GREEN)==> Lint codebase$(RESET)"
|
|
55
|
+
@uvx ruff@latest check --fix --config $(BACKEND_FOLDER)/pyproject.toml
|
|
56
|
+
@uvx pyroma@latest -d .
|
|
57
|
+
@uvx check-python-versions@latest .
|
|
58
|
+
@uv run mypy src
|
|
59
|
+
|
|
60
|
+
.PHONY: format
|
|
61
|
+
format: $(VENV_FOLDER) ## Fix code base according to our standards
|
|
62
|
+
@echo "$(GREEN)==> Format codebase$(RESET)"
|
|
63
|
+
@uvx ruff@latest check --select I --fix --config $(BACKEND_FOLDER)/pyproject.toml
|
|
64
|
+
@uvx ruff@latest format --config $(BACKEND_FOLDER)/pyproject.toml
|
|
65
|
+
|
|
66
|
+
.PHONY: check
|
|
67
|
+
check: format lint ## Check and fix code base according to Plone standards
|
|
68
|
+
|
|
69
|
+
############################################
|
|
70
|
+
# Tests
|
|
71
|
+
############################################
|
|
72
|
+
.PHONY: test
|
|
73
|
+
test: $(VENV_FOLDER) ## Test the code with pytest
|
|
74
|
+
@echo "🚀 Testing code: Running pytest"
|
|
75
|
+
@uv run pytest
|
|
76
|
+
|
|
77
|
+
.PHONY: test-coverage
|
|
78
|
+
test-coverage: $(VENV_FOLDER) ## Test the code with pytest
|
|
79
|
+
@echo "🚀 Testing code: Running pytest"
|
|
80
|
+
@uv run pytest --cov=repoplone --cov-report term-missing
|
|
81
|
+
|
|
82
|
+
############################################
|
|
83
|
+
# Release
|
|
84
|
+
############################################
|
|
85
|
+
.PHONY: changelog
|
|
86
|
+
changelog: $(VENV_FOLDER) ## Display a draft of the changelog
|
|
87
|
+
@echo "🚀 Display the draft for the changelog"
|
|
88
|
+
@uv run towncrier --draft
|
|
89
|
+
|
|
90
|
+
.PHONY: release
|
|
91
|
+
release: $(VENV_FOLDER) ## Release the package to pypi.org
|
|
92
|
+
@echo "🚀 Release package"
|
|
93
|
+
@uv run prerelease
|
|
94
|
+
@uv run release
|
|
95
|
+
@rm -Rf dist
|
|
96
|
+
@uv build
|
|
97
|
+
@uv publish
|
|
98
|
+
@uv run postrelease
|
repoplone-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: RepoPlone
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Toolset for Plone mono repo maintainers.
|
|
5
|
+
Project-URL: Documentation, https://github.com/plone/repoplone#readme
|
|
6
|
+
Project-URL: Issues, https://github.com/plone/repoplone/issues
|
|
7
|
+
Project-URL: Source, https://github.com/plone/repoplone
|
|
8
|
+
Author-email: kitconcept GmbH <info@kitconcept.com>, PloneGov-BR <gov@plone.org.br>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
Keywords: Plone
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Web Environment
|
|
13
|
+
Classifier: Framework :: Plone
|
|
14
|
+
Classifier: Framework :: Plone :: 6.1
|
|
15
|
+
Classifier: Framework :: Plone :: 6.2
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Requires-Dist: dynaconf>=3.2.10
|
|
26
|
+
Requires-Dist: gitpython>=3.1.44
|
|
27
|
+
Requires-Dist: hatch>=1.14.0
|
|
28
|
+
Requires-Dist: hatchling>=1.27.0
|
|
29
|
+
Requires-Dist: mxdev>=4.0.3
|
|
30
|
+
Requires-Dist: packaging>=24.2
|
|
31
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
32
|
+
Requires-Dist: requests>=2.32.3
|
|
33
|
+
Requires-Dist: semver>=3.0.4
|
|
34
|
+
Requires-Dist: tomlkit>=0.13.2
|
|
35
|
+
Requires-Dist: towncrier>=24.8.0
|
|
36
|
+
Requires-Dist: typer>=0.19.2
|
|
37
|
+
Requires-Dist: zest-pocompile>=2.0.0
|
|
38
|
+
Description-Content-Type: text/markdown
|
|
39
|
+
|
|
40
|
+
# RepoPlone
|
|
41
|
+
|
|
42
|
+
<div align="center">
|
|
43
|
+
|
|
44
|
+
[](https://pypi.org/project/repoplone/)
|
|
45
|
+
[](https://pypi.org/project/repoplone/)
|
|
46
|
+
[](https://pypi.org/project/repoplone/)
|
|
47
|
+
[](https://pypi.org/project/repoplone/)
|
|
48
|
+
[](https://pypi.org/project/repoplone/)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
[](https://github.com/plone/repoplone/actions/workflows/main.yml)
|
|
52
|
+
|
|
53
|
+
[](https://github.com/plone/repoplone)
|
|
54
|
+
[](https://github.com/plone/repoplone)
|
|
55
|
+
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
## Overview
|
|
59
|
+
|
|
60
|
+
The **RepoPlone** is a tool designed to manage mono repos containing a `repository.toml` configuration file at the repository root.
|
|
61
|
+
|
|
62
|
+
It provides various commands to streamline repository management, versioning, and release processes.
|
|
63
|
+
|
|
64
|
+
## Setup
|
|
65
|
+
|
|
66
|
+
### Installation
|
|
67
|
+
|
|
68
|
+
To use the latest version of this tool, run the command:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
uvx repoplone
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Authentications
|
|
75
|
+
|
|
76
|
+
#### PyPi
|
|
77
|
+
|
|
78
|
+
We use `uv` to make the release, please make sure authentication is in place by setting the environment variable `UV_PUBLISH_TOKEN`:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
export UV_PUBLISH_TOKEN=<MYTOKEN>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
or by using the `uv auth login pypi.org` command, as explained [here](https://docs.astral.sh/uv/concepts/authentication/cli/#the-uv-auth-cli).
|
|
85
|
+
|
|
86
|
+
#### NPM
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
npm whoami
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### GitHub
|
|
93
|
+
|
|
94
|
+
To add releases to GitHub, you should have an environment variable `GITHUB_TOKEN` set -- with a valid token -- before running this tool.
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
export GITHUB_TOKEN='<token>'
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Usage
|
|
101
|
+
|
|
102
|
+
### Prepare the repository
|
|
103
|
+
|
|
104
|
+
Ensure that your monorepo contains a `repository.toml` file. Below is an example of such a configuration:
|
|
105
|
+
|
|
106
|
+
```toml
|
|
107
|
+
[repository]
|
|
108
|
+
name = "fake-distribution"
|
|
109
|
+
changelog = "CHANGELOG.md"
|
|
110
|
+
version = "version.txt"
|
|
111
|
+
version_format = "semver"
|
|
112
|
+
container_images_prefix = "ghcr.io/collective/fake-distribution"
|
|
113
|
+
compose = ["docker-compose.yml"]
|
|
114
|
+
|
|
115
|
+
[repository.towncrier]
|
|
116
|
+
section = "Project"
|
|
117
|
+
settings = "towncrier.toml"
|
|
118
|
+
|
|
119
|
+
[backend.package]
|
|
120
|
+
name = "fake.distribution"
|
|
121
|
+
path = "backend"
|
|
122
|
+
python_version = "3.13"
|
|
123
|
+
python_versions = ["3.11", "3.12", "3.13"]
|
|
124
|
+
plone_versions = ["6.1", "6.2"]
|
|
125
|
+
changelog = "backend/CHANGELOG.md"
|
|
126
|
+
towncrier_settings = "backend/pyproject.toml"
|
|
127
|
+
base_package = "Products.CMFPlone"
|
|
128
|
+
publish = false
|
|
129
|
+
|
|
130
|
+
[frontend.package]
|
|
131
|
+
name = "fake-distribution"
|
|
132
|
+
path = "frontend/packages/fake-distribution"
|
|
133
|
+
changelog = "frontend/packages/fake-distribution/CHANGELOG.md"
|
|
134
|
+
towncrier_settings = "frontend/packages/fake-distribution/towncrier.toml"
|
|
135
|
+
publish = false
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Please refer to [`repository.toml` Specification](#repositorytoml-specification) for more information.
|
|
139
|
+
|
|
140
|
+
### List Available Commands
|
|
141
|
+
To see all available commands, run:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
uvx repoplone
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Check Installed Version
|
|
148
|
+
To check the installed version of the tool, use:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
uvx repoplone --version
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Check repository versions
|
|
155
|
+
|
|
156
|
+
### Current versions
|
|
157
|
+
|
|
158
|
+
List current versions for:
|
|
159
|
+
|
|
160
|
+
- Repository
|
|
161
|
+
- Backend package
|
|
162
|
+
- Frontend package
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
uvx repoplone versions current
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Next versions
|
|
169
|
+
|
|
170
|
+
Report next version of all components of this repository:
|
|
171
|
+
|
|
172
|
+
- Repository
|
|
173
|
+
- Backend package
|
|
174
|
+
- Frontend package
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
uvx repoplone versions next
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Dependencies
|
|
181
|
+
|
|
182
|
+
Report version information for major dependencies:
|
|
183
|
+
|
|
184
|
+
- Backend base package
|
|
185
|
+
- Frontend base package
|
|
186
|
+
- Frontend @plone/volto package
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
uvx repoplone versions dependencies
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Preview Changelog
|
|
193
|
+
|
|
194
|
+
To generate and display the draft changelog, run:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
uvx repoplone changelog
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Releasing Monorepo Packages
|
|
201
|
+
|
|
202
|
+
The `release` command creates a new release and accepts the following arguments:
|
|
203
|
+
|
|
204
|
+
#### `desired_version`
|
|
205
|
+
|
|
206
|
+
The desired_version argument defines the new version to be used in the release. It can be a specific version number or a version segment.
|
|
207
|
+
|
|
208
|
+
##### Semantic Versioning
|
|
209
|
+
|
|
210
|
+
For projects using *Semantic Versioning* -- the default for repoplone --, below is a reference table showing how version segments modify an existing `1.0.0` version:
|
|
211
|
+
|
|
212
|
+
| Segment | New Version |
|
|
213
|
+
|---------|------------|
|
|
214
|
+
| `release` | `1.0.0` |
|
|
215
|
+
| `major` | `2.0.0` |
|
|
216
|
+
| `minor` | `1.1.0` |
|
|
217
|
+
| `micro` / `patch` / `fix` | `1.0.1` |
|
|
218
|
+
| `a` / `alpha` | `1.0.0a0` |
|
|
219
|
+
| `b` / `beta` | `1.0.0b0` |
|
|
220
|
+
| `c` / `rc` / `pre` / `preview` | `1.0.0rc0` |
|
|
221
|
+
| `r` / `rev` / `post` | `1.0.0.post0` |
|
|
222
|
+
| `dev` | `1.0.0.dev0` |
|
|
223
|
+
|
|
224
|
+
If not provided, you will be prompted to select a version from a list of most probable version options:
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
01/09 Select the next version
|
|
228
|
+
1 - 1.0.1 (micro)
|
|
229
|
+
2 - 1.1.0 (minor)
|
|
230
|
+
3 - 2.0.0 (release)
|
|
231
|
+
Choose from [1/2/3] (1):
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
##### Calendar Versioning
|
|
235
|
+
|
|
236
|
+
For projects that have the value of `version_format` set as `calver`, the `desired_version`, by default, will compute the next available version.
|
|
237
|
+
|
|
238
|
+
Examples:
|
|
239
|
+
| Current Version | Date | Next Version |
|
|
240
|
+
|---------|------------|------------|
|
|
241
|
+
| 20250404.1|2026-02-13|20260213.1|
|
|
242
|
+
| 20260213.1|2026-02-13|20260213.2|
|
|
243
|
+
|
|
244
|
+
#### `--dry-run`
|
|
245
|
+
|
|
246
|
+
Use this flag to simulate the release process without actually publishing the new version.
|
|
247
|
+
|
|
248
|
+
**Example:**
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
uvx repoplone release a
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
This will create an `alpha` release.
|
|
255
|
+
|
|
256
|
+
### Configuring the release pipeline
|
|
257
|
+
|
|
258
|
+
By default, repoplone runs a fixed sequence of steps when releasing. Projects
|
|
259
|
+
can override that sequence in `repository.toml` under `[repository.release]`.
|
|
260
|
+
|
|
261
|
+
Built-in step ids: `changelog`, `version`, `repository`, `release_backend`,
|
|
262
|
+
`release_frontend`, `git`, `gh_release`, `bye`. The default order matches
|
|
263
|
+
that list.
|
|
264
|
+
|
|
265
|
+
#### Reordering or omitting built-in steps
|
|
266
|
+
|
|
267
|
+
```toml
|
|
268
|
+
[repository.release]
|
|
269
|
+
steps = [
|
|
270
|
+
"changelog",
|
|
271
|
+
"version",
|
|
272
|
+
"repository",
|
|
273
|
+
"release_backend",
|
|
274
|
+
"git",
|
|
275
|
+
"bye",
|
|
276
|
+
]
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
The example above skips `release_frontend` and `gh_release`.
|
|
280
|
+
|
|
281
|
+
#### Running a project-local hook
|
|
282
|
+
|
|
283
|
+
The `local_step` built-in imports a callable from the project root and runs
|
|
284
|
+
it under the standard step contract:
|
|
285
|
+
|
|
286
|
+
```python
|
|
287
|
+
def step(step_id, title, settings, state, **kwargs) -> bool:
|
|
288
|
+
...
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Wire it via a registry alias. The alias id is what you put in `steps`:
|
|
292
|
+
|
|
293
|
+
```toml
|
|
294
|
+
[repository.release]
|
|
295
|
+
steps = ["changelog", "version", "repository", "notify_slack", "git", "bye"]
|
|
296
|
+
|
|
297
|
+
[repository.release.registry.notify_slack]
|
|
298
|
+
title = "Notify internal Slack"
|
|
299
|
+
function = "local_step"
|
|
300
|
+
args = { entrypoint = "scripts.notify:hook", channel = "#releases" }
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Repoplone adds the project root to `sys.path` before resolving the
|
|
304
|
+
entrypoint, so a hook at `scripts/notify.py` is reachable as
|
|
305
|
+
`scripts.notify:hook`. Any keys in `args` other than `entrypoint` are
|
|
306
|
+
forwarded to the hook as keyword arguments.
|
|
307
|
+
|
|
308
|
+
> **uvx caveat.** Because `uvx repoplone` runs in an isolated environment,
|
|
309
|
+
> a local hook may only use the standard library plus packages repoplone
|
|
310
|
+
> itself depends on. Third-party packages installed in the project's own
|
|
311
|
+
> environment are *not* available to the hook.
|
|
312
|
+
|
|
313
|
+
`local_step` cannot appear in `steps` directly — it must be wrapped in a
|
|
314
|
+
registry alias that supplies `args.entrypoint`.
|
|
315
|
+
|
|
316
|
+
#### Validating the configuration
|
|
317
|
+
|
|
318
|
+
Before committing a `[repository.release]` change, validate it:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
uvx repoplone settings sanity-check
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
This loads the settings and resolves every `local_step` entrypoint. It
|
|
325
|
+
exits non-zero with a precise message if anything fails.
|
|
326
|
+
|
|
327
|
+
To inspect the resolved pipeline:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
uvx repoplone settings release-steps # human-readable table
|
|
331
|
+
uvx repoplone settings release-steps --json # machine-readable
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## Dependencies
|
|
337
|
+
|
|
338
|
+
### Manage backend's base package
|
|
339
|
+
|
|
340
|
+
The following commands are available exclusively for projects managed by UV and with a base_package set in the `[backend.package]` section of repository.toml.
|
|
341
|
+
|
|
342
|
+
#### Report the base package
|
|
343
|
+
To check which is the current base package, run:
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
uvx repoplone deps info
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
#### Check version
|
|
350
|
+
To check the current base package version, run:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
uvx repoplone deps check
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
#### Upgrade version
|
|
357
|
+
|
|
358
|
+
To upgrade the base package to a specific version, use:
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
uvx repoplone deps upgrade 6.1.1
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## `repository.toml` Specification
|
|
365
|
+
|
|
366
|
+
This section outlines the format and available options for the `repository.toml` file used in the project. Each section is detailed below, along with the available options and their default values.
|
|
367
|
+
|
|
368
|
+
| Section | Option | Description | Example Value | Default Value Source |
|
|
369
|
+
|-----------------------|---------------------------|------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
370
|
+
| `repository` | `name` | Name of the repository. | `"collective-addon"` | |
|
|
371
|
+
| | `changelog` | Path to the changelog file. | `"CHANGELOG.md"` | |
|
|
372
|
+
| | `version` | Path to the version file of this repository. | `"version.txt"` | |
|
|
373
|
+
| | `container_images_prefix` | Prefix for container images. We will add the `-backend` and `-frontend` suffixes to generate the final images. | `"ghcr.io/collective/collective-addon"` | |
|
|
374
|
+
| | `compose` | List of Docker Compose files. | `["docker-compose.yml"]` | |
|
|
375
|
+
| | `version_format` | Format of the versioning. | `"semver"` or `"calver"` | |
|
|
376
|
+
| | `issues_url` | URL where issues for this repository are tracked. | `"https://github.com/plone/repoplone/issues"` | Empty by default. When unset and the git `origin` points at GitHub, the value is derived as `https://github.com/<owner>/<repo>/issues`. |
|
|
377
|
+
| `repository.towncrier`| `enabled` | Whether a top-level Towncrier is enabled. | `true` or `false` | Calculated if a section is present in `repository.toml` |
|
|
378
|
+
| | `section` | Section name used by Towncrier. | `"Project"` | |
|
|
379
|
+
| | `settings` | Path to Towncrier settings. | `"towncrier.toml"` | |
|
|
380
|
+
| `backend.package` | `enabled` | Whether the backend package is enabled. | `true` or `false` | Calculated if a section is present in `repository.toml` |
|
|
381
|
+
| | `name` | Name of the backend package. | `"collective.addon"` | |
|
|
382
|
+
| | `path` | Path to the backend package. | `"backend"` | |
|
|
383
|
+
| | `python_version` | Base Python version for the package. (Used in tests) | `"3.11"` | If value is not present in `repository.toml`, repoplone will inspect `pyproject.toml` `project.classifiers` and return the first supported Python version. |
|
|
384
|
+
| | `python_versions` | List of supported Python versions. | `["3.10", "3.11", "3.12"]` | If value is not present in `repository.toml`, repoplone will inspect `pyproject.toml` `project.classifiers` and return all supported Python versions. |
|
|
385
|
+
| | `plone_versions` | List of supported Plone versions. | `["6.0", "6.1"]` | If value is not present in `repository.toml`, repoplone will inspect `pyproject.toml` `project.classifiers` and return all supported Plone versions. |
|
|
386
|
+
| | `changelog` | Path to the changelog for the backend. | `"backend/CHANGELOG.md"` | |
|
|
387
|
+
| | `code_path` | Path to the source code. | `"src/collective/addon"` | |
|
|
388
|
+
| | `towncrier_settings` | Path to Towncrier settings for backend. | `"backend/pyproject.toml"` | |
|
|
389
|
+
| | `publish` | Whether to publish the backend package to PyPI. | `true` or `false` | |
|
|
390
|
+
| `frontend.package` | `enabled` | Whether the frontend package is enabled. | `true` or `false` | Calculated if a section is present in `repository.toml` |
|
|
391
|
+
| | `name` | Name of the frontend package. | `"@plone-collective/volto-addon"` | |
|
|
392
|
+
| | `path` | Path to the frontend package. | `"frontend/packages/volto-addon"` | |
|
|
393
|
+
| | `code_path` | Path to the source code. | `"src"` | |
|
|
394
|
+
| | `changelog` | Path to the changelog for the frontend. | `"frontend/CHANGELOG.md"` | |
|
|
395
|
+
| | `towncrier_settings` | Path to Towncrier settings for frontend. | `"frontend/packages/volto-addon/towncrier.toml"`| |
|
|
396
|
+
| | `publish` | Whether to publish the frontend package to npm. | `true` or `false` | |
|
|
397
|
+
|
|
398
|
+
## Contribute 🤝
|
|
399
|
+
|
|
400
|
+
We welcome contributions to RepoPlone.
|
|
401
|
+
|
|
402
|
+
You can create an issue in the issue tracker, or contact a maintainer.
|
|
403
|
+
|
|
404
|
+
- [Issue Tracker](https://github.com/plone/repoplone/issues)
|
|
405
|
+
- [Source Code](https://github.com/plone/repoplone/)
|
|
406
|
+
|
|
407
|
+
### Development requirements
|
|
408
|
+
|
|
409
|
+
- [uv](https://docs.astral.sh/uv/)
|
|
410
|
+
|
|
411
|
+
### Setup
|
|
412
|
+
|
|
413
|
+
Clone this repository:
|
|
414
|
+
|
|
415
|
+
```sh
|
|
416
|
+
git clone git@github.com:plone/repoplone.git
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Install `UV`, and create a local virtual environment with the following command.
|
|
420
|
+
|
|
421
|
+
```shell
|
|
422
|
+
make install
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Run the checked out branch of RepoPlone
|
|
426
|
+
|
|
427
|
+
```shell
|
|
428
|
+
uv run repoplone
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Check and format the codebase
|
|
432
|
+
|
|
433
|
+
```shell
|
|
434
|
+
make check
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Run tests
|
|
438
|
+
|
|
439
|
+
[`pytest`](https://docs.pytest.org/) is this package's test runner.
|
|
440
|
+
|
|
441
|
+
Run all tests with the following command.
|
|
442
|
+
|
|
443
|
+
```shell
|
|
444
|
+
make test
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Run all tests, but stop on the first error and open a `pdb` session with the following command.
|
|
448
|
+
|
|
449
|
+
```shell
|
|
450
|
+
uv run pytest -x --pdb
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
Run only tests that match `test_release_backend` with the following command.
|
|
454
|
+
|
|
455
|
+
```shell
|
|
456
|
+
uv run pytest -k test_release_backend
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
Run only tests that match `test_release_backend`, but stop on the first error and open a `pdb` session with the following command.
|
|
460
|
+
|
|
461
|
+
```shell
|
|
462
|
+
uv run pytest -k test_release_backend -x --pdb
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Run type checker
|
|
466
|
+
|
|
467
|
+
We use [`mypy`](https://www.mypy-lang.org/) to run static type checking for this codebase.
|
|
468
|
+
|
|
469
|
+
Run the checker with the following command.
|
|
470
|
+
|
|
471
|
+
```shell
|
|
472
|
+
uv run mypy src
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
## Support 📢
|
|
477
|
+
|
|
478
|
+
For support, questions, or more detailed documentation, visit the [official RepoPlone repository](https://github.com/plone/repoplone).
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
## This project is supported by
|
|
482
|
+
|
|
483
|
+
<p align="left">
|
|
484
|
+
<a href="https://plone.org/foundation/">
|
|
485
|
+
<img alt="Plone Foundation Logo" width="200px" src="https://raw.githubusercontent.com/plone/.github/main/plone-foundation.png">
|
|
486
|
+
</a>
|
|
487
|
+
</p>
|
|
488
|
+
|
|
489
|
+
## License
|
|
490
|
+
|
|
491
|
+
The project is released under the [MIT License](./LICENSE).
|