From 10c977f614262b2a41d7daee48750e22fc8f8832 Mon Sep 17 00:00:00 2001 From: Jayanta Pandit <55305804+regdocs@users.noreply.github.com> Date: Wed, 15 Apr 2026 15:31:17 +0530 Subject: [PATCH 1/3] fix(marketplace-add-version): Handle more than one app source When fetching branches from app sources for a marketplace app, we're picking the top 1 result which may not always be the intended branch. Fixed this by getting all branches from all app sources created by the team in the past for that app. --- dashboard/src/objects/marketplace.js | 20 ++++++++++++++++++- press/api/marketplace.py | 18 ++++++++++------- .../marketplace_app/marketplace_app.py | 4 +++- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/dashboard/src/objects/marketplace.js b/dashboard/src/objects/marketplace.js index 3b234cd0f96..e4bddad3c9a 100644 --- a/dashboard/src/objects/marketplace.js +++ b/dashboard/src/objects/marketplace.js @@ -218,10 +218,28 @@ export default { label: 'Add', onClick() { if (app.addVersion.loading) return; + + const getAddVersionArgsFromOption = ( + option, + ) => { + const [ + repo_owner, + repo_name, + ...branch + ] = option.trim().split('/'); + return { + repo_owner, + repo_name, + branch: branch.join('/'), + }; + }; + toast.promise( app.addVersion.submit({ version: row.version, - branch: row.selectedOption, + ...getAddVersionArgsFromOption( + row.selectedOption, + ), }), { loading: 'Adding new version...', diff --git a/press/api/marketplace.py b/press/api/marketplace.py index b2c30208d2f..872b11a45d5 100644 --- a/press/api/marketplace.py +++ b/press/api/marketplace.py @@ -1225,8 +1225,8 @@ def branches(name): installation_id = app_source.github_installation_id repo_owner = app_source.repository_owner repo_name = app_source.repository - - return git_branches(repo_owner, repo_name, installation_id) + branches = git_branches(repo_owner, repo_name, installation_id) + return [f"{repo_owner}/{repo_name}/{branch['name']}" for branch in branches] @protected("Marketplace App") @@ -1242,19 +1242,23 @@ def options_for_version(name): frappe_version = frappe.get_all("Frappe Version", {"public": True}, pluck="name") added_versions = frappe.get_all("Marketplace App Version", {"parent": name}, pluck="version") app = frappe.db.get_value("Marketplace App", name, "app") - source = frappe.get_value("App Source", {"app": app, "team": get_current_team()}) - branches_list = branches(source) + sources = frappe.get_all("App Source", {"app": app, "team": get_current_team()}) + + branches_list = [] + for source in sources: + branches_list.append(branches(source)) + branches_list = list(set(branches_list)) + versions = list(set(frappe_version).difference(set(added_versions))) - branches_list = [branch["name"] for branch in branches_list] return [{"version": version, "branch": branches_list} for version in versions] @protected("Marketplace App") @frappe.whitelist() -def add_version(name, branch, version): +def add_version(name, repo_owner, repo_name, branch, version): app = frappe.get_doc("Marketplace App", name) - app.add_version(version, branch) + app.add_version(version, repo_owner, repo_name, branch) @protected("Marketplace App") diff --git a/press/press/doctype/marketplace_app/marketplace_app.py b/press/press/doctype/marketplace_app/marketplace_app.py index f7c2ad3dc4c..c80ce0d9343 100644 --- a/press/press/doctype/marketplace_app/marketplace_app.py +++ b/press/press/doctype/marketplace_app/marketplace_app.py @@ -342,7 +342,7 @@ def change_branch(self, source, version, to_branch): self.save() @dashboard_whitelist() - def add_version(self, version, branch): + def add_version(self, version, repo_owner, repo_name, branch): existing_source = frappe.db.exists( "App Source", [ @@ -350,6 +350,8 @@ def add_version(self, version, branch): ["App Source", "team", "=", self.team], ["App Source", "branch", "=", branch], ["App Source", "enabled", "=", 1], + ["App Source", "repository", "=", repo_name], + ["App Source", "repository_owner", "=", repo_owner], ], ) source_doc: "AppSource" = ( From 785f6162539514ba9d3fe71bc8a262921aef5265 Mon Sep 17 00:00:00 2001 From: Jayanta Pandit <55305804+regdocs@users.noreply.github.com> Date: Mon, 20 Apr 2026 10:15:52 +0530 Subject: [PATCH 2/3] fix(marketplace): Add type hints --- press/api/marketplace.py | 4 ++-- press/press/doctype/marketplace_app/marketplace_app.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/press/api/marketplace.py b/press/api/marketplace.py index 872b11a45d5..deb1f4cf1ad 100644 --- a/press/api/marketplace.py +++ b/press/api/marketplace.py @@ -1213,7 +1213,7 @@ def subscriptions(): @protected("App Source") @frappe.whitelist() -def branches(name): +def branches(name: str): from press.api.github import branches as git_branches app_source = frappe.db.get_value( @@ -1256,7 +1256,7 @@ def options_for_version(name): @protected("Marketplace App") @frappe.whitelist() -def add_version(name, repo_owner, repo_name, branch, version): +def add_version(name: str, repo_owner: str, repo_name: str, branch: str, version: str): app = frappe.get_doc("Marketplace App", name) app.add_version(version, repo_owner, repo_name, branch) diff --git a/press/press/doctype/marketplace_app/marketplace_app.py b/press/press/doctype/marketplace_app/marketplace_app.py index c80ce0d9343..2f8e46e1876 100644 --- a/press/press/doctype/marketplace_app/marketplace_app.py +++ b/press/press/doctype/marketplace_app/marketplace_app.py @@ -342,7 +342,7 @@ def change_branch(self, source, version, to_branch): self.save() @dashboard_whitelist() - def add_version(self, version, repo_owner, repo_name, branch): + def add_version(self, version: str, repo_owner: str, repo_name: str, branch: str): existing_source = frappe.db.exists( "App Source", [ From a248ce80be31608aacf77ba167f473429c31a122 Mon Sep 17 00:00:00 2001 From: Jayanta Pandit <55305804+regdocs@users.noreply.github.com> Date: Mon, 20 Apr 2026 12:00:23 +0530 Subject: [PATCH 3/3] fix(marketplace): Fix add_version tests --- press/api/tests/test_marketplace.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/press/api/tests/test_marketplace.py b/press/api/tests/test_marketplace.py index a44cb95c586..b64f9d08122 100644 --- a/press/api/tests/test_marketplace.py +++ b/press/api/tests/test_marketplace.py @@ -310,13 +310,15 @@ def test_change_branch(self): def test_add_version(self): old_versions = len(self.marketplace_app.sources) - add_version(self.marketplace_app.name, "develop", "Nightly") + repo_owner, repo_name = self.app_source.repository_url.rstrip("/").split("/")[-2:] + add_version(self.marketplace_app.name, repo_owner, repo_name, "develop", "Nightly") self.marketplace_app.reload() self.assertEqual(old_versions + 1, len(self.marketplace_app.sources)) def test_remove_version(self): old_versions = len(self.marketplace_app.sources) - add_version(self.marketplace_app.name, "develop", "Nightly") + repo_owner, repo_name = self.app_source.repository_url.rstrip("/").split("/")[-2:] + add_version(self.marketplace_app.name, repo_owner, repo_name, "develop", "Nightly") remove_version(self.marketplace_app.name, "Nightly") self.marketplace_app.reload() self.assertEqual(old_versions, len(self.marketplace_app.sources))