epiverse-trace / blueprints

Software development blueprints for epiverse-trace
https://epiverse-trace.github.io/blueprints
Other
4 stars 4 forks source link

Policy around releases #14

Open thibautjombart opened 2 years ago

thibautjombart commented 2 years ago

I start this thread to discuss how we can standardize our release process, following some conversations with @Bisaloo. It would be great to have everyone's input on this.

Release pace

I can see two extremes:

  1. Plan releases long ahead, set up deadlines, try to meet them; typical waterfall
  2. Release early, release often; less emphasis on long-term planning; typical Agile

I would advocate for 2, better suited for interacting with end-users, and often more realistic, as I often found sticking to plans made a long time ago is difficult, and/or the original plan becomes less relevant as a project develops.

Versioning

I would advocate using semantic for package versions, so we can reflect the kind of changes made to a package with a new release. I personally only ever use the first three digits, but no pre-release as I find it just complicates things and never felt a need for it.

Status

The status of the package is not entirely independent from versioning, but provides a high-level description or how 'reliable' the package will be to the user. @TimTaylor and I have described a lifecycle adapted from Rstudio for RECON summarized in this graph:

It is currently the one we use in some projects and on the general airtable database of the tool ecosystem. But we can use another one if we prefer to.

Project management

Issues

While issues can be broken down into tasks using tick boxes, I find issues are easier to tackle when they don't contain a long list of things to do. Ideally an issue could be closed by a single, not too extensive PR, so it is easier to review, and faster to merge.

Projects

I like using github projects to manage releases. The pros I can see are:

Github versus CRAN

General policy

I like the idea that the main branch on github remains functional at all time whilst holding the latest features and bug fixes, and CRAN hosts the 'stable' version. @Bisaloo was mentioning there is a limit to the number and frequency of releases we can make on CRAN. I am not sure if we want to set hard rules about when to submit a release on CRAN, as it may not be entirely related to semantic change. For instance, a patch fixing an important bug may need to go to CRAN urgently.

First release

First releases onto CRAN are a lot harder than further updates. I would advise not only for the package to be bullet proof when initially submitted, but also to have relatively stable API, so we avoid breaking backward compatibility with new updates. In terms of development stage, that would mean the package is probably towards the end of its experimental phase and getting towards 'maturing'.

I think that covers it for me. Thoughts?

Bisaloo commented 2 years ago

Related thread with some thoughts from the rest of the community: https://discuss.ropensci.org/t/release-cadence-how-do-developers-estimate-when-a-new-release-is-due/2861

Point by point comments & additional thoughts:

https://github.com/wch/r-source/blob/b12ffba7584825d6b11bba8b7dbad084a74c1c20/src/library/tools/R/QC.R#L7853-L7861

thibautjombart commented 2 years ago

Thanks, super useful comments / reads. Good point on the 4rth component of semantic versioning and package updates using R-universe, but my thoughts would be:

TimTaylor commented 2 years ago

Thanks, super useful comments / reads. Good point on the 4rth component of semantic versioning and package updates using R-universe, but my thoughts would be:

  • if there are useful features/bug fixes, some of the first 3 components should be changed

The problem is that ideally you want all 3 component releases on CRAN so without making use of the 4th component for development, and regularly bumping, there is no way for r-universe to pick up on the changes in dev. This kind of forces use of the 4th component during dev (else little benefit of r-universe for packages on CRAN).

thibautjombart commented 2 years ago

It makes sense. Any recommendations / standards on the 4rth component? Semantic is a bit vague on that point, but it would be again something that would be useful to standardise.

TimTaylor commented 2 years ago

IMO (don't put too much stock in it ;-) ) as long as the last digit goes up when you want to bump a dev release on r-universe I'm not sure I would worry about it too much. As long as everyone is clear that anything with a non-zero 4th component is dev, that is probably all you need. Were it not for the r-universe thing I'd do everything under x.x.x.9000 similar to the tidy people. However you're probably better starting at x.x.x.1 for reasons above.

The key point is that this only really matters for the r-universe integration so may be worth clarifying how beneficial/important that is at the same time.

Bisaloo commented 2 years ago

I mostly agree with @TimTaylor but I want to point out that there is a good case for starting at 9000 (actually, anything above 1234) because CRAN will then ensure you don't submit a package with a dev version number:

https://github.com/wch/r-source/blob/b12ffba7584825d6b11bba8b7dbad084a74c1c20/src/library/tools/R/QC.R#L6967-L6971