Skip to content

Commit edd551e

Browse files
committed
fix: support :{{ Channel }} tags for matrix development versions
1 parent e6766a7 commit edd551e

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

posit-bakery/posit_bakery/config/image/dev_version/dependency.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ class ImageDevelopmentVersionFromDependency(BaseImageDevelopmentVersion):
3232
ReleaseChannelEnum | None,
3333
Field(default=None, description="Release channel for this dev version (e.g. 'daily', 'preview')."),
3434
] = None
35+
resolved_channel_latest: Annotated[
36+
bool,
37+
Field(
38+
exclude=True,
39+
default=False,
40+
description="Whether the resolved version equals the current channel head. "
41+
"Populated by _resolve_os_urls(); used to suppress floating {{ Channel }} tags "
42+
"for builds targeting older versions.",
43+
),
44+
]
3545

3646
@field_validator("channel", mode="after")
3747
@classmethod
@@ -44,14 +54,21 @@ def channel_not_release(cls, v: ReleaseChannelEnum | None) -> ReleaseChannelEnum
4454
return v
4555

4656
def get_version(self) -> str:
57+
# If overridden by a dev spec, return immediately and do not assume latest.
4758
if self.version_override is not None:
4859
return self.version_override
60+
61+
# If resolving a version, assume latest.
62+
self.resolved_channel_latest = True
63+
64+
# Resolve the latest version via constraint with prerelease.
4965
constraint_class = get_dependency_constraint_class(self.dependency)
5066
constraint = constraint_class(
5167
prerelease=self.prerelease,
5268
constraint=VersionConstraint(latest=True, count=1),
5369
)
5470
result = constraint.resolve_versions()
71+
5572
return str(result.versions[0])
5673

5774
def _get_dependencies_for_matrix(self, version: str) -> list:

posit-bakery/posit_bakery/config/tag.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,5 +194,17 @@ def default_matrix_tag_patterns() -> list[TagPattern]:
194194
patterns=["{{ Version | stripPatch }}"],
195195
only=[TagPatternFilter.LATEST_PATCH, TagPatternFilter.PRIMARY_OS, TagPatternFilter.PRIMARY_VARIANT],
196196
),
197+
TagPattern(
198+
patterns=["{{ Channel }}-{{ Variant }}"],
199+
only=[TagPatternFilter.CHANNEL_LATEST, TagPatternFilter.PRIMARY_OS],
200+
),
201+
TagPattern(
202+
patterns=["{{ Channel }}-{{ OS }}"],
203+
only=[TagPatternFilter.CHANNEL_LATEST, TagPatternFilter.PRIMARY_VARIANT],
204+
),
205+
TagPattern(
206+
patterns=["{{ Channel }}"],
207+
only=[TagPatternFilter.CHANNEL_LATEST, TagPatternFilter.PRIMARY_OS, TagPatternFilter.PRIMARY_VARIANT],
208+
),
197209
*_shared_latest_tag_patterns(),
198210
]

0 commit comments

Comments
 (0)