Skip to content
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

Release lifecycle marking #225

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft

Conversation

akubik-splunk
Copy link

Initial proposal for rules for marking status of released version. It will allow to clearly define window of support (all releases currently supported) and pass the information to the end users.
If the change is accepted we all released versions described in the changelog should be updated with appropriate status

Initial proposal for rules for marking status of released version.
@akubik-splunk akubik-splunk requested review from a team as code owners March 30, 2023 10:04
Comment on lines 102 to 105
- Release which was superseded by newer version, thus has entered deprecation
period `MUST` be marked as **Deprecated** and `MUST` indicated planned
end of support date. This indicates that users should plan for upgrade to
latest or active version respectively before date given.
Copy link
Contributor

Choose a reason for hiding this comment

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

Does this concern only major versions? Or are we supposed to add EOS dates to minor releases?

Copy link
Author

Choose a reason for hiding this comment

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

Minor and Major:

  1. Major version can be used and live for more than 12M
  2. In some cases Major releases may be rare

Copy link
Author

Choose a reason for hiding this comment

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

@mateuszrzeszutek any additional comment, feedback, recommendations?

Copy link
Contributor

@pellared pellared left a comment

Choose a reason for hiding this comment

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

Personally, I would prefer to have one definition of life cycle status which we could use on all levels:

  • releases of components
  • features of components
  • GDI specification
  • other? 😅

The other think is how we "mark" the life cycle status of a release.

If we have a consensus on it then I propose to make two separate issues. The first one, to refine the life cycle status definition. And a second, to define how releases are affected by its life cycle statuses.

Comment on lines 20 to 28
### Life cycle status

Use one of:
- *Latest*
- *Active*
- *Deprecated:* End of Support expected on 2024-04-01
- *End of Support:* Support has ended on 2024-04-01


Copy link
Contributor

Choose a reason for hiding this comment

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

This file in an example.

The requirements for changelog should be defined here: https://github.com/signalfx/gdi-specification/blob/main/specification/repository.md#required-files

Copy link
Author

@akubik-splunk akubik-splunk Mar 30, 2023

Choose a reason for hiding this comment

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

So theses are different aspects that I see

  1. Released functionality maturity (distro level): - no change -SemVer 2.0 + OTel compatible maturity model
  2. Component maturity - same as above - no change - also out of scope for this PR
  3. Release lifecycle - this is what is proposed here as an extension not replacement of existing rules
  4. GDI Spec - not related to release lifecycle as specification does not produce binary that we would have to directly support

Thus I would still suggest to consider the change above

Copy link
Author

Choose a reason for hiding this comment

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

@pellared I want to limit the current PR to pint No. 3 - We can add the component level clarifications separately. Please let me know if you are ok with this

specification/versioning.md Outdated Show resolved Hide resolved
Comment on lines 89 to 90
Each release `MUST` clearly state the life cycle
status and described as: Active, Latest, Deprecated, End of Support.
Copy link
Contributor

Choose a reason for hiding this comment

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

This definition conflicts with https://github.com/signalfx/gdi-specification#lifecycle-status (the section would need to be updated as well).

Do we want to use different "status definitions" and "life cycle" for specification, features, releases? Maybe we could align and use the same approach on al levels?

Personally, I would keep the existing list defined in https://github.com/signalfx/gdi-specification#lifecycle-status, but just add "End of Support".

Copy link
Author

@akubik-splunk akubik-splunk Mar 30, 2023

Choose a reason for hiding this comment

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

It is possible to use the same list of labels/statuses on levels however the meaning might be little different depending on the context although it will sound artificial as we want to describe different aspect of management eg lifecycle instead of maturity. If we decide to go this way we will have to do a definition matrix to clearly explain meaning of each status in each aspect we want to control.

Copy link
Author

@akubik-splunk akubik-splunk Apr 4, 2023

Choose a reason for hiding this comment

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

@pellared I would suggest to clarify the is section stating that lifecycle status consist of maturity status and release status. Please let me know what you think.

It would look something like this

Lifecycle status

The support guarantees and allowed changes are governed by the lifecycle of the
document. Lifecycle stages are defined in the
versioning document. Lifecycle consist of maturity status
of the specification and its elements and release status of versions released.

Maturity status

Status Explanation
No explicit "Status" Equivalent to Experimental.
Experimental Breaking changes are allowed.
Stable Breaking changes are no longer allowed. [1]
Deprecated Changes are no longer allowed, except for editorial changes.

Release status

Status Explanation
Supported Release currently supported.
Deprecated Release is deprecated and pending End of Support.
End of Support Release no longer supported.

Copy link
Contributor

@pellared pellared Apr 6, 2023

Choose a reason for hiding this comment

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

I like this idea 👍 Still I think it would be easier if we move the requirements for releases to a separate document.

specification/versioning.md Show resolved Hide resolved
specification/versioning.md Outdated Show resolved Hide resolved
specification/versioning.md Outdated Show resolved Hide resolved
specification/versioning.md Outdated Show resolved Hide resolved
specification/versioning.md Outdated Show resolved Hide resolved
akubik-splunk and others added 6 commits March 30, 2023 14:44
specification/templates/CHANGELOG.md Outdated Show resolved Hide resolved
@@ -77,3 +77,35 @@ until the end of that component’s existence:
MUST be provided as the latest `PATCH` version for the latest `MINOR` version
of the latest `MAJOR` and SHOULD NOT be provided for previous `PATCH` or
`MINOR` releases.

## Release life cycle management
Copy link
Contributor

Choose a reason for hiding this comment

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

How about moving this to a separate file specification/releases.md. It would be more obvious that versioning.md is about versioning of the specification and release.md is about requirements connected with releases.

If you agree, please remember to add a - [Releases](specification/releases.md) in README.md.

Copy link
Contributor

Choose a reason for hiding this comment

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

I like this idea once we've approved the content.

Comment on lines +83 to +111
Each repository `MUST` use [GitHub releases mechanism](https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases)
to create a versioned snapshot of components and features
delivered to the users. If the release is also distributed via other
distribution channels (e.g. CDN, Registries, AppStores) it `MUST` state
its life cycle status according to following rules by any means available
in the given software distribution solution.

Each release `MUST` clearly state the life cycle
status and described as: Supported, Deprecated, End of Support.
At minimum the required information should be included in [CHAANGELOG.md](https://github.com/signalfx/gdi-specification/blob/main/specification/templates/CHANGELOG.md)
and equivalent mechanism provided by system used for distributing software.

If new version is released previously released versions `MUST` be evaluated
according to stability guarantees and marked as:

- Latest release `SHOULD` be marked as **Supported** indicating that this is
version recommended to new and existing users
- If applicable latest release of previous `MAJOR` line that is still under
active development `MUST` be marked as **Supported** indicating that previous
`MAJOR` line is under active development and users not ready to adopt
latest `MAJOR` version may use previous versions.
- Release which was superseded by newer version, thus has entered deprecation
period `MUST` be marked as **Deprecated** and `MUST` indicated planned
end of support date. This indicates that users should plan for upgrade to
one of supported versions before date given.
- Release which deprecation period has ended `MUST` be marked as
**End of support** and `MUST` indicate date on which the release was marked
as end of support. This indicates that support for given release is no longer
provided and the users should immediately upgrade to newer supported version.
Copy link
Contributor

@pellared pellared Apr 6, 2023

Choose a reason for hiding this comment

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

I made some nit changes, remove some IMO unnecessary sentences or wording, I tried to restructure it a little to make it easier to read and validate when adopting the spec.

Suggested change
Each repository `MUST` use [GitHub releases mechanism](https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases)
to create a versioned snapshot of components and features
delivered to the users. If the release is also distributed via other
distribution channels (e.g. CDN, Registries, AppStores) it `MUST` state
its life cycle status according to following rules by any means available
in the given software distribution solution.
Each release `MUST` clearly state the life cycle
status and described as: Supported, Deprecated, End of Support.
At minimum the required information should be included in [CHAANGELOG.md](https://github.com/signalfx/gdi-specification/blob/main/specification/templates/CHANGELOG.md)
and equivalent mechanism provided by system used for distributing software.
If new version is released previously released versions `MUST` be evaluated
according to stability guarantees and marked as:
- Latest release `SHOULD` be marked as **Supported** indicating that this is
version recommended to new and existing users
- If applicable latest release of previous `MAJOR` line that is still under
active development `MUST` be marked as **Supported** indicating that previous
`MAJOR` line is under active development and users not ready to adopt
latest `MAJOR` version may use previous versions.
- Release which was superseded by newer version, thus has entered deprecation
period `MUST` be marked as **Deprecated** and `MUST` indicated planned
end of support date. This indicates that users should plan for upgrade to
one of supported versions before date given.
- Release which deprecation period has ended `MUST` be marked as
**End of support** and `MUST` indicate date on which the release was marked
as end of support. This indicates that support for given release is no longer
provided and the users should immediately upgrade to newer supported version.
Each release MUST clearly state the life cycle
status and described as one of:
**Supported**, **Deprecated**, **End of Support**.
Each repository MUST use [GitHub releases mechanism](https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases)
to publish versioned artifacts of components
delivered to the users.
The release the life cycle status MUST be included
in [CHANGELOG.md](templates/CHANGELOG.md).
When the component is also distributed via other channels
(e.g. CDN, Registries, AppStores) it MUST state
its life cycle status according to following rules by any means available
in the given software distribution solution.
When a new version is released it MUST be marked as **Supported**,
and all previously released versions MUST be evaluated
according to stability guarantees and marked as:
- If applicable latest release of previous `MAJOR` line that is still under
active development MUST remain as **Supported** indicating that previous
`MAJOR` line is under active development and users not ready to adopt
the latest `MAJOR` version may use previous versions.
- Release which was superseded by newer version, thus has entered deprecation
period `MUST` be marked as **Deprecated** and MUST indicated planned
end of support date. This indicates that users should plan for upgrade to
one of supported versions before date given.
- Release which deprecation period has ended MUST be marked as
**End of support** and MUST indicate date on which the release was marked
as end of support. This indicates that support for given release is no longer
provided and the users should immediately upgrade to newer supported version.

Comment on lines +105 to +106
period `MUST` be marked as **Deprecated** and `MUST` indicated planned
end of support date. This indicates that users should plan for upgrade to
Copy link
Contributor

@pellared pellared Apr 6, 2023

Choose a reason for hiding this comment

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

Do we have already a requirement how long it must be supported? If so can we define it? Otherwise it will be hard to adopt the specification.

What if the latest release fixes a security vulnerability? Shouldn't we immediately drop supported require a version bump?

@pellared pellared marked this pull request as draft September 27, 2023 14:14
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.

5 participants