Skip to content

Commit

Permalink
add (probably bad) way to handle nested references
Browse files Browse the repository at this point in the history
  • Loading branch information
funkecoder23 authored and funkecoder23 committed Jun 27, 2024
1 parent 9446fe5 commit f0f5826
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 2 deletions.
10 changes: 10 additions & 0 deletions scuba/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,16 @@ def _process_reference(doc: dict, key: Reference) -> Any:
cur = cur[k]
except KeyError:
raise yaml.YAMLError(f"Key {key!r} not found")
if isinstance(cur, list):
new_cur = []
for c in cur:
if isinstance(c, Reference):
# use += to concatenate list type
new_cur += _process_reference(doc, c)
else:
# use append to concatenate other types
new_cur.append(c)
cur = new_cur
return cur


Expand Down
67 changes: 65 additions & 2 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,10 +342,73 @@ def test_load_config_from_gitlab_reference_script_list(self) -> None:
important: !from_gitlab {GITLAB_YML} build.script
"""
)
assert config.image == "bosybux"
assert len(config.aliases) == 1
assert config.aliases["important"].script == ["do-something-really-important", "depends-on-important-stuff"]


def test_load_config_from_gitlab_nested_reference(self) -> None:
"""load a .gitlab-ci.yml with !reference in script"""
GITLAB_YML.write_text(
"""
.initial:
script:
- the-most-important-thing
.setup:
script:
- !reference [.initial, script]
- do-something-really-important
build:
stage: build
script:
- !reference [.setup, script]
- depends-on-important-stuff
"""
)
config = load_config(
config_text=f"""
image: bosybux
aliases:
important: !from_gitlab {GITLAB_YML} build.script
"""
)
assert config.aliases["important"].script == ["the-most-important-thing", "do-something-really-important", "depends-on-important-stuff"]

def test_load_config_from_gitlab_double_nested_reference(self) -> None:
"""load a .gitlab-ci.yml with !reference in script"""
GITLAB_YML.write_text(
"""
.preinit:
script:
- the-utmost-importance
.initial:
script:
- !reference [.preinit, script]
- the-most-important-thing
.setup:
script:
- !reference [.initial, script]
- do-something-really-important
build:
stage: build
script:
- !reference [.setup, script]
- depends-on-important-stuff
"""
)
config = load_config(
config_text=f"""
image: bosybux
aliases:
important: !from_gitlab {GITLAB_YML} build.script
"""
)
assert config.aliases["important"].script == ["the-utmost-importance","the-most-important-thing", "do-something-really-important", "depends-on-important-stuff"]


def test_load_config_from_gitlab_with_bad_reference(self) -> None:
"""load_config loads a config using !from_gitlab with !reference tag"""
GITLAB_YML.write_text(
Expand Down

0 comments on commit f0f5826

Please sign in to comment.