diff --git a/dashboard/src/objects/marketplace.js b/dashboard/src/objects/marketplace.js index 3b234cd0f9..e4bddad3c9 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 57ceba5840..1bb44ea69b 100644 --- a/press/api/marketplace.py +++ b/press/api/marketplace.py @@ -1234,8 +1234,8 @@ def branches(name: str): 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") @@ -1251,19 +1251,23 @@ def options_for_version(name: str): 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: str, branch: str, version: str): +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, branch) + app.add_version(version, repo_owner, repo_name, branch) @protected("Marketplace App") diff --git a/press/api/tests/test_marketplace.py b/press/api/tests/test_marketplace.py index a44cb95c58..b64f9d0812 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)) diff --git a/press/press/doctype/marketplace_app/marketplace_app.py b/press/press/doctype/marketplace_app/marketplace_app.py index 31df7cf978..d284235a80 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: str, branch: str): + def add_version(self, version: str, repo_owner: str, repo_name: str, branch: str): existing_source = frappe.db.exists( "App Source", [ @@ -350,6 +350,8 @@ def add_version(self, version: str, branch: str): ["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" = (