postgrespro/pgsphere

Tagging previous versions?

gpdf opened this issue · 27 comments

gpdf commented

I understand from conversations during the recent Northern Autumn IVOA InterOp, and from private communications, that this repository (postgrespro/pgsphere) is considered the most authoritative currently available source for the pgsphere extension, as far as the IVOA community is concerned, and the one most closely aligned with current developments in geometry-query support (e.g., for RegTAP 1.2). For this community, at least, it supersedes, I gather, pgsphere/pgsphere and akorotkov/pgsphere (neither of which have a visible fork relationship with the present repo).

This repo doesn't currently have any visible tags, let alone releases. Is that something we could remedy? There is some evidence in commit messages of some intent for there to be notional releases identified as "1.1.4.916", "1.1.5", "1.1.5beta4gavo", and "1.2.0".

Is there any value in trying to create some retrospective tags? Is the head of master stable enough that it is worth tagging?

Beyond that, should we be discussing means of producing release artifacts that DBAs could use to add the pgsphere extension more easily to deployed database servers?

This is an issue at the moment because Rubin is trying to bring up pgsphere-based TAP services for commissioning data (in addition to the main Qserv-based TAP services used in Data Preview 0) - it really isn't obvious how to determine what a known stable release of pgsphere might be, or to obtain a recent build from, e.g., Debian package service.

@msdemlei and @pdowler, at least, are likely to be interested in this, but we'd be grateful for advice from any quarter.

gpdf commented

Oh, I just discovered this: https://salsa.debian.org/postgresql/pgsphere , with a fair bit of recent activity. Very superficially it looks like it might just be minimal maintenance based on the very old v1.1.1?

Dear All, let me please refresh the discussion concerning versioning.

I propose:

  • In general, we should follow some principles described in https://semver.org/
  • Major number is for API incompatible changes.
  • Minor number is for API backward compatible changes (old user sql should work with newest pgsphere).
  • Patch number is for bug fixes (API is untouched).
  • Mark each version with annotated tag like v1.2.0

What I'm concerned, now we increment only the third number (patch number) for those changes that include API changes. I guess we should increment minor number in this case. But if we decide to increment minor number on each API small change this number may become too big.

One more question - should we increment minor or patch number each time when merging a new PR or introduce release plan?

Another issue is an optional compilation of some parts like healpix. I do not exclude that some new optional compilation will appear in the near future. I think it should be the user responsibility how to compile. The version number should not reflect how pgsphere is compiled. I see the only issue - upgrade scripts. I guess we may implement some query function that returns the list of compiled features. It may help upgrade script to decide what to do.

I appreciate any comments, thank you!

This all seems reasonable to me.

One more question - should we increment minor or patch number each time when merging a new PR or introduce release plan?

  1. If a PR adds to or changes the API, then that PR should change the major or minor version number.
  2. If a PR does not change the API in anyway and does not change the output of any of the regression tests, I don't see a need to increment the patch number.
  3. If a PR does not change the API but the output of some regression test changes, it should increment the patch number.

That all said, I don't feel strongly about any of this and am willing to defer to your preferred way of doing it. 😄

I like release plans too. We may consider to create a new release each 3 months. Each release will be tagged. What I would like to consider is what to do if a bug is found in the release. Should we create a branch from the tag and fix it in this branch? If yes, should we increment version number? I propose to fix releases with tags but to fix new bugs in the master only.

I also propose not to increment the version on each PR. I propose to increment it once when applying first PR after the release. Another condition when the release number should be incremented - if a new PR requires to increment minor or major numbers but before we incremented only patch number.

Upgrade scripts are created only to migrate from previous release to a new one. Intermediate PRs should just update existing upgrade scripts.

One more idea is to merge PR into a new branch master-dev. Once in 3 months we merge master-dev into master. This way, master branch will always contain the latest released version.

One more idea is to merge PR into a new branch master-dev. Once in 3 months we merge master-dev into master. This way, master branch will always contain the latest released version.

I'm not a fan of this model. I'd rather see release tagging, maybe even branching, and making tarballs available for download from https://github.com/postgrespro/pgsphere/releases.

I agree that dev branch is not the best solution. Once we may have intermediate changes in the master branch between assigned tags I would like to somehow notify developers that the version in master is the development version. I propose to add 'dev' suffix to version number in the master branch (like 1.2.2.dev) if it contains some intermediate commits but a new tag is not yet assigned. If a developer downloads the master branch (not a particular tag) it would be clear that the downloaded version contains intermediate changes.

When we decide to create a new tag we remote suffix 'dev' from the version number and assign the version tag. Next PR will increment version and add 'dev' suffix if it is an intermediate PR.

I agree it would be better to release a new version (create a new tag) by our decision, not to follow a predefined release plan.

With such approach we may still merge intermediate PRs without changing the version every time.

Another idea is to state that the tagged versions are the stable ones. The current version in master is not stable, its functionality or the version itself can be changed. Once we decide to create a new stable version just create a tag and increment the version in the master.

Another idea is to state that the tagged versions are the stable ones. The current version in master is not stable, its functionality or the version itself can be changed. Once we decide to create a new stable version just create a tag and increment the version in the master.

I like this idea the best, I think.

I think we have come to the agreement. Thank you very much for the participation. Give me please some time to prepare the versioning policy statement. I also plan to start assign version tags and create release artifacts.

I created a new 1.2.2 tag and I found that it appears in the tags list in the wrong order (https://github.com/postgrespro/pgsphere/tags). Furthermore, when I try to create a release artifact, it appears in the wrong order as well. The release notes for 1.2.3 should be changed in this case. I have to edit them. At the moment I have no ideas how to change the order of the tags. I appreciate if you share some ideas how to do it. Thank you in advance.

Dear All,

I created some historical tags: 1.1.5, 1.2.0, 1.2.1, 1.2.2. I looked for commits where PGSPHERE_VERSION in Makefile and default_version in pg_sphere.control were changed. There are some problems to find an appropriate commits for earlier tags than 1.1.5. I can't identify such commits.

I would appreciate if you verify that the assigned tags are properly specified.

Thank you in advance!

I created some historical tags: 1.1.5, 1.2.0, 1.2.1, 1.2.2.

Thanks!

df7cb commented

I'd suggest to call the tags good now, and close this.

And perhaps delete these branches in git:

  • cleansing (merged)
  • experimental (merged)
  • pg14-compat (identical to merged commit)

I agree to remove the branches, cleansing and experimental branches are merged. pg14-compat changes seems to be merged in another complex PR. Lets remove these branches.

I recently pulled the latest from master, got all the tags, and checked out specific versions (1.2.3, 1.3.1, 1.4.1) to build rpm packages (yum.postrgesql.org for PG itself). Aside from one small issue of my own making (PR for Makefile dist target) that went smoothly and I was able to create and servers with different versions to test.

So I would say I'm happy with the current tagging. 👍

As suggested, the following branches have been removed:

  • cleansing
  • experimental
  • pg14-compat

Dear All,

I propose to close this Issue as completed. Do you have any objections?

No objection, @vitcpp.

Closed as completed.