Skip to content

[Feature] Package Tags  #1694

Open
Open
@herronelou

Description

@herronelou

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:
image

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 ignore new 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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions