[GH-ISSUE #442] please publish a release #316

Closed
opened 2026-03-04 01:03:54 +03:00 by kerem · 18 comments
Owner

Originally created by @jossef on GitHub (May 4, 2020).
Original GitHub issue: https://github.com/rivo/tview/issues/442

It's crucial for some (including me) to freeze their dependencies.
I have my way around by running

go get github.com/rivo/tview@8e06c826b3a513204a61e9a89a52e1226f1a03ac 

still, please publish a release

https://github.com/rivo/tview/releases

image

Originally created by @jossef on GitHub (May 4, 2020). Original GitHub issue: https://github.com/rivo/tview/issues/442 It's crucial for some (including me) to freeze their dependencies. I have my way around by running ``` go get github.com/rivo/tview@8e06c826b3a513204a61e9a89a52e1226f1a03ac ``` still, please publish a release https://github.com/rivo/tview/releases ![image](https://user-images.githubusercontent.com/1287098/80943243-6afeb900-8def-11ea-8e34-f77ecf37a7cb.png)
kerem closed this issue 2026-03-04 01:03:54 +03:00
Author
Owner

@adg commented on GitHub (May 5, 2020):

Doing so would make literally no difference except for the string that appears in your go.mod file. Why push the maintainer into doing this?

<!-- gh-comment-id:624342140 --> @adg commented on GitHub (May 5, 2020): Doing so would make literally no difference except for the string that appears in your `go.mod` file. Why push the maintainer into doing this?
Author
Owner

@rivo commented on GitHub (May 7, 2020):

People have asked for semver-style tags and I'm thinking about introducing them. But I'm not yet clear on how they would map to my commits. Every commit in this repo is either a bugfix or a new feature. (What else could it be?) Does this mean every commit gets its own tag? If so, that doesn't make much sense to me and it creates unnecessary work on my side.

If only some commits get tags, which ones do and which ones don't? What are common policies for tags?

If someone here can provide some guidance and explain how it benefits the users of this package, it would be helpful to make a decision.

Regarding releases, I have to agree with @adg. Maybe I don't really understand releases completely (at least in the context of a Go package like tview) but there is no packaged software, no binaries, and I don't have time to write release notes. So it's unlikely that I will introduce releases.

<!-- gh-comment-id:625454022 --> @rivo commented on GitHub (May 7, 2020): People have asked for semver-style tags and I'm thinking about introducing them. But I'm not yet clear on how they would map to my commits. Every commit in this repo is either a bugfix or a new feature. (What else could it be?) Does this mean every commit gets its own tag? If so, that doesn't make much sense to me and it creates unnecessary work on my side. If only some commits get tags, which ones do and which ones don't? What are common policies for tags? If someone here can provide some guidance and explain how it benefits the users of this package, it would be helpful to make a decision. Regarding releases, I have to agree with @adg. Maybe I don't really understand releases completely (at least in the context of a Go package like `tview`) but there is no packaged software, no binaries, and I don't have time to write release notes. So it's unlikely that I will introduce releases.
Author
Owner

@adg commented on GitHub (May 7, 2020):

At the moment every time you push a new commit the Go tool uses a 'pseudo-version' semver string like v0.0.0-20200414130344-8e06c826b3a5 to refer to that specific commit. These are valid semver tags that monotonically increase, so if you want your users to live at HEAD then don't change anything.

If, by tagging commits, all you'd be doing is tagging v0.0.1, v0.0.2, etc, with no intention of supporting any particular major/minor release in the long term, then there's no point in introducing tags.

In fact, if you did introduce a tag and then failed to tag subsequent versions, new users of tview would get the most recently tagged version instead of what's at HEAD, which with your current dev process seems like the wrong thing.

<!-- gh-comment-id:625536226 --> @adg commented on GitHub (May 7, 2020): At the moment every time you push a new commit the Go tool uses a 'pseudo-version' semver string like `v0.0.0-20200414130344-8e06c826b3a5` to refer to that specific commit. These are valid semver tags that monotonically increase, so if you want your users to live at HEAD then don't change anything. If, by tagging commits, all you'd be doing is tagging v0.0.1, v0.0.2, etc, with no intention of supporting any particular major/minor release in the long term, then there's no point in introducing tags. In fact, if you did introduce a tag and then failed to tag subsequent versions, new users of tview would get the most recently tagged version instead of what's at HEAD, which with your current dev process seems like the wrong thing.
Author
Owner

@jossef commented on GitHub (May 12, 2020):

Adding my 2 cents here,
I recommend using https://github.com/semantic-release/semantic-release

semantic-release is adopted by my team as our last CI pipeline step. All git tags are created automatically based on our commit messages

For instance, If you will use this form of commit messages convention:

fix(form): mouse/keyboard input issues with input fields and forms
closes #<issue id>

then, when semantic-release executes (you can set it up via github actions for all commits in master), it will parse the commit message(s) and will promote the version from (let's say) v1.0.0 to v1.0.1 according to the changes you have pushed

From semantic-release docs:


Commit message format

semantic-release uses the commit messages to determine the type of changes in the codebase. Following formalized conventions for commit messages, semantic-release automatically determines the next semantic version number, generates a changelog and publishes the release.

By default semantic-release uses Angular Commit Message Conventions. The commit message format can be changed with the preset or config options of the @semantic-release/commit-analyzer and @semantic-release/release-notes-generator plugins.

Tools such as commitizen or commitlint can be used to help contributors and enforce valid commit messages.

Here is an example of the release type that will be done based on a commit messages:

Commit message Release type
fix(pencil): stop graphite breaking when too much pressure applied Patch Release
feat(pencil): add 'graphiteWidth' option Minor Feature Release
perf(pencil): remove graphiteWidth option

BREAKING CHANGE: The graphiteWidth option has been removed.
The default graphite width of 10mm is always used for performance reasons.
Major Breaking Release
<!-- gh-comment-id:627146321 --> @jossef commented on GitHub (May 12, 2020): Adding my 2 cents here, I recommend using https://github.com/semantic-release/semantic-release `semantic-release` is adopted by my team as our last CI pipeline step. All git tags are created automatically based on our commit messages For instance, If you will use this form of commit messages convention: fix(form): mouse/keyboard input issues with input fields and forms closes #<issue id> then, when `semantic-release` executes (you can set it up via github actions for all commits in master), it will parse the commit message(s) and will promote the version from (let's say) `v1.0.0` to `v1.0.1` according to the changes you have pushed From `semantic-release` docs: ------ > ### Commit message format > **semantic-release** uses the commit messages to determine the type of changes in the codebase. Following formalized conventions for commit messages, **semantic-release** automatically determines the next [semantic version](https://semver.org) number, generates a changelog and publishes the release. > By default **semantic-release** uses [Angular Commit Message Conventions](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines). The commit message format can be changed with the [`preset` or `config` options](docs/usage/configuration.md#options) of the [@semantic-release/commit-analyzer](https://github.com/semantic-release/commit-analyzer#options) and [@semantic-release/release-notes-generator](https://github.com/semantic-release/release-notes-generator#options) plugins. > Tools such as [commitizen](https://github.com/commitizen/cz-cli) or [commitlint](https://github.com/conventional-changelog/commitlint) can be used to help contributors and enforce valid commit messages. > Here is an example of the release type that will be done based on a commit messages: > | Commit message | Release type | > |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------| > | `fix(pencil): stop graphite breaking when too much pressure applied` | Patch Release | > | `feat(pencil): add 'graphiteWidth' option` | ~~Minor~~ Feature Release | > | `perf(pencil): remove graphiteWidth option`<br><br>`BREAKING CHANGE: The graphiteWidth option has been removed.`<br>`The default graphite width of 10mm is always used for performance reasons.` | ~~Major~~ Breaking Release |
Author
Owner

@abitrolly commented on GitHub (Jun 5, 2020):

@jossef if it is only for your team, then your team should adopt @rivo :D

<!-- gh-comment-id:639414664 --> @abitrolly commented on GitHub (Jun 5, 2020): @jossef if it is only for your team, then your team should adopt @rivo :D
Author
Owner

@jossef commented on GitHub (Jun 6, 2020):

not only :)
I can help and publish a PR with github actions flow
@rivo - WDYT?

<!-- gh-comment-id:640120113 --> @jossef commented on GitHub (Jun 6, 2020): not only :) I can help and publish a PR with github actions flow @rivo - WDYT?
Author
Owner

@rivo commented on GitHub (Jun 10, 2020):

I agree with @adg here. The idea is to keep users of the package at HEAD. It's always the most up to date and (hopefully) bug free version. Longer term developments are done in separate branches anyway so HEAD of master should never be in an intermediate/inconsistent state. (I say "should" because mistakes may happen.)

All in all, given this procedure, I still haven't seen a good reason to introduce version tags. @jossef's suggestion would simply result in a reformatting of the automatically generated version numbers. I don't see the point.

But again, I'm still open for any good arguments. Specifically, if you can describe why the current handling is problematic to you, I'm all ears.

<!-- gh-comment-id:641898039 --> @rivo commented on GitHub (Jun 10, 2020): I agree with @adg here. The idea is to keep users of the package at HEAD. It's always the most up to date and (hopefully) bug free version. Longer term developments are done in separate branches anyway so HEAD of `master` should never be in an intermediate/inconsistent state. (I say "should" because mistakes may happen.) All in all, given this procedure, I still haven't seen a good reason to introduce version tags. @jossef's suggestion would simply result in a reformatting of the automatically generated version numbers. I don't see the point. But again, I'm still open for any good arguments. Specifically, if you can describe why the current handling is problematic to you, I'm all ears.
Author
Owner

@ghostsquad commented on GitHub (Jun 13, 2020):

I agree that it's likely just more overhead. However... there are some pros to doing releases:

  1. Autogeneration of release notes & changelog can make it easier for folks to see/understand what's new

  2. Marking releases as "pre-release" and thus potentially saving some folks from downloading a broken version, but allowing folks to "opt-in" to the bleeding edge, knowing that new features might not totally work correctly (or whatever else)

  3. Tags are generally the "human readable" variant of versions. So that it's easier to tell how out of date you are or whatever when looking at v0.1 and v0.2 instead of cb1e5d6 and 8ca14bb

Understandably, these are minor. But with a little bit of automation and maybe some enforcement of using https://www.conventionalcommits.org/en/v1.0.0/#summary and https://chris.beams.io/posts/git-commit/ you could greatly improve the release documentation for users.

<!-- gh-comment-id:643570805 --> @ghostsquad commented on GitHub (Jun 13, 2020): I agree that it's likely just more overhead. However... there are some pros to doing releases: 1. Autogeneration of release notes & changelog can make it easier for folks to see/understand what's new 2. Marking releases as "pre-release" and thus potentially saving some folks from downloading a broken version, but allowing folks to "opt-in" to the bleeding edge, knowing that new features might not totally work correctly (or whatever else) 3. Tags are generally the "human readable" variant of versions. So that it's easier to tell how out of date you are or whatever when looking at `v0.1` and `v0.2` instead of `cb1e5d6` and `8ca14bb` Understandably, these are minor. But with a little bit of automation and maybe some enforcement of using https://www.conventionalcommits.org/en/v1.0.0/#summary and https://chris.beams.io/posts/git-commit/ you could greatly improve the release documentation for users.
Author
Owner

@ghostsquad commented on GitHub (Jun 13, 2020):

along the lines of #1 above, writing new features only for them to not be discoverable sounds like a terrible waste of time 😉

<!-- gh-comment-id:643571019 --> @ghostsquad commented on GitHub (Jun 13, 2020): along the lines of `#1` above, writing new features only for them to not be discoverable sounds like a terrible waste of time 😉
Author
Owner

@abitrolly commented on GitHub (Jun 16, 2020):

@ghostsquad can you submit release notes and changelog in PR using hashes and dates to see how it should look like?

<!-- gh-comment-id:644582364 --> @abitrolly commented on GitHub (Jun 16, 2020): @ghostsquad can you submit release notes and changelog in PR using hashes and dates to see how it should look like?
Author
Owner

@ghostsquad commented on GitHub (Jun 16, 2020):

Like @jossef I would use semantic release. I'm a maintainer of go-jira, and that's how I do releases there.

https://github.com/andygrunwald/go-jira/releases

<!-- gh-comment-id:644843679 --> @ghostsquad commented on GitHub (Jun 16, 2020): Like @jossef I would use semantic release. I'm a maintainer of go-jira, and that's how I do releases there. https://github.com/andygrunwald/go-jira/releases
Author
Owner

@ghostsquad commented on GitHub (Jun 16, 2020):

I misspoke. I use "standard-version" for releasing

https://github.com/andygrunwald/go-jira/blob/master/README.md#releasing

<!-- gh-comment-id:644845372 --> @ghostsquad commented on GitHub (Jun 16, 2020): I misspoke. I use "standard-version" for releasing https://github.com/andygrunwald/go-jira/blob/master/README.md#releasing
Author
Owner

@abitrolly commented on GitHub (Jun 16, 2020):

@ghostsquad I don't see that changelog is autogenerated.

<!-- gh-comment-id:644872928 --> @abitrolly commented on GitHub (Jun 16, 2020): @ghostsquad I don't see that changelog is autogenerated.
Author
Owner

@ghostsquad commented on GitHub (Jun 16, 2020):

@abitrolly what do you consider as "autogenerated"? I run a command standard-version, which looks at the git history and generates the changelog. standard-version does not currently create a Github Release, but that would be a fairly simple addition.

<!-- gh-comment-id:644876029 --> @ghostsquad commented on GitHub (Jun 16, 2020): @abitrolly what do you consider as "autogenerated"? I run a command `standard-version`, which looks at the git history and generates the changelog. `standard-version` does not currently create a Github Release, but that would be a fairly simple addition.
Author
Owner

@abitrolly commented on GitHub (Jul 12, 2020):

@ghostsquad "autogenerated" means "generated automatically", which means "not manually".

<!-- gh-comment-id:657215897 --> @abitrolly commented on GitHub (Jul 12, 2020): @ghostsquad "autogenerated" means "generated automatically", which means "not manually".
Author
Owner

@rivo commented on GitHub (Jul 12, 2020):

@ghostsquad Re (1):

git log --color --pretty=format:"%Cred%h%Creset %s %Cgreen(%cr)" --abbrev-commit --date=relative

gives you this:

image

That's your automatically generated changelog.

Re (2): As mentioned before, there is no "release". So there is also no "pre-release". The master branch should never be in a broken state (apart from bugs I don't know about). Any intermediate state during the development of a larger feature will happen in a different branch.

Re (3): Agreed, it's easier. But as I mentioned multiple times, there should be no reason to stay on an older release. I'm trying to keep tview backwards compatible. I'm actually following the recommendation of the Go team here. They even wrote a blog post about this recently.

I still don't see where any of this is causing actual problems.

<!-- gh-comment-id:657243798 --> @rivo commented on GitHub (Jul 12, 2020): @ghostsquad Re (1): ``` git log --color --pretty=format:"%Cred%h%Creset %s %Cgreen(%cr)" --abbrev-commit --date=relative ``` gives you this: ![image](https://user-images.githubusercontent.com/480930/87251279-b1fdd000-c46a-11ea-91f0-02c1afcbc7ce.png) That's your automatically generated changelog. Re (2): As mentioned before, there is no "release". So there is also no "pre-release". The master branch should never be in a broken state (apart from bugs I don't know about). Any intermediate state during the development of a larger feature will happen in a different branch. Re (3): Agreed, it's easier. But as I mentioned multiple times, there should be no reason to stay on an older release. I'm trying to keep `tview` backwards compatible. I'm actually following the recommendation of the Go team here. They even wrote a [blog post](https://blog.golang.org/module-compatibility) about this recently. I still don't see where any of this is causing actual problems.
Author
Owner

@ghostsquad commented on GitHub (Jul 12, 2020):

I don't see any problems, so I'm bowing out of the conversation.

<!-- gh-comment-id:657247056 --> @ghostsquad commented on GitHub (Jul 12, 2020): I don't see any problems, so I'm bowing out of the conversation.
Author
Owner

@rivo commented on GitHub (Jul 12, 2020):

Ok, I'll keep this open for a while in case somebody wants to chime in.

<!-- gh-comment-id:657249286 --> @rivo commented on GitHub (Jul 12, 2020): Ok, I'll keep this open for a while in case somebody wants to chime in.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/tview#316
No description provided.