-
Notifications
You must be signed in to change notification settings - Fork 391
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
Semantic or other meaningful versioning of the GnoVM #2755
Comments
there's a slightly out-of-date PR to create this: #2477 the ideas there are mostly still valid; but we officially started having a 0.1.0 with the launch of test4. we'll likely do a similar release (0.2.0) for test4.5 (ie. the re-launch). |
I would suggest some sort of Git workflow automation so that, essentially, every commit to It's completely fine to have really large patch versions. There is nothing wrong with v0.3.387, for example. However, imagine that someone followed the Getting Started instructions on docs.gno.land, and, according to their Now, that said, I'll go read through that whole PR in detail so that I can absorb the whole discussion, see the suggested implementation, etc.... Thanks for linking to it. I searched issues for anything that mentioned "version" to see if I could find prior discussion, but I didn't search existing pull requests. |
Please avoid creating artificial versioning. Version numbers like 0.1.0 or 0.2.0 are not particularly relevant for test4 or test5, which should not be tied to specific tags. These testnets should function with clear goals, whether they involve no significant code changes (e.g., testing different onboarding methods for validators) or multiple substantial changes. We should maintain one branch for each testnet and use versioning specific to each, such as The focus should be on whether the code is up to date or not. Partial support is not planned; our priority should be on improving the master branch. Versioning discussions can be postponed until closer to the launch. Using versioning like v0.3.387, which indicates 387 commits different from v0.3.0, clutters the git tag experience on both our terminal and GitHub. This command provides a concise string combining the last tag, the number of commits since, and a hash, allowing explicit access to GitHub: $ git describe --tags
v0.2.0-31-g9897b6674 We can update the Makefile with the following: VCS_REF ?= `git rev-parse --short HEAD`
VERSION ?= `git describe --tags --always`
LDFLAGS ?= -ldflags="-X github.com/gnolang/gno/build.VcsRef=$(VCS_REF) -X github.com/gnolang/gno/build.Version=$(VERSION)" |
Versioning meeting proposalpresent @zivkovicmilos @thehowl @ajnavarro @wyhaines @aeddi @sw360cab
Why "prereleases" for testnet?
|
💯
Starting testnet versions with semantic versioning will signal to tools that they can be installed automatically. A testnet branch diverges from the master branch; it functions like a fork and can have dedicated commits. In other words, it should only be checked out intentionally, not by mistake or due to a tool's decision.
Which tool needs to know a testnet Git hash?
It seems like a premature non-optimization. Before the launch, we want to support only the master branch. After the launch, we will focus on creating meaningful releases for users; these will likely be manual and irregular. The system you are trying to implement appears to be generating meaningless git tags and will require significant development, operational, and support time. What if we simply expect people to configure their tools and makefiles to update to master? |
dependabot doesn't even understand pre-releases go modules use pre-releases on i don't think there are other tools that would select pre-releases by default?
i get that your POV is that there should only be the PL and the master branch, and users should only use that. However, testnets exist and are an effort that the team is undertaking in order to create tools and systems that rely on a "long-running" network. I'm with you though that our references should say "use master, versions are not useful to you, deploy on the portal loop". I see these points in the exercise:
we won't have automated releases, and if all goes to plan there'll be |
Great.
It's premature. In the future, we will have two versioning strategies:
Who needs to define "what constitutes a breaking change", today?
Testnet tags do not target the master branch but rather the testX branches. We should continue the approach we used for test2.x and test3.x. I’m not sure what you did with test4.x, but before that, it was simple, effective, and clear.
I was the one uprading the previous testnets, and what I can say is that we don't "hotfix" a tesnet by following the master versions; a testnet branch is only clean the day we create it; after it contains commits that are specific to this branch, and there is no guarantee that you will merge a full master git tag on your testnet branch; chances are that you'll just cherry-pick a few commits. Every testnet tag, testX.Y (which will be rare), should include upgrade notes that may be empty if we're fortunate. The diff is automatically provided by Git by comparing textX.Y and testX.Y-1.
A timestamp and git hash provide more meaningful information than an outdated git tag for determining whether you're up-to-date with master or not. What if:
|
The alternative I see is to align with your approach and accept that we should not expect Git tags to be meaningful for deployments. We use them for various developer-related reasons. When we want to manage network releases, we will need to move away from the built-in Git tag system and create a separate solution. I believe this can work, but we should clarify from the beginning that our focus is on creating Git tags related to "the repo" rather than "the product." I am starting to be open to this. |
We should discourage working on non-master branches unless necessary (such as tools). These semver tags create an unnecessary layer of versioning that is neither master nor a specific testnet; it’s just "something." I believe I have given enough warnings for us to pursue what we think is best while considering my concerns. Therefore, I expect us to limit the time spent on tools, processes, and the additional support generated by this new collection of "something."
Are you really claiming that what you wrote represents my point of view and that I essentially don't care about people who need long-running testnets? |
There has been a long discussion on Signal following @moul's comments. Here's the tl;dr plan of action:
why:
I'll remove all tags starting with Discussion with Manfred - for more context
|
What impact will this have on the release process in |
I renamed/removed all the tags. Let's see what happens. |
Closing in favour of #3005. Let's see about external tools depending on gno - maybe we can update the go version using |
Description
Currently, the only way for someone to determine what version of the gnovm they are using is to look at the git commit hash of whatever version they have installed (and hope that they have not updated their repository in the time since the last installation). This provides a subpar developer experience for any issue where it's useful to know what version one is using, particularly as we advance towards mainnet and the prospect of onboarding larger numbers of people.
So far as I have been able to tell, there is currently no in-code data structure that contains any sort of a meaningful version. Adding something would make is straightforward for someone to then implement a
gno version
subcommand, and it would make it a lot easier for the Playground to make very clear to users which version of the gnovm it is using.I think, again, that this is important before mainnet, as it will allow quality of life features to be implemented to help people to avoid, or at least easily identify and understand version-mismatch related problems.
The text was updated successfully, but these errors were encountered: