Git Product home page Git Product logo

calver's Introduction

CalVer

CalVer is a project versioning convention based on calendar dates of project releases, instead of arbitrary numbers. There are many benefits to this approach, and multiple variations to custom fit all projects, from Ubuntu to Twisted to PyCharm to C itself and more.

Contributing

If you have questions, comments, issues, or enhancements, please feel free to open an issue.

calver.org is generated with Chert and Python. So, if you would like to submit a pull request directly, pip install chert and chert serve from within the repo directory to get a live-updating preview of what your change will look like.

calver's People

Contributors

colomet avatar graingert avatar hawkowl avatar janpipek avatar mahmoud avatar networm avatar nhomble avatar nkantar avatar peterjc avatar revolter avatar souovan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

calver's Issues

Typo in Scheme Section: Zero-padded year example

Typo in CalVer Scheme Section

In the "Scheme" section of the CalVer website (https://calver.org/#scheme), there's a typo in the description of the "0Y" format specifier.

Currently, it reads: "0Y - Zero-padded year - 06, 16, 106".

However, the example "106" is inconsistent with the intended format and might cause confusion for users. It should be corrected to "16" to align with the expected output of zero-padding the year.

Add internationalization support

I think it's better to have multiple languages translated. I just browse the folder structure and found nothing about internationalization. So could you add support for it?

I could translate it to Chinese Simplified.

Week Numbering

This relates to PR #31

Looking into this further, it appears that (at least for python) strftime actually goes from 0-52 and not 1-53 and the weeks are not actually always 7 days long:

import datetime as dt

base_date = dt.date(2020, 12, 26)

for i in range(10):
    d = base_date + dt.timedelta(days=i)
    print(d.strftime("%Y-%m-%d  %a  %%W:%W  %%U:%U  %%G-w%%V: %G-w%V"))
2020-12-26  Sat  %W:51  %U:51  %G-w%V: 2020-w52
2020-12-27  Sun  %W:51  %U:52  %G-w%V: 2020-w52
2020-12-28  Mon  %W:52  %U:52  %G-w%V: 2020-w53
2020-12-29  Tue  %W:52  %U:52  %G-w%V: 2020-w53
2020-12-30  Wed  %W:52  %U:52  %G-w%V: 2020-w53
2020-12-31  Thu  %W:52  %U:52  %G-w%V: 2020-w53
2021-01-01  Fri  %W:00  %U:00  %G-w%V: 2020-w53
2021-01-02  Sat  %W:00  %U:00  %G-w%V: 2020-w53
2021-01-03  Sun  %W:00  %U:01  %G-w%V: 2020-w53
2021-01-04  Mon  %W:01  %U:01  %G-w%V: 2021-w01

This has the benefit of avoiding the third issue I mentioned in the PR.

Even with the current ambiguity of WW/0W, they have an impact on
how to interpret the YYYY/YY/0Y which is not explicitly stated.

Be clear and opinionated about what CalVer is and is not

'Landed here while googling for "date-based semver". I read / scanned the whole document. When I got to the bottom section, "When to Use CalVer", I found myself wondering if I'd missed something.

Like, what is CalVer, exactly???

calver.org summarizes some projects that use date-based version schemes and discusses some common fields and practices in fairly broad terms, but no attempt is made to describe any one, preferred versioning system. And even the examples provided are at times confusing ("YYYY.MM.DD_MICRO" doens't use "point-separated numbers")

In short, CalVer seems little more than a notation for describing [date-based] version strings. But that doesn't seem all that useful.

Questions it doesn't answer:

  • How can I identify a CalVer string?
  • What is and is not a valid CalVer string?
  • What process should be used to generate a CalVer string?
  • Is it expected that CalVer strings be parsable to extract the timestamp? (Not a given, btw.)
  • What are the requirements for a CalVer string parser?

(BTW, if the answer to that last question starts with, "first you need to know the format description..." then this document hasn't done it's job.)

In short, what i'm suggesting is that rather than being a hand-wavy collection of possible date-based formats, CalVer should springboard off the research that's already been done, and define a single, canonical format that meets the needs of the community moving forward rather than focusing on legacy versioning systems.


Aside: I think CalVer would benefit by being explicit about the fact SemVer is a well-established thing, and that CalVer strings MUST be SemVer compliant. [Edit: Upon further consideration, I've concluded this is just a terrible idea. SemVer and CalVer are just too at odds semantically for this to be viable.]

TLS Cert has expired

Hello from New Zealand,

The cert has expired as of about 3am. I presume it's a similar issue as #14 of the server not getting the new cert.

Examples

I think the calver.org homepage would really benefit from some clear examples.

There are some in the projects mentioned, but having a section with some examples and explanations how they break down into calver components would be helpful I think.

Windows 10 provides a better example of CalVer than older Windows releases.

The current example with Microsoft Windows shows 95, 98, 2000 - but Microsoft hasn't used this scheme in, well, 18 years now.

However - they are using CalVer to describe their updates to Windows 10! See
https://www.microsoft.com/en-us/itpro/windows-10/release-information
https://support.microsoft.com/en-us/help/4099479/windows-10-update-history

Where the version number (major update) uses the format YY0M, giving examples like "Windows 10 version 1703"

Tesla Firmware version

Tesla also seems to be doing this, but i'm not 100% sure what the later numbers are.

Latest version right now is 2019.40.50.7, where 2019 is the year and 40 the week of the year. The 7 is patch/bugfix. Not sure about the 50

https://teslafi.com/firmware/

Javascript Implementation & Maybe Clients Section In The Website

Hi,

I would like to thank to the maintainers of the calver.org since it helped me a lot while writing node-calver. Personally I use calendar versioning in my frontend apps and decided to wrote this utility to automate release numbering process. (and now will help many more js developers) Please let me know if you see any implementation issues if you have a chance to look at it.

I also would like to see a clients section in the website calver.org (apart from users) since there are many implementations across different programming languages. I saw libraries like pycalver for example. This section may make visitors transition from semver (or nothing) to calver easier. I know some developers find calver is more reasonable in some of their projects but they may not transition because of the vast semver community.

7 is the most popular minor version of Python

  • Minor - The second number in the version. 7 is the most popular
    minor version of Python.

^ Such a claim is not aging well, and also complicating matters since 3.7 is current now. Consider changing to a different example?

What about breaking changes?

I think this versioning scheme should contemplate breaking changes.

A very important feature I see in today's common approaches such as semver is that they reflect the breaking changes in their numbering scheme. However, I see there is nothing similar stated in this specification. Shouldn't it be contemplated?

I would be concerned if I have several dependencies using this scheme and I want to update them. Will certain updates break my code? I will have to check and remember each documentation to find which ones break compatibility (for instance, twisted states that the first two numbers indicate the API compatibility).

Feature request: Seconds-level versioning granularity?

I would like to see this spec address use-cases where versioning granularity on the order of 1-second might be needed.

For example, the use case I have is on my npmgraph.js.org site. I allow users to upload package.json files that may or may not have a version. If the case version is missing, I need to assign one. Thus, a date-based version is the obvious choice. However users may upload multiple files within minutes or even seconds of one another. So I'd like version strings that have a reasonable chance of being unique at that level of granularity.

FWIW, the solution I've come up with - that I don't see addressed anywhere in the spec - is to use the semver "rerelease" field to hold the # of seconds in the day. Specifically, I intend to use version strings of the form [full year].[month].[day of month]-[seconds in day] [full year].[day of year].[seconds in day]

[Edit: 'Just realized that the prerelease field of semver is not actually appropriate for holding seconds. My understanding of semver is that the prerelease field should indicate the anticipated version. I.e. it should follow the same form as the the normal (pre-hyphen) fields, but provide the expected version upon release. Given the nature of date-based versioning, that ends up being problematic.... 'basically requires being able to see into the future.]

OPNsense is calver

Current release is 21.7, released in july of 2021. First release was in January 2015, 15.1.

minor patches increment after release, so 21.7.1 came out a few weeks back.

Grammar?

The good thing about standards is that there are so many to choose from. /Andrew S. Tanenbaum

Reading the docs here, I couldn't help but remember Tanenbaum's famous statement.

Ubuntu - YY.0M.MICRO
Twisted - YY.MM.MICRO
youtube_dl - YYYY.0M.DD
pytz - YYYY.MINOR
Teradata - YY.MM.MINOR.MICRO
Unity - YYYY.MINOR.MICRO
pip - YY.MINOR.MICRO
PyCharm - YYYY.MINOR.MICRO
OpenSCAD - YYYY.0M 
fusefs-ntfs - YYYY.MM.DD_MICRO
certifi - YYYY.MM.DD
boltons - YY.MINOR.MICRO

Seriously, what the &$!#%?

Please publish a grammar defining what constitutes a valid CalVer. As is abundantly clear from the above, such an important decision can't be left up to individual projects. Apart from restoring some sanity, it'll also help tools like the one I wrote (jsemver).
SemVer 2.0 BNF grammar for reference: https://semver.org/#backusnaur-form-grammar-for-valid-semver-versions

It is also import to define precedence rules. Is 2020 greater, smaller or equal to 20? What characters are allowed in each version segment? Are numeric segments compared alphabetically or numerically? To my knowledge, none of these questions are answered by https://calver.org.

pytz case study is incorrect

Looking at pytz example, it's listed as YYYY.MM but that's not really right. You may also note the release history dates are not corresponding with months: https://pypi.org/project/pytz/#history

I emailed pytz maintainer directly, and it is actually based off of the IANA release files https://data.iana.org/time-zones/releases/ which use an incrementing letter suffix. That's not compatible for python version numbering, so pytz change it to an integer

e.g. Olson database 2018c (dated January, third Olson release in 2018) would correspond to pytz 2018.3

Docker Engine

Docker Engine starting from 17.03 is calver-ed.
1.13 and earlier versions are not.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.