-
Notifications
You must be signed in to change notification settings - Fork 2
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
Versioning #57
Comments
This will also allow us to use milestones going forward, which is nice. |
rolling-release bruh |
While I like the idea of rolling-release, having some idea of stable vs development would be smart. SemVer doesn't impose much overhead, and it's fun to release new versions. Versioning is important especially to users who don't want to update every time their editor starts, and who are less likely to report and tolerate issues as they happen. Milestones are a better way of structuring work, as well. It's important to note that I have some people who are using this configuration here at St. Olaf, so it would make sense to keep There's certainly nothing stopping us from tagging previous commits and establishing an existing version structure, either. |
Okay, we can semver but also have a rolling-release system that works well? |
What exactly do you mean by a rolling-release system? I think it's totally fine to release new versions of dot as new stuff gets proven stable in master, so in that way we'd be rolling-release. But we'd just do semver rather than having an incrementing number. And |
So... here's my idea. As far as semver: a semver breaking change in our context is something that might cause you to have to change something in your personal config. (This is not completely without exception, but should generally be followed.)
The user can choose to be on the stable branch or dev branch. If you're on dev, you get offered updates whenever anything ends up on This is very rough and I came up with it in like 15 minutes. It's essentially the most straightforward application of semver/git I can think of to this project. Please leave recommendations. |
Agreed. Any change introduced by development that changes the "API"—the set of functions and behavior available to users.
This makes a lot of sense—"should always be in a stable state" is true.
I'm hesitant to keep a persistent branch, but I'm open to this. Perhaps
As far as this goes, that makes sense. I'm not sure about leaving these branches lying around. My philosophy as far as version branches seems to be in favor of creating a new branch to release a new version, merging hotfixes into that branch, and doing that. Maybe So when it comes time to release a new minor release, we'd create a branch to bump the version and we'd put a release/tag on that branch. (We can make drafts and collaborate to write descriptive release notes, and we should mention Issues/PR's and stuff, too.) If there is an issue with a specific version in the past that is not a problem in
Perfect! I'm hesitant to use prefixes like
Ditto here.
This makes a lot of sense. I'd love something that doesn't require us to keep persistent branches going, but if that creates the easiest workflow, I'm all for it. I'm also aligned with the idea of using tags to maintain points in history, then using those tags as bases for branches if we need to add a patch version. |
Glad we are mostly in agreement!
This is basically just for convenience.
The reason I didn't do this is that I was worried about ref conflicts between branches and tags. If you don't think that'll be an issue then I would also prefer the The real reason this thing is so longwinded is because I was thinking we would still be fixing bugs on old minor versions. If we don't need to be able to do this then we definitely don't need the branches lying around. The releases would do fine.
I'm fine with dropping the |
Let's use
That makes sense. Magit doesn't like it when there's a branch and a tag with the same name, but the actual Git CLI will properly handle it. For convenience and lack of confusion's sake, I'd recommend using
This [fixing bugs] is something that I think we should be prepared to do, and that I think we could do retroactively by creating branches off of our tags that already exist. Effectively a It's worth noting that if we are getting into the thick of things and we have a fix that is incompatible with I'd much like our preference to fall towards solving issues off of the latest minor release only, to avoid this problem entirely by keeping everything synchronized. Then, we don't have to decide when a release is "too old," we could just assume that all people should update to the latest version. So, with that all in mind, how about |
sounds good |
The work for adding versioning/branching guidelines will get thrown into the branch PR for #58, I think—that'll be an added section. |
This is a rough approximation of the result from the discussion in #57.
Preliminary work to add this to the CONTRIBUTING.md file has been done over at #60. |
We probably need to do a better job of specifying how we work with SemVer. For instance, what is an API change in our context? Breaking change vs added functionality? Maybe look at how other emacs packages deal with this? Also, should we maybe use |
So, we don't seem to be completely on the same page here. My understanding was that all dev work gets merged into |
This is good, hashing this out is an important step, and if we reach a good versioning scheme here it would be applicable to many other projects. First,
I'd say there are two categories: breaking changes where we would need to bump the major version, such as removing old features outright such that a configuration would break if one were to update, and tweaking changes where the backend behavior gets changed but a configuration that properly uses the API would be fine. I would define the difference between a user "properly" using the API as something like using our pseudo-DSL; if we write
Hopefully we can reach something that semantically uses SemVer without needing to replicate something entirely, but I'd love to hear about other schemes.
That is correct. Any new features get put in
I consider committing version bumps to be "work," but that's besides the point.
It really seems that this is just a question of merging releases into In any case, here was my intended scheme:
Yeah. Since I kinda rewrote this a bunch of times and haven't given it a once-over, please ask away. |
So, to be clear, for minor or major version releases, the Another thing is that we may want to target multiple minor versions with a hotfix. This is easy enough to do. The Other than those things, I agree with this plan. Finally, my case for merging release PRs into
|
Exactly! 😀
That's a great idea. I haven't really thought about how to deal with this weird case that actually makes a lot of sense, but that solution sounds like it'll work.
Excellent! 👍
Fair enough.
This is a very good point. Otherwise, it's like we'd want to PR
Good, good.
Yeah, that's a weird edge case. If we do perform release candidacy for some reason, this If my reading of your response is correct, let me know and I'll make the changes outlined therein. |
So I think we are on the same page now (release PR into |
I would agree. I have re-requested review on #60 now. Make suggestions based on content and stuff—I'll gladly reword and adjust structure. Then we can release |
Are we good to close? |
My initial proposal for this scheme was actually an abridged version of the GitLab Flow idea. @cg505, what do you think of using something more like that flow? Since it's a very good spec I'll leave it as an exercise for you to read it and propose a counter. I'm just not a fan of merging |
I agree manual merge is better. GitLab Flow sounds like pretty much what we are doing except that they want to merge bugfixes into master and then cherry-pick into stable... what? They claim it's "upstream first", but clearly stable is upstream from master, so I'm not sure how that works. Seems like it'll make for some nasty rebase shit. |
Under this scheme, |
To an extent, I think this works pretty well; VERSION bumps to specific versions are thus kept off Another advantage is that when features are being hacked on based on For instance, compare the This way, only the changes introduced in hotfixes get brought in. If more is needed, more is brought in as well. I kinda like this. @cg505, should I submit a PR for this new scheme instead? It might make sense for me to spell this out in a step-by-step process instead. |
So... This looks fine though. It's not my preferred system but it works just as well as any other. |
Wait, how is In the end this scheme is just a slightly more semantic way of dealing with hotfixes and such, and I have started revamping the versioning guide. Expect a PR soonish. |
https://stackoverflow.com/questions/2739376/definition-of-downstream-and-upstream
This is what I was thinking of when I said that. But I also see how you can see |
jfc this issue is reaching legendary lengths |
Yeah, this second pass will probably be the last one though and we'll be able to close. I can't wait to take a bunch of screenshots of this to admire it. |
This is somewhat more compliant with GitLab flow, though the notable problem with this is that `stable` will contain version bump commits that `master` does not have. Subsequent releases may need to get merged back into `master` so that we inform git that our `-pre` versions are authoritative. But this is a good first pass. And since this is a scheme that I can get behind, [GitHub] This commit resolves #57.
We should start thinking about versioning this using SemVer. The two questions I can think of are:
This might affect our update-checking strategy for #56; users could also use a variable to decide whether they only want to use the latest release or the Git HEAD. (
master
in our case)If we decide that we already passed a point where the project could be considered at v0.x.y, we can go back and make releases now for those points in history, and I can do that.
The text was updated successfully, but these errors were encountered: