Description
For a long time, I've felt that Rez could benefit from some kind of package tagging mechanism.
While I have very specific tags that I'd like implemented for my workflow (experimental
, new
and deprecated
), not every workflow is the same, and keeping these customizable would likely be best.
A tag
would specifically not be part of the package.py, but be added as a side-file, in the manner of the .ignore files
, as they would represent different "stages" of a package's lifetime. And maybe "tag" isn't the right term to use for this, I'm specifically looking for something that would change over time, hence why it would be a sidecar to preserve the integrity of the package itself.
These tags would be accessible to the package filters and package orderers, and show up in the resolve information similarly to some of the existing qualifiers currently showing up:
Packages would support multiple simultaneous tags.
Motivation
This feature would greatly simplify the management of the lifecycle of packages.
Look at #631:
The user wants to have a way to indicate a preferred version that isn't necessarily the latest version of a package released.
They could create a tag preferred
, and in their package orderer indicate that preferred
packages should be resolved before non-preferred ones. Whenever they're ready to move on to a newer version, they can tag a different version as preferred
without re-releasing anything.
For my own desired workflow:
experimental
packages would be filtered out by default, but users desiring to test the upcoming pipeline changes could opt-in to loading experimental packages.new
packages would be included by default in the resolve without any specific filters or orderers, but would show on the resolve to indicate to the users that the resolved package is a recent release. Optionally, when a user runs into issues and wants to revert to a "true and tested" environment could add a filter to ignorenew
packages.deprecated
packages would be ordered very last, to prevent them from getting picked, unless necessary.
You could almost think of .ignore
as the next tag in the lifetime, where after being deprecated for a while, the package is ignored before complete removal, and .build
as the very first tag when the package is still building.