Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
17 changes: 11 additions & 6 deletions press/press/doctype/deploy_candidate/deploy_candidate.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,23 +403,28 @@ def _update_packages(self, pmf: PackageManagerFiles):

For Example:
```
[deploy.dependencies.apt]
packages = [
[tool.frappe-cloud]
apt-dependencies = [
"ffmpeg",
"libsm6",
"libxext6",
]
```

For each app, these are grouped together into a single package row.
The legacy `[deploy.dependencies.apt]` table with a `packages` key
also works. For each app, these are grouped together into a single
package row.
"""
for app in self.apps:
pyproject = pmf[app.app]["pyproject"] or {}
deps = pyproject.get("deploy", {}).get("dependencies", {})
pkgs = deps.get("apt", {}).get("packages", [])
# Legacy key, not valid per PEP 518 (only [tool.*] is open to tools)
legacy_pkgs = (
pyproject.get("deploy", {}).get("dependencies", {}).get("apt", {}).get("packages", [])
)
tool_pkgs = pyproject.get("tool", {}).get("frappe-cloud", {}).get("apt-dependencies", [])

app_packages = []
for p in pkgs:
for p in [*legacy_pkgs, *tool_pkgs]:
p = p.strip()
if p in existing_apt_packages:
continue
Expand Down
17 changes: 17 additions & 0 deletions press/press/doctype/deploy_candidate/test_deploy_candidate.py
Original file line number Diff line number Diff line change
Expand Up @@ -421,3 +421,20 @@ def create_cache_test_apps(team: "Team") -> dict[str, "AppInfo"]:
apps[name] = dict(app=app, source=source, release=release)

return apps


class TestDeployCandidateAptPackages(FrappeTestCase):
def test_apt_packages_are_read_from_legacy_and_tool_frappe_cloud_keys_without_duplicates(self):
pyproject = {
"tool": {"frappe-cloud": {"apt-dependencies": ["poppler-utils", "libmagic1"]}},
"deploy": {"dependencies": {"apt": {"packages": ["libmagic1", " ffmpeg "]}}},
}
candidate = frappe.new_doc("Deploy Candidate")
candidate.append("apps", {"app": "my_app"})

candidate._update_packages({"my_app": {"pyproject": pyproject}})

self.assertEqual(
[(row.package_manager, row.package) for row in candidate.packages],
[("apt", "libmagic1 ffmpeg poppler-utils")],
)
Loading