-
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
[Spec] Come up with a versioning strategy #13
Comments
My personal strategy would be what i've already posted within Discord:
Songs that traverse from Undefined to 1.0.0 will be updated in the respective host (USDB, ultrastar-es, mylittlekaroke, etc). From there it can be improved upon by adding new features etc. For this to work we'll need an extra tag within the txt file to state the version. If this tag is not there it's in the undefined category. If possible, after we decided a versioning strategy, i'd like to work together with hosting sites (Alex from USDB, and TeLiXj from Ultrastar-es) to somehow enforce this tag upon upload. |
This sounds reasonable to me. I agree. |
Hi @achimmihca, @bohning , @rakuri255, @basisbit , @barbeque-squared, |
I would like some more deliberation on the "etc." part of this, specifically when it comes to breaking changes, as well as how many (major? patch? bugfix?) versions older than the most recent one an application is supposed to be able to read? (I think writing in whatever is the newest version is fine) I see two categories of things that we might want to deprecate/remove/break at some point:
NB: please don't discuss the tags in here, I'm using them as examples to get a point across. The first one, I'm pretty sure we can come to some common sense when versioning things. These also aren't the most obnoxious things to have to keep supporting for a while in an older form anyway. The second one is the issue. Currently we're already arguing about at least one of them whether it should be supported in the "undefined" version or not. This will get a million times worse if it makes it into 1.0.0. How long would I (as a developer) have to keep supporting something if it makes it into 1.0.0 and we deprecate it in, say, 1.1.0? (USDX especially is littered with features and things that are relevant for maybe 1% or 0.1% of its users. I'm already having a hard enough time getting rid of those and I don't doubt leakage has occured into the txt's) |
How long a version should be supported is always a question, the best approach -which is also stated by the semver docs- for this would be to deprecate an item in a minor release and then introduce a new major version for completely removing it
From: https://semver.org/#how-should-i-handle-deprecating-functionality For example:
So it depends on which kind of developer you are...
It's a problem which kind of fixes itself through enough time i think. Hosting sites can post analytical info about versions distributed, and karaoke / creator programs can use this info again to determine what to actually support. And say for example that if version
I think i've answered this above
The answer as always is it depends, but forever shouldn't be the goal as this would defeat the purpose of versioning. Like i said before we can use analytical data from hosting sites to determine when to remove a certain feature. And if this data can't be produced by the hosting sites i can create a cronjob to traverse the complete library which gets auto-updated every day as i'm probably one of the few people to have all the data available Ending words... I might be kind of optimistic about it and yes i know it comes with a lot of collaberation effort from all sites. But seeing the progress this repository already made i think people are old and wise enough to actually do this as it comes with almost zero extra effort from the creators point of view |
I also think that semver makes a lot of sense for this.
I agree again, a #VERSION tag might be helpful to determine how the rest of the file should be parsed. |
this looks like we have a consens here. @basisbit @bohning @rakuri255, @AlexanderS do you agree? |
SUMMARYSo here is a summary for this issue up till now.
|
2nd SUMMARY / VOTE NOW 📈 ✋So here is the second summary for this issue (considering some discord discussion in ultrastar creators community too @basisbit ). Please vote for this issue till 15th nov 2023 with emoticon 🎉 / 🚀 / ❤️ . There are three approaches about versioning strategy in our discussion: 🚀 A: Clear Semantic Versioning SEMVER [v1.1.0]
🎉 B: Use YEAR for Versions without SEMVER [v2023]
❤️ C: Use YEAR and only major versions [v2023.0.0]
details A 🚀:
details B 🎉:
v2023 ->
v2024 ->
details C ❤️ :like A) but with v0.1.0, v0.2.0, v0.3.0, v2023.0.0, v2024.0.0. (i) Besides the three options we agreed on:
(ii) Regardless of A/B/C we expect this following co-working beheaviour from all parties:
(iii) We make this stragety transparent on our website usdx.eu/format |
Just a side note, semver doesn't exclude weekly, monthly or yearly releases. We can decide when we want to release a version. Semver says more about compatibility and what to expect from versions than a v2023 or v2024 A v2023, v2024 etc only says something about when something was released, but not if it's breaking, if new features have been added, if stuff got deprecated I get it from an end-user (a singer of a karaoke game) perspective, but its not like the singers will look into the txt files anyway. It's the karaoke programs, creator software and websites which will look for this version. And they should get as much info there as in regard of versions and what to expect from that. There's a reason most libraries out there use semver The target for the format project are developers, not end-users |
Two more cents from my side: All of this causes these requirements imho:
I don't think the solution to the above things is a strict semver vs yearly-release question. You can mix them both after all, if desired (for example v2016.1.3 and v2018.0.1 and v2023.0.2) and thus get the limit of one breaking change version release per year. Just pleas keep in mind that the minor and patch versions make it more difficult to synchronize and make it more overhead for developers. |
Updated the version strategy spreadsheet with a "year+ solution" |
EDIT: Don't know where I was looking. There is obviously a #VERSION in the spreadsheet. I didn't find it in the discussion and thought is was gone. Nevermind... I think adding a #VERSION tag makes sense as it makes changes to the semantics explicit. Note that projects (games, editors, etc.) could still decide to only implement the latest version. But the advantage is that version changes could be communicated to the user, for example Note that semver would be helpful to determine whether a project still supports a given version or whether it should reject it with a corresponding error message. |
SUMMARY / RESULT 🚩Thanks for voting. Here is the final result for this issue. We use clear semantic versioning SEMVER (developer perspective) to organize our versions.1 🎉 / 6 🚀 / ❤ 0short:Clear Semantic Versioning SEMVER [v1.1.0]
details:
(i) Besides all we agreed on:
(ii) We expect this following co-working beheaviour from all parties:
(iii) We make this stragety transparent on our website usdx.eu/format |
I have just read this thread and have a question: Is the versioning scheme supposed to be semver compliant or just semver-inspired? Semantic versioning has some aspects that make parsing and comparing versions more complicated than necessary (without an obvious benefit for a file format specification). For example Reading the thread above gave me the impression that the intent is to use a semver-inspired versioning scheme with the syntax Can someone clarify the intention of the current decision? |
You're correct, semver inspired. We didn't see a usecase for release-candidates, pipelines, beta's, alphas etc. So basicly 1.2.3 (major.minor.patch) as described in the comment above yours |
Suggestion
Currently the spec is unversionized. This comes with a couple of complications and prevents us from easily adding more features without disrupting everyones hard work, time and effort.
With versioning of the specfile we should be able to minimize the impact and be able to prepare users and creators for new things to come.
Use case
Currently there are tens of thousands of txt out there roaming in the wild. These are made with best effort intentions but differ a lot when taking a closer look.
Then for the consuming parties (karaoke programs, and creator software) need to somehow interpret the tags and notetypes. By categorizing them into a couple of versions we can differentiate txtfiles out there and upgrade them when we find them to adhere to the spec.
Extra info/examples/attachments
This issue is to come up with a versioning strategy. We'll use this to dump our brainfarts and gather info on how to tackle this problem. At a later stage we're going to implement it if we have an idea on how to progress into solidifying the spec.
The text was updated successfully, but these errors were encountered: