Skip to content

📖 F28 - Provided service versions (aka 'Operand versioning') #180

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 19, 2024

Conversation

tlwu2013
Copy link
Contributor

@tlwu2013 tlwu2013 commented Apr 20, 2023

This is the feature request received in the past for OLM to expose the "provided service versions" (aka "Operand versioning") offered by the Operator/extension.

As extensions can only be installed once in a cluster as cluster-wide singletons with OLM 1.0, it is likely for an extension to oversee multiple versions of service and utilize a distinct versioning scheme. This should be a part of the OLM v1 requirement.

Related work in the past (Feb, 2021): https://hackmd.io/IEYEaOYkR-eBkMQkbVrC1A?view

@dmesser
Copy link

dmesser commented Apr 20, 2023

cc @cdjohnson @Jamstah @pgodowski

@@ -77,6 +77,8 @@ _Priority Rating: 1 highest, 2 medium, 3 lower (e.g. P2 = Medium Priority)_

**F27 - Pluggable certificate management (P2):** OLM should rely on other controllers to create and lifecycle TLS certificates required to drive the functionality of certain extensions, like webhooks that need to trust / need to be trusted by the cluster's API server. OLM should not implement any certificate handling itself. In a first implementation support should be established for cert-manager.

**F28 - Provided service versions (P2):** Extensions can offer multiple services with specific version ranges. To help cluster users make informed decisions about which extension version to install or update, OLM should provide a separate field for extension developers to specify the provided services and their respective versions. This will allow for declaring extension dependencies on specific service versions and enable flexibility in releasing extensions and their corresponding services at different cadences. In disconnected environments, cluster users should be able to deselect provided services and versions during image mirroring.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will allow for declaring extension dependencies on specific service versions and enable flexibility in releasing extensions and their corresponding services at different cadences.

Can we walk through some examples of how this would work? If an operator author declared a dependency like "I need an operator that provides Kafka v3.4.0", and two different operators (call them A and B) with two different APIs say they manage Kafka v3.4.0, OLM might pick B, the "wrong" operator. The depender may only know about A's API. It seems like the service version dependency would need to be an addition to the required GVK or operator version constraints. So you would have to say "I depend on this GVK and service version range" OR "I depend on this package, package version range, and service version range". Is that what we have in mind here?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hadn't really thought about operand versioning and its use in operator-to-operator dependencies but it does make sense as a use case.

I feel that a service is represented by a GVK. If an operator provide v3.4.0 of Kafka then I would expect to make a Kafka CR with a spec.version: 3.4.0, or something along those lines. So the dependency would be:

  • GVK: kafkas.apigroup.provider.com/v1beta1
  • Operand version: 3.4.0
  • Specific package range: (optional)

In this instance, we wouldn't even need OLM to understand that its the spec.version field in the CR that identifies the version being used.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this instance, we wouldn't even need OLM to understand that its the spec.version field in the CR that identifies the version being used.

Correct.

My main point here is that this can't be a standalone constraint. It has to be tied to the operator name or the provided API.

Copy link
Contributor Author

@tlwu2013 tlwu2013 Jun 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If an operator author declared a dependency like "I need an operator that provides Kafka v3.4.0", and two different operators (call them A and B) with two different APIs say they manage Kafka v3.4.0, OLM might pick B, the "wrong" operator. The depender may only know about A's API. It seems like the service version dependency would need to be an addition to the required GVK or operator version constraints. So you would have to say "I depend on this GVK and service version range" OR "I depend on this package, package version range, and service version range". Is that what we have in mind here?

Correct, this "service version dependency" should be used as an addition to the "required GVK" or "Operator version constraint" to narrow down to:

  • a specific range of Operator versions (if used with "GVK" which is shared across multiple operand versions)
  • or "a specific image of Operand/provided service" (if used "Operator version constraint" and a single Operator version provides multiple versions of operand/provided service).

In this instance, we wouldn't even need OLM to understand that its the spec.version field in the CR that identifies the version being used.

Correct.

My main point here is that this can't be a standalone constraint. It has to be tied to the operator name or the provided API.

Correct, the main point is this "service version dependency" is not a standalone thing.

But in this Kafka example, Operand version: 3.4.0 is also useful because the GVK kafkas.apigroup.provider.com/v1beta1 is the same for multiple Kafka version. So Kafka/Operand version: 3.4.0 is useful to narrow down to a tighter Operator version range and pin point the desired Operand image for Kafka 3.4.0 within the target Operator version.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will allow for declaring extension dependencies as an additional constraint on specific service versions and enable flexibility in releasing extensions and their corresponding services at different cadences.

Add "as an additional constraint" to clarify it is not intended as a standalone constraint

@@ -77,6 +77,8 @@ _Priority Rating: 1 highest, 2 medium, 3 lower (e.g. P2 = Medium Priority)_

**F27 - Pluggable certificate management (P2):** OLM should rely on other controllers to create and lifecycle TLS certificates required to drive the functionality of certain extensions, like webhooks that need to trust / need to be trusted by the cluster's API server. OLM should not implement any certificate handling itself. In a first implementation support should be established for cert-manager.

**F28 - Provided service versions (P2):** Extensions can offer multiple services with specific version ranges. To help cluster users make informed decisions about which extension version to install or update, OLM should provide a separate field for extension developers to specify the provided services and their respective versions. This will allow for declaring extension dependencies on specific service versions and enable flexibility in releasing extensions and their corresponding services at different cadences. In disconnected environments, cluster users should be able to deselect provided services and versions during image mirroring.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In disconnected environments, cluster users should be able to deselect provided services and versions during image mirroring.

This seems like it will lead to a poor UX for end users of the operator. There are several scenarios that could be problematic:

  1. An operator provides services A and B, but the mirroring user mirrors only service A. The operator API for service B is still present, so an end user tries to use that API. The operator doesn't know which services have been mirrored (i.e. which operand images have been mirrored), so it happily attempts to handle the request for service B. The result is "ImagePullBackoff" on all of the service B images with no indication to the user about why. To them, it looks like a bug in the operator.
  2. Operators that support multiple versions are very likely to have complex upgrade logic between those versions. If mirroring users are able to selectively remove arbitrary versions at mirror time, an operator may not be able to perform its essential function of performing operand migrations via a series of service version upgrades. Again, the operator and end user will see ImagePullBackoff if a mirror user has inadvertently opted not to mirror an intermediate service version required for a migration.

Are these acceptable outcomes?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find myself thinking whether this type of configuration (reducing the the operators behavior surface) should be OLMs concern, or rather that of some operator side library/framework which makes this kind of configuration easy.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to reach some consensus on the boundary between the OLM's and the operator's responsibilities. IMHO OLM should only concern itself with installation/update/removal of operators. Configuration is something outside of that. Though, I'd be curious to see if we could have some kind of separate component within the OLM ecosystem that can handle this in a nice way.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that OLM should only be concerned with installation/update/removal.

I can't see a good way for OLM (or the operator) to know if an image pull is going to succeed or fail before it is attempted. Although it would be great to be able to indicate to a user that the problem is that something wasn't mirrored vs a registry auth error, a missing image, or any other multitude of problems, I wouldn't consider that to be in scope either.

I do think though that we need the metadata available in the package to allows the user to select the service versions that they want to mirror. This does leave potential sharp edges at runtime, where if you attempt to use a version that wasn't mirrored you will get pull errors, but the alternative is that the user has to mirror everything. As we're explicitly saying that fan-out operators are going to be more common because all operators will be cluster singletons, the mirror size expands extremely fast.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The potential problem I'm trying to highlight is that if OLM has a first class API for declaring service versions AND a first class mirror API for selecting specific service versions, then OLM (or maybe the mirroring tool) will be pinned with the blame when an image pull inevitably fails because an intermediate version wasn't mirrored.

"I used the mirror API to select the service version images I cared about, and now I'm getting image pull errors. OLM and the mirror tool should mirror all necessary images based on my stated desires" is what the bug reports will say.

And that means we'll have to extend the service version API with an upgrade edge specification, we'll have to tell operator authors to keep that up-to-date with their operator code, and the mirror tool API will have to allow the mirror user to tell it which service versions have already been mirrored. With all of that, then and only then will the mirror tool be able to follow the graph to mirror all the intermediate versions.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To confirm, you're talking about the case where the operator needs to pass a workload through intermediate versions for upgrade, so:

  • Operand version 1.0.0 exists
  • The user mirrors 1.0.0 and starts using it
  • Operand versions 1.1.0, 1.2.0 are released in the latest operator
  • The user adds 1.2.0 to their mirror, because that's what they want to upgrade to
  • The user changes the workload CR to 1.2.0
  • The operator starts by attempting a 1.1.0 upgrade
  • The pull fails!

Is that the scenario?

Copy link
Contributor Author

@tlwu2013 tlwu2013 Jun 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In disconnected environments, cluster users should be able to deselect provided services and versions during image mirroring.

This is coming from a requirement of Operators that provide multiple Add-Ons in addition to the primary provided services. e.g., Upstream OCM (or RHACM) Operator that comes with VolSync and Submariner Add-ons.

Enable users to deselect mirroring images of a certain provided service that are not interested in can greatly improve the mirroring time, traffic, and storage size.

There are several scenarios that could be problematic:

  1. An operator provides services A and B, but the mirroring user mirrors only service A. The operator API for service B is still present, so an end user tries to use that API. The operator doesn't know which services have been mirrored (i.e. which operand images have been mirrored), so it happily attempts to handle the request for service B. The result is "ImagePullBackoff" on all of the service B images with no indication to the user about why. To them, it looks like a bug in the operator.

Right, so in that case, it's very clear this is the intended/expected behavior explicitly set up by the admins, so it should be on the admins to make this clear to their teams. And as you mentioned, end-users/developers should be able to see the ImagePullBackof too (so they know the image is missing in their internal registry).

  1. Operators that support multiple versions are very likely to have complex upgrade logic between those versions. If mirroring users are able to selectively remove arbitrary versions at mirror time, an operator may not be able to perform its essential function of performing operand migrations via a series of service version upgrades. Again, the operator and end user will see ImagePullBackoff if a mirror user has inadvertently opted not to mirror an intermediate service version required for a migration.

The thinking here is to set up a minVersion and maxVersion as the Operand/provided service version range for mirroring. e.g.,

A user specifies the desired Kafka versions as:

  • minVersion: 2.8.0
  • maxVersion: 3.2.0

, given Strimzi Operator declares:

  • version: 0.27.1, provides Kafka: 2.8.0, 2.8.1, 3.0.0
  • version: 0.28.0, provides Kafka: 3.0.0, 3.1.0
  • version: 0.29.0, provides Kafka: 3.0.0, 3.0.1, 3.1.0, 3.1.1, 3.2.0

, so mirroring tool can derive the target versions for mirroring Strimzi Operator are:

  • version: 0.27.1
  • version: 0.28.0
  • version: 0.29.0

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enable users to deselect mirroring images of a certain provided service that are not interested in can greatly improve the mirroring time, traffic, and storage size.

This thread makes me think we need to provide a more robust "relatedImages" API. Basically by definition, an operator is complex code that orchestrates $something in place of an expert human. In that context, the set of related images needed for that orchestration is also likely complex. Mirroring by service version is somewhat simplistic and may not align with the ways that operators want to expose what to mirror when.

Copy link
Member

@joelanford joelanford Jun 20, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In a separate thread @Jamstah said:

I don't think we can rely on operand versions being semver

I agree. Which means using minVersion and maxVersion for operand versions is likely not feasible.

@pgodowski
Copy link

cc @cdjohnson @Jamstah @pgodowski

Will review early next week, thanks for sharing!

@Jamstah
Copy link

Jamstah commented Apr 25, 2023

This PR focuses mainly on operator-to-operator dependencies, which is a great use case for being able to determine the service versions and keep the operator dependency graph complete.

The other high level use case for this is user selection of service versions, which I feel we should include more strongly. For example, if the user has a kafkas.apigroup.provider.com CR that is at operand version 3.4.0 then we shouldn't allow (or should at least warn) if the operator providing that API is upgraded past the point where it supports 3.4.0 any more. This would require that OLM have an idea of which field in the CR indicates the service version that is currently in use for that API.

Potentially, even if the user doesn't have a CR using that operand version right now, if that's what they asked for at install time then they should be warned if that service version is going away, although I'm not sure how/where that dependency would be recorded, or if we need it. Perhaps in the subscription? I guess this would be an issue for job style CRs that are created temporarily. Certainly a less urgent use case.

@joelanford
Copy link
Member

if the operator providing that API is upgraded past the point where it supports 3.4.0 any more.

That's a breaking change and that would warrant a major version bump of the operator. And I would expect:

  • operator authors to disclose this breakage in release notes
  • users not to upgrade to a version that contains a breaking change without understanding the ramifications.

Beyond that, the implications here seems to be that:

  1. APIs for services have a spec field somewhere that contain a service version string
  2. OLM knows how to find that field for each service API.

IMO, that is too opinionated. What if an API wants to expose the desired version as a range or as a channel containing multiple versions? IMO, going this far is beyond the scope of what I think OLM should have awareness of.

@Jamstah
Copy link

Jamstah commented Apr 27, 2023

APIs for services have a spec field somewhere that contain a service version string

I would have said that it would be a status field not a spec field, where the operator has resolved the constraints and reconciled a specific version, that then needs to be supported through any operator change.

OLM knows how to find that field for each service API.

Yes, OLM would need to know which field to look for, and that would need to be specific in some way (in the CSV?).

IMO, that is too opinionated. What if an API wants to expose the desired version as a range or as a channel containing multiple versions? IMO, going this far is beyond the scope of what I think OLM should have awareness of.

I'm in two minds here. Part of me thinks that its a good way to stop users shooting themselves in the foot, but I do agree that its a lot of additional complexity just for that use case. Removal of supported operand versions being a breaking change might be the right call, which would mean the user can rely on being in the right operator channel instead.

I was kind of equating it to the function in OpenShift that checks for deprecated API usage in the cluster and says "are you sure you want to upgrade? You're still using these API versions which won't be in the next OpenShift". I guess that's easier to track.

@joelanford
Copy link
Member

I guess that's easier to track.

That's the case because the thing that removes the deprecated API is the same thing that is doing this tracking, right? The analogy holds if the operator (which owns this API) is the thing doing this checking.

We're planning to have an OperatorHealth sort of API where the operator can raise these sorts of things and potentially prevent upgrades.

@Jamstah
Copy link

Jamstah commented Apr 27, 2023

Right, but the currently installed operator doesn't know the capabilities of the next one, so it doesn't know to prevent the upgrade.

Maybe that's why we need a pre-install hook of some kind. I'm definitely all for the operator making the call, because I don't think we can rely on operand versions being semver, which means only the operator can safely parse them.

@tlwu2013 tlwu2013 force-pushed the f28 branch 2 times, most recently from eea388b to 0778bfd Compare June 7, 2023 23:30
@joelanford
Copy link
Member

My overall perspective I think remains the same.

  1. There are two separate use cases here (dependency resolution and disconnected mirroring) that, IMO, are sufficiently different that the suggested API (declaration of supported service versions per bundle) can't solve them both in a way that supports the various approaches operators take to orchestrate their operands.
  2. I think adding this specific API, even if optional, will lead to us enshrining undesirable incentives. Use of this API will be perceived as a maturity thing: "Immature operators don't specify it, mature operators do." But that's an invalid assumption. Some operators don't have service versions at all. Others might have complex logic around choosing an operand version without actually exposing a direct choice by the end user. If we move forward with this API, I worry that we will pre-dispose operator authors to build their operators in a way that requires them to accept operand versions in their CRDs, and that might be a worse end-user experience than the operator managing the operand version.
  3. This opens a door that makes it more likely for operator authors to remove support for operand versions in a non-major-version-bump of an operator. It gives them a way to say, "Yeah, I removed support for an operand version, but I told you I did that, so it's not my responsibility to prevent upgrades if existing operands are at versions unsupported by the upgrade". This is not something OLM would be able to know (easily at least). If operator v1.28.0 supports operand versions v3.0.0 and v3.1.0 and lets an end user state their desire for v3.0.0 in an API, then all future operator v1 versions need to continue supporting v3.0.0. Otherwise the existing CR that says "use v3.0.0" will break.

TL;DR: I think we're trying to make OLM "all things for all people", and in doing so, I think we're wrapping ourselves into knots. I'm worried this is another knot. It solves one set of use cases, but adds friction to other -- equally valid -- use cases.

@tlwu2013
Copy link
Contributor Author

There are two separate use cases here (dependency resolution and disconnected mirroring) that, IMO, are sufficiently different that the suggested API (declaration of supported service versions per bundle) can’t solve them both in a way that supports the various approaches operators take to orchestrate their operands.

This API being optional is just so that the API does not need to support all kinds of approaches Operators take to orchestrate their operands, but the majority of the use cases (e.g., operand versioning following semver, etc).

I think adding this specific API, even if optional, will lead to us enshrining undesirable incentives. Use of this API will be perceived as a maturity thing: “Immature operators don’t specify it, mature operators do.” But that’s an invalid assumption. Some operators don’t have service versions at all. Others might have complex logic around choosing an operand version without actually exposing a direct choice by the end user. If we move forward with this API, I worry that we will pre-dispose operator authors to build their operators in a way that requires them to accept operand versions in their CRDs, and that might be a worse end-user experience than the operator managing the operand version.

This API does incentivize Operator authors to denote provided service versions clearly to their users following the guidance if their Operators do provide managed service(s) to showcase their maturity and I’d argue it’s in a good way. There are Operators out there that don’t ship any CRDs at all, but they are not viewed as inferior simply because of that. But if they do provide managed service(s), and they don’t clearly denote the supported version, then that’s a valid maturity issue.

This opens a door that makes it more likely for operator authors to remove support for operand versions in a non-major-version-bump of an operator. It gives them a way to say, “Yeah, I removed support for an operand version, but I told you I did that, so it’s not my responsibility to prevent upgrades if existing operands are at versions unsupported by the upgrade”. This is not something OLM would be able to know (easily at least). If operator v1.28.0 supports operand versions v3.0.0 and v3.1.0 and lets an end user state their desire for v3.0.0 in an API, then all future operator v1 versions need to continue supporting v3.0.0. Otherwise the existing CR that says “use v3.0.0” will break.

I don’t see how adding this will exacerbate “operator authors to remove support for operand versions in a non-major-version-bump of an operator” but rather with this Operand versioning thing, it helps greatly to expose this to the end-users, so users can either better prepared for that, or simply walked away toward another Operator does better in honoring semver. Just as you mentioned, without this Operand versioning, even OLM is having a hard time telling “if existing operands are at versions unsupported by the upgrade”. This is exactly the reason this API is critical to improving the visibility of this to both OLM and the end-users.

@dmesser
Copy link

dmesser commented Jun 22, 2023

Late to the party, it seems like we are discussing a couple of things in parallel so here is my attempt to bring into one larger picture:

A) users, relying on workload-managing operators, generally have a great desire to know upfront (before install or upgrade) what versions of the workload the desired operator version can manage

To your point @joelanford - not all operators are workload-managing operators. This kind of data will not make sense for something like Tekton or Isitio, which generally represent control planes and event-based automation facilities instead of managing a workload that is the actual thing that is consumed. Also automation-focussed operators like a namespace-configuration operator or cert-manager will not take value from this.
But the workload-managing operators category is real and is providing a lot of value to users. By hiding this critical piece of information from them, that value will be hard to get to. One would imagine how successful managed cloud services like AWS RDS would be, if they simply would never tell users what version of Postgres the service is able to manage.

That said, I don't think it incentives breaking changes in minor release versions anymore than OLM currently incentivises breaking changes in the operator APIs due to OLMs enforcement of semantic version strings for bundles. OLM doesn't bark if you remove an entire CRD in a minor version. Still, we see value in enshrining the semver concept in operator versioning to convey the recommendations associated with that. That value isn't lowered just because we aren't always able to enforce it at runtime in all cases. Rather the presence of this data allows test systems to check for this behavior. Equally, with operand information we would allow test systems to call our operators that are removing operand versions within a minor or patch release.
I also argue that this leading to a notion of more vs. less mature operators is a good thing. An operator that provides more metadata and supports multiple versions of a managed workload and also calls this out publicly with a well-maintained list of versions is more mature IMHO, because it gives users what they need. But this can only be a comparison between workload operators. I think we can expect people to be aware enough of the intent of this, to not call out cert-manager as immature because it doesn't provide operand versions.

On the other hand, I would be curious to learn more about the example:

Others might have complex logic around choosing an operand version without actually exposing a direct choice by the end user.

Do we know of an example? I almost seems like a missed opportunity by the operator to provide more controls and nuance. And even when an operator does that at runtime, isn't the logic around that caused by variable input from the user? I.e. a version of another component. Regardless, if an operator has a good reason not to expose a choice her, they can opt out of providing the operand version data as well.

B) OLM resolving based on operand information

I think it's important to remind ourselves that OLM is not a workload manager. It is generally not aware of what the operators are exactly doing, nor should it be.
So I think it would be out of scope for OLM to try to predict what happens to operator-managed things when the operator updates. There are a couple of obvious scenarios, like removing CRDs that will delete the CRs and therefore most likely also the workloads they represent, that we catch. But I don't see us going beyond that. So OLM would not make assumptions about how the user specifies the versions for a desired workload, e.g. on which CR or in which field. This knowledge is in the operator and IMHO that is the best place for it. It can still communicate with OLM based on this knowledge:
for instance, an operator updating to a newer version that drops support for an operand version that is found on cluster could leverage the preflight check facility in F6 to block the update from going through. There is no need for OLM to try to solve that scenario generically.

What is in OLMs realm is using this information as additional constraints when resolving dependencies. If operator A says it needs operator B and operand B.v1.1, OLM shouldn't update B to a version that only provides operand B.v2.0 and not v1.1 anymore (of course an admin would always be able to force it through). That's where this feature provides additional value in the form of safety. The scenario I see is: popular operators used by multiple products and open source projects as a shared dependency but serving different requirements in regards to the version of the managed workload provided.

I would go as far saying that without operand versioning information here, the concept of shared dependencies of operator will not be something the community can adopt, ultimately hampering reuseability and growth of open-source projects.

C) Mirroring based on operand information

There seem to be two issues here:

  1. we can't expect all operands to follow well-known versioning schemas, so useful things like version ranges or sorting cannot be applied.

We could tackle this in a couple of ways: we could either say that like operators, also operands should follow semver. And by looking at the ecosystem, I think we stand a good chance to capture the majority of users / projects / software here.
We could also say we fall back to simple lists, which are harder to maintain than ranges, but not insurmountably hard. We will likely never find a solution that works for everyone and everything out there, so I'd encourage us to have an opinion that enables a majority of the software and incentives a useful pattern.

  1. we are afraid that if people don't mirror the right operands, the operator will inevitably run into image pull errors and we think that this will be on OLM to blame

IMHO, with our current mirroring concept, would likely end up doing the equivalent for operand versioning of what we are already doing for channels and packages in catalogs today: we mingle with the list of stuff in the mirrored catalog. That is, if a users filters out an operand version during mirroring, the resulting catalog would also not contain that operand version reference. This way, we convey to the user correctly what's available in the mirrored environment.
I know we are also thinking about different approaches to mirrored catalog, where we would have other ways of denoting if an operator channel, package or individual version was mirrored or not. We could do the same with the operands.

@dmesser
Copy link

dmesser commented Jul 24, 2023

@Jamstah @perdasilva @joelanford @tlwu2013 What do we think, how do we move forward here?

@joelanford
Copy link
Member

joelanford commented Jul 24, 2023

I'm seeing four requirements:

  1. Operator admins should be able to see which operand versions each workload-based operator supports, by operator version.
  2. Operator admins have guarantees that they can install an operator that supports their desired operand version(s).
  3. Operator authors have guarantees that they can list operator dependencies that support the necessary dependency operand version(s).
  4. When mirroring a catalog, mirroring users can select a subset of the related images to mirror, based on desired operand version(s).

Maybe I'm getting hung up on the prescriptiveness of the implementation in the PR (i.e. there shall be a new field for a list of service versions, operand version shall be constrainable). Perhaps we could reword it to look more like the above?

@Jamstah
Copy link

Jamstah commented Jul 27, 2023

I think that's a good list, I might add:

  • Operator admins have guarantees that the operator won't be upgraded to the point where it no longer supports the operands.

The easy bit here is an operator knowing itself what it supports. The hard bit is knowing what something that isn't yet installed supports to know its going to be suitable for the job. To write that down in a way that is flexible enough may be impossible, we're expecting to be able to communicate knowledge to OLM that it really shouldn't need to have, like:

  • Which field on a CR is an operand version?
  • How do we match that to images?
  • Are there fields for specific features that may have been deprecated?

If we do build that model, I'm 90% sure that there will immediately be requests to extend it with additional checks for more specific cases.

I feel like we may need a way for an uninstalled operator to look at a cluster and say if it can or cannot reconcile what is already existing on it. Perhaps a CSV could include a pre-install/pre-update Job of some kind for that purpose.... it wouldn't solve all the use cases, but I feel many of them could be solved with documentation if we take the sharp edges out of install.

@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jul 28, 2023
@tlwu2013 tlwu2013 requested a review from a team as a code owner July 31, 2023 21:54
@tlwu2013
Copy link
Contributor Author

tlwu2013 commented Jul 31, 2023

I'm seeing four requirements:

1. Operator admins should be able to see which operand versions each workload-based operator supports, by operator version.

2. Operator admins have guarantees that they can install an operator that supports their desired operand version(s).

3. Operator authors have guarantees that they can list operator dependencies that support the necessary dependency operand version(s).

4. When mirroring a catalog, mirroring users can select a subset of the related images to mirror, based on desired operand version(s).

Maybe I'm getting hung up on the prescriptiveness of the implementation in the PR (i.e. there shall be a new field for a list of service versions, operand version shall be constrainable). Perhaps we could reword it to look more like the above?

Done with the editing.

@Jamstah @perdasilva @joelanford @dmesser
Can we start another round of review? thanks!

@codecov
Copy link

codecov bot commented Jul 31, 2023

Codecov Report

Merging #180 (bb501bf) into main (949c06a) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #180   +/-   ##
=======================================
  Coverage   80.69%   80.69%           
=======================================
  Files          18       18           
  Lines         803      803           
=======================================
  Hits          648      648           
  Misses        112      112           
  Partials       43       43           
Flag Coverage Δ
e2e 55.79% <ø> (ø)
unit 77.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

@tlwu2013
Copy link
Contributor Author

I think that's a good list, I might add:

  • Operator admins have guarantees that the operator won't be upgraded to the point where it no longer supports the operands.

@Jamstah, I've also added the "upgrade" piece to the latest change:

Extension admins are guaranteed to install or upgrade an extension that supports their desired operand version(s).

@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 1, 2023
@dmesser
Copy link

dmesser commented Oct 26, 2023

This looks good to me.

@ncdc ncdc changed the title F28 - Provided service versions (aka 'Operand versioning') 📖 F28 - Provided service versions (aka 'Operand versioning') Nov 6, 2023
Copy link
Contributor

@perdasilva perdasilva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm ^^ thank you!!!

@joelanford
Copy link
Member

High-level, I'm comfortable with some sort of optional API operator authors can use to declare which versions of an operand are supported by a particular operator version. This seems to dovetail with some recent conversations we've had about making operators more multi-tenant capable.

However, I think there is still MUCH to discuss about the mechanics of this and how it would work. E.g. what if an operator supports upgrading an existing workload from a particular operand version, but not installing or upgrading to that version?

I still think this feature description seems too presumptive about how operators would (or wouldn't) expose operand version selection to users.

So my stance is that I'm okay to merge if the goal here is to capture a high-level idea of supporting some sort of feature about operand version support awareness for admins. But I am not ready to say that what is described can or should be implemented without more design discussion.

@joelanford joelanford added this pull request to the merge queue Feb 19, 2024
Merged via the queue into operator-framework:main with commit 87f2428 Feb 19, 2024
github-merge-queue bot pushed a commit that referenced this pull request Jan 9, 2025
#1542)

* Makes codecov-action optional

We do not want to fail the job if codecov fails
to upload the report due to rate limiting.

Signed-off-by: Mikalai Radchuk <[email protected]>

* Enable dependabot (#125)

Signed-off-by: Andy Goldstein <[email protected]>

* Enable merge queue (#131)

Signed-off-by: Andy Goldstein <[email protected]>

* Switch to using tilt-support repo

Signed-off-by: Andy Goldstein <[email protected]>

* Add DCO information

Signed-off-by: Andy Goldstein <[email protected]>

* Add CI for tilt (#134)

Signed-off-by: Andy Goldstein <[email protected]>

* Enable CatalogMetadataAPI via explicit flag, fix syncing issues (#138)

* Setup CODEOWNERS (#140)

Signed-off-by: Andy Goldstein <[email protected]>

* Deprecate the `CatalogMetadataAPI` feature gate (#141)

Marking the CatalogMetadataAPI feature gate as Deprecated before introducing the HTTP server as a default mechanism to serve catalog contents

Signed-off-by: Rashmi Gottipati <[email protected]>

* Remove Package and BundleMetadata APIs (#149)

Signed-off-by: Joe Lanford <[email protected]>

* add go-apidiff action (#151)

Signed-off-by: Joe Lanford <[email protected]>

* Store FBC in local directory (#144)

closes #113

Signed-off-by: Anik <[email protected]>

* update demo based on API changes (#154)

Signed-off-by: Jordan Keister <[email protected]>

* Serve locally stored fbc content via an http server (#148)

Closes #113

Signed-off-by: Anik <[email protected]>

* Add metrics to the catalog server (#156)

* add metrics to catalogd http server

that can be used for calculating the Apdex Score
and assess the health of the http server that is
serving catalog contents to clients

Signed-off-by: Bryce Palmer <[email protected]>

* quick fixes from review comments

Signed-off-by: Bryce Palmer <[email protected]>

* rename package from server --> metrics

Signed-off-by: Bryce Palmer <[email protected]>

* rename package from server --> metrics

Signed-off-by: Bryce Palmer <[email protected]>

---------

Signed-off-by: Bryce Palmer <[email protected]>

* (docs): Add docs on fetching contents via HTTP server (#166)

* (docs): Add docs on fetching contents via HTTP server

Signed-off-by: Bryce Palmer <[email protected]>

* add curl examples

Signed-off-by: Bryce Palmer <[email protected]>

---------

Signed-off-by: Bryce Palmer <[email protected]>
Signed-off-by: Bryce Palmer <[email protected]>

* (refactor): Remove deprecated CatalogMetadata and associated code (#169)

* (refactor): Remove deprecated CatalogMetadata and associated code

Signed-off-by: Bryce Palmer <[email protected]>

* go mod tidy

Signed-off-by: Bryce Palmer <[email protected]>

---------

Signed-off-by: Bryce Palmer <[email protected]>

* (server) Expose content URL on CR status (#168)

closes #119

Signed-off-by: Anik <[email protected]>

* deps: bump kubernetes and operator-registry (#173)

Signed-off-by: Joe Lanford <[email protected]>

* Add RELEASING.md (#176)

Add release guide

Signed-off-by: Catherine Chan-Tse <[email protected]>

* Add contribution guide  (#165)

* Add contributing guide to catalogd

Signed-off-by: Rashmi Gottipati <[email protected]>

* Address review comments

Signed-off-by: Rashmi Gottipati <[email protected]>

---------

Signed-off-by: Rashmi Gottipati <[email protected]>

* Update README with simplified make target ref (#178)

Signed-off-by: kevinrizza <[email protected]>

* add default printer columns (#174)

Add default printer columns

Signed-off-by: kevinrizza <[email protected]>

* (cleanup) Kustomization (#183)

Closes #155, #160

Signed-off-by: Anik Bhattacharjee <[email protected]>

* (feature): add direct image registry client `Unpacker` implementation (#145)

(feat): direct image registry client unpacker

Signed-off-by: Bryce Palmer <[email protected]>

* (techdebt): refactor catalog controller unit tests (#196)

* (techdebt): refactor catalog controller unit tests

to no longer use Ginkgo and instead use
the native Go testing and testify

Signed-off-by: Bryce Palmer <[email protected]>

* remove rebase detritus, unnecessary IIFE, and featuregate comments/blocks. goimports.

Signed-off-by: Bryce Palmer <[email protected]>

---------

Signed-off-by: Bryce Palmer <[email protected]>

* Bump golang.org/x/net from 0.10.0 to 0.17.0 (#197)

Bumps [golang.org/x/net](https://github.com/golang/net) from 0.10.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.10.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump github.com/docker/docker from 23.0.1+incompatible to 23.0.3+incompatible (#195)

Bump github.com/docker/docker

Bumps [github.com/docker/docker](https://github.com/docker/docker) from 23.0.1+incompatible to 23.0.3+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v23.0.1...v23.0.3)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* (feature) Implement polling image source in intervals (#185)

Implements https://docs.google.com/document/d/1iWSrWL9pYRJ5Ua3VYErkK1Q2lAusBUeDCh66Ew4lDbQ/edit?usp=sharing

Closes #180

Signed-off-by: Anik Bhattacharjee <[email protected]>

* Add GoDoc for Phase (#199)

GoDoc for Phase

Signed-off-by: Anik Bhattacharjee <[email protected]>

* (feature): add skip-tls-verify option for image sources (#201)

* (feature): add skip-tls-verify option for image sources

Signed-off-by: Bryce Palmer <[email protected]>

* re-generate manifests

Signed-off-by: Bryce Palmer <[email protected]>

---------

Signed-off-by: Bryce Palmer <[email protected]>

* 🌱 Add PR template with icons & verify job (#205)

Add PR template with icons & verify job

Signed-off-by: Andy Goldstein <[email protected]>

* 🌱 Bump github.com/docker/docker from 23.0.3+incompatible to 24.0.7+incompatible (#203)

Bump github.com/docker/docker

Bumps [github.com/docker/docker](https://github.com/docker/docker) from 23.0.3+incompatible to 24.0.7+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v23.0.3...v24.0.7)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :bug: attempt to remove cache entry if unpack fails (#207)

(bugfix): attempt to remove cache entry if unpack fails

and add a new test case that ensures if the required label
is missing from the image, thus failing image unpacking,
an error is consistently returned

fixes #206

Signed-off-by: Bryce Palmer <[email protected]>

* 🌱 Prefix dependabot GH actions PRs (#208)

Prefix dependabot GH actions PRs

Signed-off-by: Andy Goldstein <[email protected]>

* :seedling: replace e2e Job with client-go ProxyGet() call (#210)

(e2e): replace e2e Job with client-go ProxyGet() call

Signed-off-by: Bryce Palmer <[email protected]>

* ✨ Add Ingress overlay to access `Catalog` contents outside of the cluster (#209)

* Add Ingress overlay to access `Catalog` contents outside of the cluster

Signed-off-by: Rashmi Gottipati <[email protected]>

* Address review feedback

Signed-off-by: Rashmi Gottipati <[email protected]>

* Address review feedback #1

Signed-off-by: Rashmi Gottipati <[email protected]>

* Address feedback #2

Signed-off-by: Rashmi Gottipati <[email protected]>

---------

Signed-off-by: Rashmi Gottipati <[email protected]>

* 🌱 bump to k8s 1.27.7 (#211)

bump to k8s 1.27.7

to ensure catalogd is fully remediated and
unaffected by the rapid reset CVE

Signed-off-by: Bryce Palmer <[email protected]>

* :seedling: Remove cert-manager from release note install process (#215)

Remove cert-manager from release note install process

as cert-manager has not been a requirement for installing
catalogd for quite some time.

Signed-off-by: Bryce Palmer <[email protected]>

* :bug: Add enum validation for source type (#214)

Add enum validation for source type

Signed-off-by: Bryce Palmer <[email protected]>

* 🌱  updates to enable autogenerated demo, hosted out-of-tree (#212)

* updates to support automated demo generation

Signed-off-by: Jordan Keister <[email protected]>

* review updates

Signed-off-by: Jordan Keister <[email protected]>

---------

Signed-off-by: Jordan Keister <[email protected]>

* :seedling: demo install from published tag (#217)

* demo install from published tag

Signed-off-by: Jordan Keister <[email protected]>

* review updates

Signed-off-by: Jordan Keister <[email protected]>

---------

Signed-off-by: Jordan Keister <[email protected]>

* Bump golang.org/x/crypto from 0.14.0 to 0.17.0 (#218)

Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.14.0 to 0.17.0.
- [Commits](https://github.com/golang/crypto/compare/v0.14.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump github.com/go-git/go-git/v5 from 5.4.2 to 5.11.0 (#220)

Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) from 5.4.2 to 5.11.0.
- [Release notes](https://github.com/go-git/go-git/releases)
- [Commits](https://github.com/go-git/go-git/compare/v5.4.2...v5.11.0)

---
updated-dependencies:
- dependency-name: github.com/go-git/go-git/v5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump github.com/containerd/containerd from 1.6.22 to 1.6.26 (#219)

Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.6.22 to 1.6.26.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v1.6.22...v1.6.26)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* (bugfix): bump the catalogserver write timeout to 5 minutes (#223)

to allow for fully writing large catalogs contents
in the response

Signed-off-by: everettraven <[email protected]>

* (bugfix): add validation for pollInterval duration units (#225)

Signed-off-by: everettraven <[email protected]>

* (chore): bump supported k8s version to 1.28 (#227)

bumps controller-runtime --> v0.16.3
bumps k8s.io deps --> v0.28.5
bumps operator-registry --> v1.34.0
updated kind version --> v0.20.0
made kind node image configurable and 1.28 by default
updated ginkgo version --> v2.12.0

Signed-off-by: everettraven <[email protected]>

* Bump github.com/containerd/containerd from 1.7.6 to 1.7.11 (#228)

Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.6 to 1.7.11.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v1.7.6...v1.7.11)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump golang.org/x/crypto from 0.16.0 to 0.17.0 (#230)

Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.16.0 to 0.17.0.
- [Commits](https://github.com/golang/crypto/compare/v0.16.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* (bugfix): make garbage collection a runnable (#231)

and add it to the controller manager. Make it log errors instead of
exiting. This prevents crashlooping when there are errors in the
garbage collection process.

Signed-off-by: everettraven <[email protected]>

* bumping codecov-action to v4 (#232)

* GH Actions: add workflow to add epic issues to OLMv1 project (#233)

Signed-off-by: Joe Lanford <[email protected]>

* Bump google.golang.org/protobuf from 1.31.0 to 1.33.0 (#234)

Bumps google.golang.org/protobuf from 1.31.0 to 1.33.0.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Go to 1.21 (#237)

Signed-off-by: Mikalai Radchuk <[email protected]>

* bump docker deps to 25.0.5 (#236)

* bump kind to 0.22.0 (#238)

Signed-off-by: Joe Lanford <[email protected]>

* remove terminating space in dependabot config file (#245)

Signed-off-by: Jordan Keister <[email protected]>

* make golangci-lint config consistent across repos (#255)

Signed-off-by: Joe Lanford <[email protected]>

* Bump golang.org/x/net from 0.19.0 to 0.23.0 (#244)

Bumps [golang.org/x/net](https://github.com/golang/net) from 0.19.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.19.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump docker/login-action from 2 to 3 (#246)

Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump actions/checkout from 3 to 4 (#247)

Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/go-logr/logr from 1.3.0 to 1.4.1 (#253)

Bumps [github.com/go-logr/logr](https://github.com/go-logr/logr) from 1.3.0 to 1.4.1.
- [Release notes](https://github.com/go-logr/logr/releases)
- [Changelog](https://github.com/go-logr/logr/blob/master/CHANGELOG.md)
- [Commits](https://github.com/go-logr/logr/compare/v1.3.0...v1.4.1)

---
updated-dependencies:
- dependency-name: github.com/go-logr/logr
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump actions/add-to-project from 0.5.0 to 1.0.1 (#249)

Bumps [actions/add-to-project](https://github.com/actions/add-to-project) from 0.5.0 to 1.0.1.
- [Release notes](https://github.com/actions/add-to-project/releases)
- [Commits](https://github.com/actions/add-to-project/compare/v0.5.0...v1.0.1)

---
updated-dependencies:
- dependency-name: actions/add-to-project
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump actions/setup-go from 4 to 5 (#250)

Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4 to 5.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump sigs.k8s.io/yaml from 1.3.0 to 1.4.0 (#254)

Bumps [sigs.k8s.io/yaml](https://github.com/kubernetes-sigs/yaml) from 1.3.0 to 1.4.0.
- [Release notes](https://github.com/kubernetes-sigs/yaml/releases)
- [Changelog](https://github.com/kubernetes-sigs/yaml/blob/master/RELEASE.md)
- [Commits](https://github.com/kubernetes-sigs/yaml/compare/v1.3.0...v1.4.0)

---
updated-dependencies:
- dependency-name: sigs.k8s.io/yaml
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump kubernetes-sigs/kubebuilder-release-tools (#248)

Bumps [kubernetes-sigs/kubebuilder-release-tools](https://github.com/kubernetes-sigs/kubebuilder-release-tools) from 0.4.0 to 0.4.3.
- [Release notes](https://github.com/kubernetes-sigs/kubebuilder-release-tools/releases)
- [Changelog](https://github.com/kubernetes-sigs/kubebuilder-release-tools/blob/master/RELEASE.md)
- [Commits](https://github.com/kubernetes-sigs/kubebuilder-release-tools/compare/v0.4.0...v0.4.3)

---
updated-dependencies:
- dependency-name: kubernetes-sigs/kubebuilder-release-tools
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* OCPBUGS-28230: enforce termination message policy on all platform pods (#260)

Signed-off-by: Joe Lanford <[email protected]>

* bump controller-gen to v0.14.0 (#262)

Signed-off-by: Tayler Geiger <[email protected]>

* ⚠️ Serve catalog over HTTPS (#263)

* make catalog server serve catalog contents over HTTPS

adds cert-manager as a dependency again to create self-signed
certs for the catalog server

Signed-off-by: everettraven <[email protected]>

* fix e2e

Signed-off-by: everettraven <[email protected]>

* Reorganize manifests for cert-manager overlay

This allows the use of alternate certificate managers.

Signed-off-by: Tayler Geiger <[email protected]>

* Reconfigure TLS functionality to use Listener

Fix a few manifest issues as well.

Signed-off-by: Tayler Geiger <[email protected]>

* Add certwatcher for TLS cert and key from controller-runtime

- Add error for missing either tls-key or tls-cert arguments.
- Move server creation and configuration to serverutil

Signed-off-by: Tayler Geiger <[email protected]>

* Update README and docs for HTTPS

---------

Signed-off-by: everettraven <[email protected]>
Signed-off-by: Tayler Geiger <[email protected]>
Co-authored-by: everettraven <[email protected]>

* Makefile: fix issues with repeated evaluations (#267)

* rename Catalog to ClusterCatalog (#268)

Signed-off-by: everettraven <[email protected]>

* ✨ Bump k8s deps to 0.30.0 and go 1.22 (#269)

* bump to go 1.22 and k8s 0.30.0

Signed-off-by: everettraven <[email protected]>

* bump o-reg to tag

Signed-off-by: everettraven <[email protected]>

---------

Signed-off-by: everettraven <[email protected]>

* :seedling: Bump k8s.io/client-go from 0.30.0 to 0.30.1 (#276)

Bumps [k8s.io/client-go](https://github.com/kubernetes/client-go) from 0.30.0 to 0.30.1.
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.30.0...v0.30.1)

---
updated-dependencies:
- dependency-name: k8s.io/client-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump k8s.io/component-base from 0.28.5 to 0.30.1 (#275)

Bumps [k8s.io/component-base](https://github.com/kubernetes/component-base) from 0.28.5 to 0.30.1.
- [Commits](https://github.com/kubernetes/component-base/compare/v0.28.5...v0.30.1)

---
updated-dependencies:
- dependency-name: k8s.io/component-base
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump k8s.io/apiserver from 0.28.5 to 0.30.1 (#274)

Bumps [k8s.io/apiserver](https://github.com/kubernetes/apiserver) from 0.28.5 to 0.30.1.
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.28.5...v0.30.1)

---
updated-dependencies:
- dependency-name: k8s.io/apiserver
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix XDG_DATA_HOME build issue (#264)

This mirrors the same fix made previously in operator-controller: https://github.com/operator-framework/operator-controller/pull/790

Signed-off-by: Tayler Geiger <[email protected]>

* Change default namespace to olmv1-system (#283)

* :seedling: Bump k8s.io/apiextensions-apiserver from 0.30.0 to 0.30.2 (#284)

Bumps [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) from 0.30.0 to 0.30.2.
- [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases)
- [Commits](https://github.com/kubernetes/apiextensions-apiserver/compare/v0.30.0...v0.30.2)

---
updated-dependencies:
- dependency-name: k8s.io/apiextensions-apiserver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/containerd/containerd from 1.7.16 to 1.7.18 (#282)

Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.16 to 1.7.18.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v1.7.16...v1.7.18)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix codecov-action params (#287)

* `functionalities` param is no longer exist.
  It was used to enable file fixes to ignore common lines from coverage.
  This feature is now seems to be on by default.

* Adding `disable_search` because we do not need for the codecov action
  to search for coverage files: we explicitly provide files.

Signed-off-by: Mikalai Radchuk <[email protected]>

* Use url.Scheme to determine port number (#289)

Signed-off-by: Todd Short <[email protected]>

* Fixing the labels for better identify metrics (#292)

As the label selector used for both catalogd and operator-controller
metrics services is "control-plane: controller-manager". Hence changing
the labels in both operator-controller and catalogd to make sure we
do not overlap.
Refer
https://github.com/operator-framework/operator-controller/issues/955 for
details

Signed-off-by: Lalatendu Mohanty <[email protected]>

* adding gzip content support (#293)

Signed-off-by: Jordan Keister <[email protected]>

* :seedling: Bump actions/add-to-project from 1.0.1 to 1.0.2 (#291)

Bumps [actions/add-to-project](https://github.com/actions/add-to-project) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/actions/add-to-project/releases)
- [Commits](https://github.com/actions/add-to-project/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: actions/add-to-project
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/prometheus/client_golang (#286)

Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.18.0 to 1.19.1.
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.18.0...v1.19.1)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/google/go-containerregistry (#285)

Bumps [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) from 0.19.1 to 0.19.2.
- [Release notes](https://github.com/google/go-containerregistry/releases)
- [Changelog](https://github.com/google/go-containerregistry/blob/main/.goreleaser.yml)
- [Commits](https://github.com/google/go-containerregistry/compare/v0.19.1...v0.19.2)

---
updated-dependencies:
- dependency-name: github.com/google/go-containerregistry
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/go-logr/logr from 1.4.1 to 1.4.2 (#279)

Bumps [github.com/go-logr/logr](https://github.com/go-logr/logr) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/go-logr/logr/releases)
- [Changelog](https://github.com/go-logr/logr/blob/master/CHANGELOG.md)
- [Commits](https://github.com/go-logr/logr/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: github.com/go-logr/logr
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/onsi/ginkgo/v2 from 2.17.3 to 2.19.0 (#277)

Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.17.3 to 2.19.0.
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.17.3...v2.19.0)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/operator-framework/operator-registry (#281)

Bumps [github.com/operator-framework/operator-registry](https://github.com/operator-framework/operator-registry) from 1.42.0 to 1.43.1.
- [Release notes](https://github.com/operator-framework/operator-registry/releases)
- [Commits](https://github.com/operator-framework/operator-registry/compare/v1.42.0...v1.43.1)

---
updated-dependencies:
- dependency-name: github.com/operator-framework/operator-registry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* check the underlying storage for existing cluster catalog content (#290)

Signed-off-by: Igor Troyanovsky <[email protected]>

* :seedling: Bump github.com/operator-framework/operator-registry (#294)

Bumps [github.com/operator-framework/operator-registry](https://github.com/operator-framework/operator-registry) from 1.43.1 to 1.44.0.
- [Release notes](https://github.com/operator-framework/operator-registry/releases)
- [Commits](https://github.com/operator-framework/operator-registry/compare/v1.43.1...v1.44.0)

---
updated-dependencies:
- dependency-name: github.com/operator-framework/operator-registry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Share common CA with OLMv1 in overlays/cert-manager (#296)

Use kustomization Components to share a common ClusterIssuer with
operator-controller.

Fixes #295

Signed-off-by: Todd Short <[email protected]>

* :seedling: Bump github.com/containerd/containerd from 1.7.18 to 1.7.19 (#297)

Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.18 to 1.7.19.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v1.7.18...v1.7.19)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* reduce cpu requests (#298)

Signed-off-by: Jordan Keister <[email protected]>

* Remove second installation of cert-manager (#300)

Signed-off-by: Mikalai Radchuk <[email protected]>

* Bump ginkgo CLI (#301)

Signed-off-by: Mikalai Radchuk <[email protected]>

* :seedling: Bump github.com/google/go-containerregistry (#302)

Bumps [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) from 0.19.2 to 0.20.0.
- [Release notes](https://github.com/google/go-containerregistry/releases)
- [Changelog](https://github.com/google/go-containerregistry/blob/main/.goreleaser.yml)
- [Commits](https://github.com/google/go-containerregistry/compare/v0.19.2...v0.20.0)

---
updated-dependencies:
- dependency-name: github.com/google/go-containerregistry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump google.golang.org/grpc from 1.64.0 to 1.64.1 (#303)

Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.64.0 to 1.64.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.64.0...v1.64.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* shift gzip lib to active fork (#311)

Signed-off-by: Jordan Keister <[email protected]>

* Move all packages from /pkg to /internal (#310)

Ahead of an initial 1.0.0 release, we shouldn't preemptively
expose any packages publicly. Instead, let's start my making
any packages internal, and we can expose them publicly
later on. This commit moves everything currently in /pkg
to /internal for now.

Signed-off-by: kevinrizza <[email protected]>

* :seedling: Bump github.com/klauspost/compress from 1.17.8 to 1.17.9 (#312)

Bumps [github.com/klauspost/compress](https://github.com/klauspost/compress) from 1.17.8 to 1.17.9.
- [Release notes](https://github.com/klauspost/compress/releases)
- [Changelog](https://github.com/klauspost/compress/blob/master/.goreleaser.yml)
- [Commits](https://github.com/klauspost/compress/compare/v1.17.8...v1.17.9)

---
updated-dependencies:
- dependency-name: github.com/klauspost/compress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/google/go-containerregistry (#315)

Bumps [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) from 0.20.0 to 0.20.1.
- [Release notes](https://github.com/google/go-containerregistry/releases)
- [Changelog](https://github.com/google/go-containerregistry/blob/main/.goreleaser.yml)
- [Commits](https://github.com/google/go-containerregistry/compare/v0.20.0...v0.20.1)

---
updated-dependencies:
- dependency-name: github.com/google/go-containerregistry
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/operator-framework/operator-registry (#319)

Bumps [github.com/operator-framework/operator-registry](https://github.com/operator-framework/operator-registry) from 1.44.0 to 1.45.0.
- [Release notes](https://github.com/operator-framework/operator-registry/releases)
- [Commits](https://github.com/operator-framework/operator-registry/compare/v1.44.0...v1.45.0)

---
updated-dependencies:
- dependency-name: github.com/operator-framework/operator-registry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump k8s.io/apiextensions-apiserver from 0.30.2 to 0.30.3 (#320)

Bumps [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) from 0.30.2 to 0.30.3.
- [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases)
- [Commits](https://github.com/kubernetes/apiextensions-apiserver/compare/v0.30.2...v0.30.3)

---
updated-dependencies:
- dependency-name: k8s.io/apiextensions-apiserver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Include OperatorHub.io ClusterCatalog in releases (#321)

Also adds optional instructions for adding the OperatorHub.io
ClusterCatalog to a cluster.

Signed-off-by: Tayler Geiger <[email protected]>

* ✨ json-lines interface: set content-type, enforce format, document interface (#313)

* set content-type for ndjson

Signed-off-by: Jordan Keister <[email protected]>

* generate json-lines validation data

Signed-off-by: Jordan Keister <[email protected]>

* added docs for interface format

Signed-off-by: Jordan Keister <[email protected]>

---------

Signed-off-by: Jordan Keister <[email protected]>

* :seedling: Bump github.com/containerd/containerd from 1.7.19 to 1.7.20 (#324)

Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.19 to 1.7.20.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v1.7.19...v1.7.20)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add dependabot K8s dependencies group (#322)

Signed-off-by: Mikalai Radchuk <[email protected]>

* add catalogd upgrade test (#314)

Signed-off-by: Ankita Thomas <[email protected]>

* Add installation script (#325)

This follows the release pattern used in operator-controller where an
install.sh script is used for a multi-step installation process. The
OperatorHub ClusterCatalog is also included in the release artifacts.
Also adjusted the Makefile to use the install.sh for deploy.

Signed-off-by: Tayler Geiger <[email protected]>

* Update run-latest-release Makefile target (#326)

* 🌱 Revert 2 previous PRs (#327)

* Revert "Update run-latest-release Makefile target (#326)"

This reverts commit 74de15aa8e50e0764eb7f97c1a667dc41b471a9a.

* Revert "Add installation script (#325)"

This reverts commit bad488ef1e8245db4e2ca7bb90b6ef7a7a3e4f63.

* Add installation script to releases (#328)

This follows the release pattern used in operator-controller where an
install.sh script is used for a multi-step installation process. The
OperatorHub ClusterCatalog is also included in the release artifacts.
Also adjusted the Makefile to use the install.sh for deploy.

Signed-off-by: Tayler Geiger <[email protected]>

* Edit Makefile targets to use install.sh (#329)

Adjusts several Makefile targets to use the new install.sh script.
Includes adjustments to test-upgrade-e2e to use a new target that only
installs the catalogd manifest so cert-manager can still be installed
first for use in the image registry.

Signed-off-by: Tayler Geiger <[email protected]>

* capturing gzip catalog demo as asciicast (#323)

Signed-off-by: Jordan Keister <[email protected]>

* :seedling: Bump github.com/onsi/gomega from 1.33.1 to 1.34.0 (#332)

Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.33.1 to 1.34.0.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.33.1...v1.34.0)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/onsi/ginkgo/v2 from 2.19.0 to 2.19.1 (#331)

Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.19.0 to 2.19.1.
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.19.0...v2.19.1)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/onsi/gomega from 1.34.0 to 1.34.1 (#333)

Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.34.0 to 1.34.1.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.34.0...v1.34.1)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* default-catalogs.yaml: add 10m poll (#335)

* ✨ initial api audit type alignment (#330)

* initial api audit

Signed-off-by: Jordan Keister <[email protected]>

* review resolutions

Signed-off-by: Jordan Keister <[email protected]>

---------

Signed-off-by: Jordan Keister <[email protected]>

* :seedling: Bump github.com/onsi/ginkgo/v2 from 2.19.1 to 2.20.0 (#338)

Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.19.1 to 2.20.0.
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.19.1...v2.20.0)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/google/go-containerregistry (#337)

Bumps [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) from 0.20.1 to 0.20.2.
- [Release notes](https://github.com/google/go-containerregistry/releases)
- [Changelog](https://github.com/google/go-containerregistry/blob/main/.goreleaser.yml)
- [Commits](https://github.com/google/go-containerregistry/compare/v0.20.1...v0.20.2)

---
updated-dependencies:
- dependency-name: github.com/google/go-containerregistry
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/prometheus/client_golang (#344)

Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.19.1 to 1.20.0.
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/v1.20.0/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.19.1...v1.20.0)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump the k8s-dependencies group with 6 updates (#343)

* :seedling: Bump the k8s-dependencies group with 6 updates

Bumps the k8s-dependencies group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [k8s.io/api](https://github.com/kubernetes/api) | `0.30.3` | `0.31.0` |
| [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) | `0.30.3` | `0.31.0` |
| [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.30.3` | `0.31.0` |
| [k8s.io/apiserver](https://github.com/kubernetes/apiserver) | `0.30.3` | `0.31.0` |
| [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.30.3` | `0.31.0` |
| [k8s.io/component-base](https://github.com/kubernetes/component-base) | `0.30.3` | `0.31.0` |


Updates `k8s.io/api` from 0.30.3 to 0.31.0
- [Commits](https://github.com/kubernetes/api/compare/v0.30.3...v0.31.0)

Updates `k8s.io/apiextensions-apiserver` from 0.30.3 to 0.31.0
- [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases)
- [Commits](https://github.com/kubernetes/apiextensions-apiserver/compare/v0.30.3...v0.31.0)

Updates `k8s.io/apimachinery` from 0.30.3 to 0.31.0
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.30.3...v0.31.0)

Updates `k8s.io/apiserver` from 0.30.3 to 0.31.0
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.30.3...v0.31.0)

Updates `k8s.io/client-go` from 0.30.3 to 0.31.0
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.30.3...v0.31.0)

Updates `k8s.io/component-base` from 0.30.3 to 0.31.0
- [Commits](https://github.com/kubernetes/component-base/compare/v0.30.3...v0.31.0)

---
updated-dependencies:
- dependency-name: k8s.io/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/apiextensions-apiserver
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/apimachinery
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/apiserver
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/client-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/component-base
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: k8s-dependencies
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump controller-runtime from 0.18.4 to 0.19.0

Signed-off-by: Per Goncalves da Silva <[email protected]>

---------

Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: Per Goncalves da Silva <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Per Goncalves da Silva <[email protected]>

* :seedling: change GVK to use olm.operatorframework.io (#342)

Signed-off-by: Jordan Keister <[email protected]>

* Removing the catalogd from  app.kubernetes.io/name (#347)

As this namespace is shared between catalogd operator-framework-catalogd

Fixes issue #346

Signed-off-by: Lalatendu Mohanty <[email protected]>

* :seedling: Bump github.com/operator-framework/operator-registry from 1.45.0 to 1.46.0 (#345)

* :seedling: Bump github.com/operator-framework/operator-registry

Bumps [github.com/operator-framework/operator-registry](https://github.com/operator-framework/operator-registry) from 1.45.0 to 1.46.0.
- [Release notes](https://github.com/operator-framework/operator-registry/releases)
- [Commits](https://github.com/operator-framework/operator-registry/compare/v1.45.0...v1.46.0)

---
updated-dependencies:
- dependency-name: github.com/operator-framework/operator-registry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* bump controller-gen to v0.16.1

Signed-off-by: Per Goncalves da Silva <[email protected]>

---------

Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: Per Goncalves da Silva <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Per Goncalves da Silva <[email protected]>

* ✨ Capture catalog content timestamp in ClusterCatalogStatus (#334)

* Capture catalog content timestamp in ClusterCatalogStatus

Signed-off-by: Rashmi Gottipati <[email protected]>

* address reviews (partial)

Signed-off-by: Rashmi Gottipati <[email protected]>

* address review feedback

Signed-off-by: Rashmi Gottipati <[email protected]>

* Address review comments

Signed-off-by: Rashmi Gottipati <[email protected]>

---------

Signed-off-by: Rashmi Gottipati <[email protected]>

* :seedling: Bump github.com/onsi/ginkgo/v2 from 2.20.0 to 2.20.1 (#350)

Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.20.0 to 2.20.1.
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.20.0...v2.20.1)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/prometheus/client_golang (#351)

Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.20.0 to 1.20.2.
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.20.0...v1.20.2)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/containerd/containerd from 1.7.20 to 1.7.21 (#352)

Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.20 to 1.7.21.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v1.7.20...v1.7.21)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Catalog Priority (#353)

Adds an int32 field to allow users to optionally set priority of catalogs. This priority value may be taken into account during bundle selection from multiple catalogs to remove ambiguity.

Signed-off-by: dtfranz <[email protected]>

* add v1.0 and v1.x issues to OLMv1 project automatically (#354)

Signed-off-by: Joe Lanford <[email protected]>

* :seedling: Bump bingo + tools (#358)

* Add bingo-upgrade target to Makefile

Signed-off-by: Per Goncalves da Silva <[email protected]>

* Upgrade bingo tools

Signed-off-by: Per Goncalves da Silva <[email protected]>

* Regenerate manifests

Signed-off-by: Per Goncalves da Silva <[email protected]>

---------

Signed-off-by: Per Goncalves da Silva <[email protected]>
Co-authored-by: Per Goncalves da Silva <[email protected]>

* bugfix: fix printcolumn for lastUnpacked based on json tag and not field name (#361)

Signed-off-by: Rashmi Gottipati <[email protected]>

* :seedling: Bump github.com/onsi/ginkgo/v2 from 2.20.1 to 2.20.2 (#360)

Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.20.1 to 2.20.2.
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.20.1...v2.20.2)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* :seedling: Bump github.com/onsi/gomega from 1.34.1 to 1.34.2 (#359)

Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.34.1 to 1.34.2.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.34.1...v1.34.2)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update cert-manager to v1.15.3 (#367)

Signed-off-by: Todd Short <[email protected]>

* Remove status.phase field from the code and doc references (#368)

Signed-off-by: Todd Short <[email protected]>

* 🌱 Add webhook to add a name label to ClusterCatalogs (#356)

* Add webhook to name label ClusterCatalogs

* Linter fixups

* Added bit more webhook test coverage

* Use catalogd version & clean up TLS args

Signed-off-by: Brett Tofel <[email protected]>

* Fix label name

Signed-off-by: Brett Tofel <[email protected]>

* From stand-alone webhook to operator internal

Signed-off-by: Brett Tofel <[email protected]>

* Think this fixes e2e-upgrade

not sure why PR changes might necessitate this, but it seems legit to delete deployment first

Signed-off-by: Brett Tofel <[email protected]>

* PR review changes so far...

- get MutaingWebhookConfig from kubebuilder;
- stop deleting deployment on only-deploy;
- use the existing matchLabel, stop adding webhook label to operator;
- rename the name label to metadata.name (but not in API yet).

Signed-off-by: Brett Tofel <[email protected]>

* Restore CA issuer config

Signed-off-by: Brett Tofel <[email protected]>

* Fix unit tests

Signed-off-by: Brett Tofel <[email protected]>

* Addresses review comments around TLS cert config

Signed-off-by: Brett Tofel <[email protected]>

* Move RBAC for webhook to kb directive

Signed-off-by: Brett Tofel <[email protected]>

* Move allow-direct-injection to secretTemplate

Signed-off-by: Brett Tofel <[email protected]>

* Make metadata.name an API constant

Signed-off-by: Brett Tofel <[email protected]>

* Use MetaDataNameLabel API constant in log line

Signed-off-by: Brett Tofel <[email protected]>

* Combine cert watchers

Signed-off-by: Brett Tofel <[email protected]>

* Move cert watching back to ctr-rt manager

Signed-off-by: Brett Tofel <[email protected]>

* Address review comments

Signed-off-by: Brett Tofel <[email protected]>

* Address review comments 2

Signed-off-by: Brett Tofel <[email protected]>

---------

Signed-off-by: Brett Tofel <[email protected]>

* Move cert-manager.io patch into tls component (#372)

Signed-off-by: Todd Short <[email protected]>

* :seedling: Bump github.com/prometheus/client_golang (#375)

Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.20.2 to 1.20.3.
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/v1.20.3/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.20.2...v1.20.3)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add label creation checking in the e2e (#374)

Signed-off-by: Todd Short <[email protected]>

* Add matchCondition to webhook config (#376)

Should add some efficiency as it only lets the webhook fire when needed

Signed-off-by: Brett Tofel <[email protected]>

* Fix matchConditions to be compatible with GenerateName (#382)

Signed-off-by: Todd Short <[email protected]>

* Force a rename of the catalogd certificate (#386)

This will cause the catalogd deployment to restart, meaning that the
catalogd will update quicker (rather than waiting on k8s to update the
certificates via the volume)

Signed-off-by: Todd Short <[email protected]>

* :seedling: Bump github.com/operator-framework/operator-registry (#387)

Bumps [github.com/operator-framework/operator-registry](https://github.com/operator-framework/operator-registry) from 1.46.0 to 1.47.0.
- [Release notes](https://github.com/operator-framework/operator-registry/releases)
- [Commits](https://github.com/operator-framework/operator-registry/compare/v1.46.0...v1.47.0)

---
updated-dependencies:
- dependency-name: github.com/operator-framework/operator-registry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* 📖 [Docs] Document tilt-support install (#388)

* Document tilt-support install

Signed-off-by: Brett Tofel <[email protected]>

* Improve tilt-support text

Signed-off-by: Brett Tofel <[email protected]>

---------

Signed-off-by: Brett Tofel <[email protected]>

* :seedling: Bump github.com/containerd/containerd from 1.7.21 to 1.7.22 (#391)

Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.21 to 1.7.22.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v1.7.21...v1.7.22)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ✨ Ensure docker registry CA is trusted in e2e tests (#377)

* Ensure docker registry CA is trusted in e2e tests

* Restructure based on feedback

* Fix FS cache for image refs with tags (#394)

Signed-off-by: Mikalai Radchuk <[email protected]>

* Fixes name of httputil test file (#395)

Signed-off-by: Per Goncalves da Silva <[email protected]>
Co-authored-by: Per Goncalves da Silva <[email protected]>

* Add .idea to .gitignore (#393)

Signed-off-by: Per Goncalves da Silva <[email protected]>
Co-authored-by: Per Goncalves da Silva <[email protected]>

* Remove TLSVerify/PullSecret fields (#369)

Remove fields that will not have long term support committed to them to
prepare for the v1.0 release.

Removed Fields:
- spec.source.image.insecureSkipTLSVerify
- spec.source.image.pullSecret

GH Issue Ref: #355

Signed-off-by: Per Goncalves da Silva <[email protected]>

* Avoid a network call for digest based images (#396)

Signed-off-by: Mikalai Radchuk <[email protected]>

* :seedling: Bump the k8s-dependencies group with 6 updates (#398)

Bumps the k8s-dependencies group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [k8s.io/api](https://github.com/kubernetes/api) | `0.31.0` | `0.31.1` |
| [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) | `0.31.0` | `0.31.1` |
| [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.31.0` | `0.31.1` |
| [k8s.io/apiserver](https://github.com/kubernetes/apiserver) | `0.31.0` | `0.31.1` |
| [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.31.0` | `0.31.1` |
| [k8s.io/component-base](https://github.com/kubernetes/component-base) | `0.31.0` | `0.31.1` |


Updates `k8s.io/api` from 0.31.0 to 0.31.1
- [Commits](https://github.com/kubernetes/api/compare/v0.31.0...v0.31.1)

Updates `k8s.io/apiextensions-apiserver` from 0.31.0 to 0.31.1
- [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases)
- [Commits](https://github.com/kubernetes/apiextensions-apiserver/compare/v0.31.0...v0.31.1)

Updates `k8s.io/apimachinery` from 0.31.0 to 0.31.1
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.31.0...v0.31.1)

Updates `k8s.io/apiserver` from 0.31.0 to 0.31.1
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.31.0...v0.31.1)

Updates `k8s.io/client-go` from 0.31.0 to 0.31.1
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.31.0...v0.31.1)

Updates `k8s.io/component-base` from 0.31.0 to 0.31.1
- [Commits](https://github.com/kubernetes/component-base/compare/v0.31.0...v0.31.1)

---
updated-dependencies:
- dependency-name: k8s.io/api
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/apiextensions-apiserver
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/apimachinery
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/apiserver
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/client-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: k8s-dependencies
- dependency-name: k8s.io/component-base
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: k8s-dependencies
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix unnecessary lastUnpacked status updates (#397)

We should not be updating lastUnpacked status fields when
we read from the cache

Signed-off-by: Mikalai Radchuk <[email protected]>

* ✨ unpacker: switch from google/go-containerregistry to containers/image (#399)

* copy containers_image.go from operator-controller

Signed-off-by: Joe Lanford <[email protected]>

* initial modifications for naming and types

Signed-off-by: Joe Lanford <[email protected]>

* unpacker: switch to containers/image-based implementation

Signed-off-by: Joe Lanford <[email protected]>

---------

Signed-off-by: Joe Lanford <[email protected]>

* :seedling: Align ClusterCatalog API godoc with OpenShift API conventions (#390)

* Update godoc strings for ClusterCatalog API

Signed-off-by: Per Goncalves da Silva <[email protected]>

* Regenerate manifests

Signed-off-by: Per Goncalves da Silva <[email protected]>

* Apply suggestions from code review

Text fixes

Co-authored-by: Bryce Palmer <[email protected]>

* Address reviewer comments

Signed-off-by: Per Goncalves da Silva <[email protected]>

* Update api/core/v1alpha1/clustercatalog_types.go

Co-authored-by: Bryce Palmer <[email protected]>

* Apply suggestions from code review

Co-authored-by: Joe Lanford <[email protected]>
Signed-off-by: Per Goncalves da Silva <[email protected]>

---------

Signed-off-by: Per Goncalves da Silva <[email protected]>
Co-authored-by: Per Goncalves da Silva <[email protected]>
Co-authored-by: Bryce Palmer <[email protected]>
Co-authored-by: Joe Lanford <[email protected]>

* Add CI to check if golang version updated (#401)

Signed-off-by: Todd Short <[email protected]>

* Combine the catalogd services (#402)

Only need to define one service for:
* metrics
* webhook
* catalogd itself

Clean up the name of the service (now `catalogd-service`) and any
corresponding resources

Renumber the ports to 7443/8443/9443. The external port for the catalog
server is either 80 or 443.

Signed-off-by: Todd Short <[email protected]>

* Update documentation and default to new service name. (#406)

Signed-off-by: Todd Short <[email protected]>

* fix: make post-upgrade-e2e checks wait for ClusterCatalog to be reconciled (#407)

Signed-off-by: Joe Lanford <[email protected]>

* fix: unpack cache cleanup should ignore missing files (#404)

Signed-off-by: Joe Lanford <[email protected]>

* use controller-runtime Terminal error instead of custom Unrecoverable error (#405)

Signed-off-by: Joe Lanford <[email protected]>

* Refer to the correct location for go-verdiff (#408)

The location is different than the operator-controller repo.

Signed-off-by: Todd Short <[email protected]>

* :seedling: Bump github.com/prometheus/client_golang (#403)

Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.20.3 to 1.20.4.
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.20.3...v1.20.4)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* 🐛 Handle finalizers (creation and deletion) better (#411)

* 🐛 Handle finalizers (creation and deletion) better

Closes [409](https://github.com/operator-framework/catalogd/issues/409)

* Move the finalizer setup

Move the finalizer setup out from main.go, and into the controller
code. This allows the finalizers to be initialized and used in the
test code.

Signed-off-by: Todd Short <[email protected]>

* Undo rename of fbcDeletionFinalizer

Signed-off-by: Todd Short <[email protected]>

---------

Signed-off-by: Todd Short <[email protected]>
Co-authored-by: Todd Short <[email protected]>

* ⚠ Status condition cl…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants