Skip to content

Commit df27f71

Browse files
committed
Properly handle dependency specifications
1 parent f22b460 commit df27f71

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

codeql_bundle/helpers/bundle.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ def _validate_pack(self, pack: ResolvedCodeQLPack) -> None:
8989
)
9090

9191
dep_pack = self.available_packs[dep_name]
92-
if pack.dependencies[dep_name] > dep_pack.version:
92+
if not pack.dependencies[dep_name].match(dep_pack.version):
9393
raise BundleException(
94-
f"Package {pack.name} depends on version {pack.dependencies[dep_name]} of pack {dep_pack.name}, but the bundle contains {dep_pack.version}",
94+
f"Package {pack.name} depends on version specification {pack.dependencies[dep_name]} of pack {dep_pack.name}, but the bundle contains {dep_pack.version}",
9595
)
9696
logging.info(f"The CodeQL pack {pack.name}'s dependencies are satisfied.")
9797

codeql_bundle/helpers/codeql.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import subprocess
22
import json
3-
from semantic_version import Version
3+
from semantic_version import Version, NpmSpec
44
from pathlib import Path
55
from typing import Dict, Any, Iterable, Self, Optional, List
66
import yaml
@@ -20,14 +20,22 @@ class CodeQLPack:
2020
library: bool = False
2121
name: str
2222
version: Version = Version("0.0.0")
23-
dependencies: Dict[str, Version] = field(default_factory=dict)
23+
dependencies: Dict[str, NpmSpec] = field(default_factory=dict)
2424
extractor: Optional[str] = None
2525

2626
@classmethod
2727
def from_dict(cls, dict_: Dict[str, Any]) -> Self:
2828
fieldset = {f.name for f in fields(cls) if f.init}
2929

30-
filtered_dict = {k: v for k, v in dict_.items() if k in fieldset}
30+
def _convert_value(k : str, v : Any) -> Any:
31+
if k == "version":
32+
return Version(v)
33+
elif k == "dependencies":
34+
return {k: NpmSpec(v) for k, v in v.items()}
35+
else:
36+
return v
37+
38+
filtered_dict = {k: _convert_value(k, v) for k, v in dict_.items() if k in fieldset}
3139
return cls(**filtered_dict)
3240

3341
def get_scope(self) -> Optional[str]:

0 commit comments

Comments
 (0)