Skip to content
This repository was archived by the owner on Mar 13, 2026. It is now read-only.

Commit c318842

Browse files
added support to create package alias #200
1 parent 470db2b commit c318842

3 files changed

Lines changed: 18 additions & 6 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,7 @@ Check [Conan Build policies](https://docs.conan.io/en/latest/mastering/policies.
11271127
- **force_selinux**: Force docker to relabel file objects on the shared volumes
11281128
- **skip_recipe_export**: If True, the package recipe will only be exported on the first build. Default [False]
11291129
- **update_dependencies**: Update all dependencies before building e.g conan create -u
1130+
- **version_alias**: Create a version alias for created packages. For example: if CPT_VERSION_ALIAS=latest, the package alias pkg_name/latest@user/channel will be created.
11301131
11311132
Upload related parameters:
11321133
@@ -1287,7 +1288,7 @@ Check [Conan Build policies](https://docs.conan.io/en/latest/mastering/policies.
12871288
- **CONAN_FORCE_SELINUX**: Force docker to relabel file objects on the shared volumes
12881289
- **CONAN_SKIP_RECIPE_EXPORT**: If defined, the package recipe will only be exported on the first build.
12891290
- **CPT_UPDATE_DEPENDENCIES**: Update all dependencies before building e.g conan create -u
1290-
1291+
- **CPT_VERSION_ALIAS**: Create a version alias for created packages. For example: if CPT_VERSION_ALIAS=latest, the package alias pkg_name/latest@user/channel will be created.
12911292
12921293
# Full example
12931294

cpt/packager.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ def __init__(self, username=None, channel=None, runner=None,
142142
force_selinux=None,
143143
skip_recipe_export=False,
144144
update_dependencies=None,
145-
lockfile=None):
145+
lockfile=None,
146+
version_alias=None):
146147

147148
conan_version = get_client_version()
148149

@@ -205,6 +206,7 @@ def __init__(self, username=None, channel=None, runner=None,
205206
self.partial_reference = reference or os.getenv("CONAN_REFERENCE", None)
206207
self.channel = self._get_specified_channel(channel, reference)
207208
self.conanfile = conanfile or os.getenv("CONAN_CONANFILE", "conanfile.py")
209+
self.version_alias = version_alias or os.getenv("CPT_VERSION_ALIAS", None)
208210

209211
if self.partial_reference:
210212
if "@" in self.partial_reference:
@@ -683,7 +685,8 @@ def run_builds(self, curpage=None, total_pages=None, base_profile_name=None):
683685
conanfile=self.conanfile,
684686
lockfile=self.lockfile,
685687
skip_recipe_export=skip_recipe_export,
686-
update_dependencies=self.update_dependencies)
688+
update_dependencies=self.update_dependencies,
689+
version_alias = self.version_alias)
687690
r.run()
688691
self._packages_summary.append({"configuration": build, "package" : r.results})
689692
else:
@@ -718,7 +721,8 @@ def run_builds(self, curpage=None, total_pages=None, base_profile_name=None):
718721
lockfile=self.lockfile,
719722
force_selinux=self.force_selinux,
720723
skip_recipe_export=skip_recipe_export,
721-
update_dependencies=self.update_dependencies)
724+
update_dependencies=self.update_dependencies,
725+
version_alias = self.version_alias)
722726

723727
r.run(pull_image=not pulled_docker_images[docker_image],
724728
docker_entry_script=self.docker_entry_script)

cpt/runner.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def __init__(self, profile_abs_path, reference, conan_api, uploader,
2020
cwd=None, printer=None, upload=False, upload_only_recipe=None,
2121
test_folder=None, config_url=None, config_args=None,
2222
upload_dependencies=None, conanfile=None, skip_recipe_export=False,
23-
update_dependencies=False, lockfile=None):
23+
update_dependencies=False, lockfile=None, version_alias=None):
2424

2525
self.printer = printer or Printer()
2626
self._cwd = cwd or os.getcwd()
@@ -48,6 +48,7 @@ def __init__(self, profile_abs_path, reference, conan_api, uploader,
4848
self.skip_recipe_export = skip_recipe_export
4949
self._update_dependencies = update_dependencies
5050
self._results = None
51+
self._version_alias = version_alias
5152

5253
patch_default_base_profile(conan_api, profile_abs_path)
5354
client_version = get_client_version()
@@ -154,6 +155,10 @@ def run(self):
154155
else:
155156
self._uploader.upload_packages(reference,
156157
self._upload, package_id)
158+
if self._version_alias:
159+
reference_alias = reference.replace(installed["recipe"]["version"], self._version_alias)
160+
self._conan_api.export_alias(reference_alias, reference)
161+
self._uploader.upload_recipe(reference_alias, self._upload)
157162
else:
158163
self.printer.print_message("Skipping upload for %s, "
159164
"it hasn't been built" % package_id)
@@ -182,7 +187,8 @@ def __init__(self, profile_text, base_profile_text, base_profile_name, reference
182187
force_selinux=None,
183188
skip_recipe_export=False,
184189
update_dependencies=False,
185-
lockfile=None):
190+
lockfile=None,
191+
version_alias=None):
186192

187193
self.printer = printer or Printer()
188194
self._upload = upload
@@ -217,6 +223,7 @@ def __init__(self, profile_text, base_profile_text, base_profile_name, reference
217223
self._force_selinux = force_selinux
218224
self._skip_recipe_export = skip_recipe_export
219225
self._update_dependencies = update_dependencies
226+
self._version_alias = version_alias
220227

221228
def _pip_update_conan_command(self):
222229
commands = []

0 commit comments

Comments
 (0)