cyclo-manager 0.2.0.dev3__tar.gz → 0.2.0.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/PKG-INFO +1 -1
  2. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_host_agent/routers/repos.py +18 -25
  3. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager.egg-info/PKG-INFO +1 -1
  4. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/pyproject.toml +1 -1
  5. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/README.md +0 -0
  6. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_host_agent/__init__.py +0 -0
  7. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_host_agent/main.py +0 -0
  8. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_host_agent/models.py +0 -0
  9. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_host_agent/routers/__init__.py +0 -0
  10. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_host_agent/routers/update.py +0 -0
  11. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager.egg-info/SOURCES.txt +0 -0
  12. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager.egg-info/dependency_links.txt +0 -0
  13. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager.egg-info/entry_points.txt +0 -0
  14. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager.egg-info/requires.txt +0 -0
  15. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager.egg-info/top_level.txt +0 -0
  16. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager_cli/__init__.py +0 -0
  17. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager_cli/cli.py +0 -0
  18. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager_cli/config/config.yml +0 -0
  19. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/cyclo_manager_cli/docker/docker-compose.yml +0 -0
  20. {cyclo_manager-0.2.0.dev3 → cyclo_manager-0.2.0.dev4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cyclo-manager
3
- Version: 0.2.0.dev3
3
+ Version: 0.2.0.dev4
4
4
  Summary: cyclo_manager CLI: pip-installable launcher for cyclo_manager server and UI containers. Run 'cyclo_manager up' to start Docker stack.
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -19,10 +19,8 @@
19
19
  """Repository management endpoints."""
20
20
 
21
21
  import asyncio
22
- import json
23
22
  import os
24
23
  import re
25
- import urllib.request
26
24
  from pathlib import Path
27
25
  from typing import Optional
28
26
 
@@ -133,21 +131,14 @@ def _is_newer(latest: str, current: str) -> bool:
133
131
  return _parse_version(latest) > _parse_version(current)
134
132
 
135
133
 
136
- def _parse_github_slug(remote_url: str) -> Optional[str]:
137
- https_match = re.match(r'https?://github\.com/([^/]+/[^/]+?)(?:\.git)?/?$', remote_url)
134
+ def _is_managed_remote(remote_url: str) -> bool:
135
+ https_match = re.match(r'https?://github\.com/([^/]+)/', remote_url)
138
136
  if https_match:
139
- return https_match.group(1)
140
- ssh_match = re.match(r'git@github\.com:([^/]+/[^/]+?)(?:\.git)?$', remote_url)
137
+ return https_match.group(1).lower() == MANAGED_GITHUB_ORG.lower()
138
+ ssh_match = re.match(r'git@github\.com:([^/]+)/', remote_url)
141
139
  if ssh_match:
142
- return ssh_match.group(1)
143
- return None
144
-
145
-
146
- def _is_managed_remote(remote_url: str) -> bool:
147
- slug = _parse_github_slug(remote_url)
148
- if not slug:
149
- return False
150
- return slug.split('/')[0].lower() == MANAGED_GITHUB_ORG.lower()
140
+ return ssh_match.group(1).lower() == MANAGED_GITHUB_ORG.lower()
141
+ return False
151
142
 
152
143
 
153
144
  def _read_package_xml_version(repo_path: Path) -> Optional[str]:
@@ -164,15 +155,18 @@ def _read_package_xml_version(repo_path: Path) -> Optional[str]:
164
155
  return None
165
156
 
166
157
 
167
- def _fetch_github_latest(slug: str) -> Optional[str]:
168
- url = f'https://api.github.com/repos/{slug}/releases/latest'
169
- req = urllib.request.Request(url, headers={'User-Agent': 'cyclo-manager/1.0'})
170
- try:
171
- with urllib.request.urlopen(req, timeout=10) as resp:
172
- data = json.loads(resp.read().decode())
173
- return (data.get('tag_name') or '').strip() or None
174
- except Exception:
158
+ async def _fetch_latest_tag(remote_url: str) -> Optional[str]:
159
+ rc, out, _ = await _git(['ls-remote', '--tags', remote_url])
160
+ if rc != 0:
161
+ return None
162
+ tags = []
163
+ for line in out.splitlines():
164
+ if 'refs/tags/' not in line or '^{}' in line:
165
+ continue
166
+ tags.append(line.split('refs/tags/')[-1].strip())
167
+ if not tags:
175
168
  return None
169
+ return max(tags, key=_parse_version)
176
170
 
177
171
 
178
172
  async def _repo_update_status(repo_path: Path) -> Optional[RepoUpdateStatus]:
@@ -182,12 +176,11 @@ async def _repo_update_status(repo_path: Path) -> Optional[RepoUpdateStatus]:
182
176
  if not remote_url or not _is_managed_remote(remote_url):
183
177
  return None
184
178
 
185
- slug = _parse_github_slug(remote_url)
186
179
  current = _read_package_xml_version(repo_path)
187
180
  if not current:
188
181
  return RepoUpdateStatus(name=repo_path.name, has_update=False)
189
182
 
190
- latest = await asyncio.to_thread(_fetch_github_latest, slug)
183
+ latest = await _fetch_latest_tag(remote_url)
191
184
  if not latest:
192
185
  return RepoUpdateStatus(name=repo_path.name, current_version=current, has_update=False)
193
186
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cyclo-manager
3
- Version: 0.2.0.dev3
3
+ Version: 0.2.0.dev4
4
4
  Summary: cyclo_manager CLI: pip-installable launcher for cyclo_manager server and UI containers. Run 'cyclo_manager up' to start Docker stack.
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cyclo-manager"
7
- version = "0.2.0.dev3"
7
+ version = "0.2.0.dev4"
8
8
  description = "cyclo_manager CLI: pip-installable launcher for cyclo_manager server and UI containers. Run 'cyclo_manager up' to start Docker stack."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"