Skip to content

Commit 2b5f0b0

Browse files
committed
improve service version management for ArgoCD. fixes #200
1 parent 198dbb5 commit 2b5f0b0

File tree

5 files changed

+31
-4
lines changed

5 files changed

+31
-4
lines changed

src/edge_containers_cli/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def deploy(
9999
def confirm_callback(svc_version):
100100
confirmation(
101101
f"Deploy {service_name.lower()} "
102-
f"of version `{svc_version}` to target `{backend.commands.target}`",
102+
f" version `{svc_version}` to target `{backend.commands.target}`",
103103
yes,
104104
)
105105

src/edge_containers_cli/cmds/argo_commands.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
ServicesSchema,
2222
)
2323
from edge_containers_cli.definitions import ECContext
24-
from edge_containers_cli.git import del_key, set_value
24+
from edge_containers_cli.git import check_exists, del_key, set_value
2525
from edge_containers_cli.logging import log
2626
from edge_containers_cli.shell import ShellError, shell
2727
from edge_containers_cli.utils import YamlTypes
@@ -142,9 +142,17 @@ def delete(self, service_name: str) -> None:
142142
push_remove_key(self.target, f"ec_services.{service_name}")
143143

144144
def deploy(self, service_name, version, args, confirm_callback=None) -> None:
145-
latest_version = self._get_latest_version(service_name)
146145
if not version:
146+
latest_version = self._get_latest_version(service_name)
147147
version = latest_version
148+
149+
service_path = Path(globals.SERVICES_DIR) / service_name
150+
if not check_exists(service_path, self.repo, version):
151+
raise CommandError(
152+
f"Service '{service_name}' not found in repo "
153+
f"'{self.repo}' with branch/tag '{version}'"
154+
)
155+
148156
if confirm_callback:
149157
confirm_callback(version)
150158
deploy_dict: YamlTypes = {"enabled": True, "targetRevision": version}

src/edge_containers_cli/cmds/k8s_commands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ def delete(self, service_name, commit=False):
5252
)
5353

5454
def deploy(self, service_name, version, args, confirm_callback=None):
55-
latest_version = self._get_latest_version(service_name)
5655
if not version:
56+
latest_version = self._get_latest_version(service_name)
5757
version = latest_version
5858

5959
chart = Helm(

src/edge_containers_cli/git.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,20 @@ def list_instances(
234234
sorted_list = natsorted(svc_list)[::-1]
235235
services_df = polars.from_dict({"version": sorted_list})
236236
return services_df
237+
238+
239+
def check_exists(path: Path, repo: str, tag: str) -> bool:
240+
"""
241+
Check if a path exists within the given repository and tag/branch.
242+
"""
243+
with new_workdir() as working_dir:
244+
try:
245+
shell.run_command(f"git clone {repo} -b {tag} {working_dir}")
246+
except ShellError:
247+
log.debug(f"Branch or tag '{tag}' does not exist in repo '{repo}'.")
248+
return False
249+
full_path = Path(working_dir) / path
250+
if not full_path.exists():
251+
log.debug(f"'{path}' does not exist in repo '{repo}', tag {tag}.")
252+
return False
253+
return True

tests/data/argocd.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ deploy:
6464
- cmd: git ls-tree -r 2.0
6565
rsp: |
6666
100644 blob b7b39845b55fb4d45d58ba86ef4527917877d556 services/bl01t-ea-test-01/Chart.yaml
67+
- cmd: git clone https://github.com/epics-containers/bl01t-services -b 1.0 /tmp/ec_tests
68+
rsp: ""
6769
- cmd: argocd app get namespace/bl01t
6870
rsp: |
6971
spec:

0 commit comments

Comments
 (0)