diff --git a/.github/workflows/test-redistribute.yml b/.github/workflows/test-redistribute.yml
index 51b723e3..429c5728 100644
--- a/.github/workflows/test-redistribute.yml
+++ b/.github/workflows/test-redistribute.yml
@@ -12,11 +12,6 @@ on:
jobs:
test-redistribute:
runs-on: ubuntu-latest
- strategy:
- matrix:
- package:
- - fastapi-cli-slim
- - fastapi-cli
steps:
- name: Dump GitHub context
env:
@@ -33,8 +28,6 @@ jobs:
- name: Install build dependencies
run: pip install build
- name: Build source distribution
- env:
- TIANGOLO_BUILD_PACKAGE: ${{ matrix.package }}
run: python -m build --sdist
- name: Decompress source distribution
run: |
@@ -44,8 +37,6 @@ jobs:
run: |
cd dist/fastapi_cli*/
pip install --group tests --editable .[standard]
- env:
- TIANGOLO_BUILD_PACKAGE: ${{ matrix.package }}
- name: Run source distribution tests
run: |
cd dist/fastapi_cli*/
diff --git a/fastapi-cli-slim/README.md b/fastapi-cli-slim/README.md
new file mode 100644
index 00000000..6fa92b80
--- /dev/null
+++ b/fastapi-cli-slim/README.md
@@ -0,0 +1,47 @@
+# FastAPI CLI
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+**Source Code**: https://github.com/fastapi/fastapi-cli
+
+---
+
+Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀
+
+## `fastapi-cli-slim`
+
+⚠️ Do not install this package. ⚠️
+
+This package, `fastapi-cli-slim`, does nothing other than depend on `fastapi-cli`.
+
+You **should not** install this package.
+
+Install instead:
+
+```bash
+pip install "fastapi[standard]"
+```
+
+or:
+
+```bash
+pip install fastapi-cli
+```
+
+This package is deprecated and will stop receiving any updates and published versions.
+
+## License
+
+This project is licensed under the terms of the MIT license.
diff --git a/pdm_build.py b/pdm_build.py
index e26d5878..b1b662bd 100644
--- a/pdm_build.py
+++ b/pdm_build.py
@@ -3,18 +3,38 @@
from pdm.backend.hooks import Context
-TIANGOLO_BUILD_PACKAGE = os.getenv("TIANGOLO_BUILD_PACKAGE", "fastapi-cli")
+TIANGOLO_BUILD_PACKAGE = os.getenv("TIANGOLO_BUILD_PACKAGE")
-def pdm_build_initialize(context: Context):
+def pdm_build_initialize(context: Context) -> None:
metadata = context.config.metadata
+ # Get main version
+ version = metadata["version"]
# Get custom config for the current package, from the env var
- config: dict[str, Any] = context.config.data["tool"]["tiangolo"][
+ all_configs_config: dict[str, Any] = context.config.data["tool"]["tiangolo"][
"_internal-slim-build"
- ]["packages"].get(TIANGOLO_BUILD_PACKAGE)
- if not config:
+ ]["packages"]
+
+ if TIANGOLO_BUILD_PACKAGE not in all_configs_config:
return
+
+ config = all_configs_config[TIANGOLO_BUILD_PACKAGE]
project_config: dict[str, Any] = config["project"]
# Override main [project] configs with custom configs for this package
for key, value in project_config.items():
metadata[key] = value
+ # Get custom build config for the current package
+ build_config: dict[str, Any] = (
+ config.get("tool", {}).get("pdm", {}).get("build", {})
+ )
+ # Override PDM build config with custom build config for this package
+ for key, value in build_config.items():
+ context.config.build_config[key] = value
+ # Get main dependencies
+ dependencies: list[str] = metadata.get("dependencies", [])
+ # Sync versions in dependencies
+ new_dependencies = []
+ for dep in dependencies:
+ new_dep = f"{dep}>={version}"
+ new_dependencies.append(new_dep)
+ metadata["dependencies"] = new_dependencies
diff --git a/pyproject.toml b/pyproject.toml
index 5d45d0cc..9ed2be5c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -91,6 +91,29 @@ source-includes = [
[tool.tiangolo._internal-slim-build.packages.fastapi-cli-slim.project]
name = "fastapi-cli-slim"
+readme = "fastapi-cli-slim/README.md"
+dependencies = [
+ "fastapi-cli",
+]
+optional-dependencies = {}
+scripts = {}
+
+[tool.tiangolo._internal-slim-build.packages.fastapi-cli-slim.tool.pdm.build]
+# excludes needs to explicitly exclude the top level python packages,
+# otherwise PDM includes them by default
+# A "*" glob pattern can't be used here because in PDM internals, the patterns are put
+# in a set (unordered, order varies) and each excluded file is assigned one of the
+# glob patterns that matches, as the set is unordered, the matched pattern could be "*"
+# independent of the order here. And then the internal code would give it a lower score
+# than the one for a default included file.
+# By not using "*" and explicitly excluding the top level packages, they get a higher
+# score than the default inclusion
+excludes = ["src", "tests", "pdm_build.py"]
+# source-includes needs to explicitly define some value because PDM will check the
+# truthy value of the list, and if empty, will include some defaults, including "tests",
+# an empty string doesn't match anything, but makes the list truthy, so that PDM
+# doesn't override it during the build.
+source-includes = [""]
[tool.pytest.ini_options]
addopts = [