ClassicPress / ClassicPress-APIs

ClassicPress API endpoints
https://api-v1.classicpress.net/
GNU General Public License v2.0
6 stars 12 forks source link

Initial plan for auto-updates and versioning #6

Closed nylen closed 5 years ago

nylen commented 6 years ago

Here is the basic idea:

Open question: this means that all auto-updates will eventually funnel towards final release builds and stay there. Is this desirable? We may need an option for whether to stay on the same "release channel" (nightly, alpha, beta, final) or not (or the ability to "switch channels").

From @invisnet here are some possible auto-update before => after versions (lines without => mean "no change"):

Step 1
======
1.0.0-alpha1+build.20181021 => 1.0.0-alpha1+build.20181021
1.0.0-alpha1+build.20181020 => 1.0.0-alpha1+build.20181021
1.0.0-alpha1 => 1.0.0-alpha1

Step 2
======
1.0.0-alpha1+build.20181021 => 1.0.0-alpha1+build.20181021
1.0.0-alpha1+build.20181020 => 1.0.0-alpha1+build.20181021
1.0.0-alpha2 => 1.0.0-alpha2
1.0.0-alpha1 => 1.0.0-alpha2

Step 3
======
1.0.0-alpha1+build.20181021 => 1.0.0-alpha1+build.20181021
1.0.0-alpha1+build.20181020 => 1.0.0-alpha1+build.20181021
1.0.0-alpha2 => 1.0.0-beta1
1.0.0-beta1 => 1.0.0-beta1
1.0.0-alpha1 => 1.0.0-beta1

Step 4
======
1.0.0-beta1 => 1.0.0-beta1
1.0.0-alpha2 => 1.0.0-beta1
1.0.0-alpha1 => 1.0.0-beta1
1.0.0-beta2+build.20181028 => 1.0.0-beta2+build.20181028
1.0.0-alpha1+build.20181021 => 1.0.0-beta2+build.20181028
1.0.0-alpha1+build.20181020 => 1.0.0-beta2+build.20181028

Step 5
======
1.0.0-beta2 => 1.0.0-beta2
1.0.0-beta1 => 1.0.0-beta2
1.0.0-alpha2 => 1.0.0-beta2
1.0.0-alpha1 => 1.0.0-beta2
1.0.0-beta2+build.20181030 => 1.0.0-beta2+build.20181030
1.0.0-beta2+build.20181028 => 1.0.0-beta2+build.20181030
1.0.0-alpha1+build.20181021 => 1.0.0-beta2+build.20181030
1.0.0-alpha1+build.20181020 => 1.0.0-beta2+build.20181030

Step 6
======
1.0.0-beta2 => 1.0.0
1.0.0-beta1 => 1.0.0
1.0.0 => 1.0.0
1.0.0-alpha2 => 1.0.0
1.0.0-alpha1 => 1.0.0
1.0.0-beta2+build.20181030 => 1.0.0+build.20181031
1.0.0-beta2+build.20181028 => 1.0.0+build.20181031
1.0.0-alpha1+build.20181021 => 1.0.0+build.20181031
1.0.0-alpha1+build.20181020 => 1.0.0+build.20181031
1.0.0+build.20181031 => 1.0.0+build.20181031

Step 7
======
1.0.0-beta2 => 1.1.0-alpha1
1.0.0-beta1 => 1.1.0-alpha1
1.0.0 => 1.0.0
1.1.0-alpha1 => 1.1.0-alpha1
1.0.0-alpha2 => 1.1.0-alpha1
1.0.0-alpha1 => 1.1.0-alpha1
1.0.0-beta2+build.20181030 => 1.1.0-alpha1+build.20181101
1.1.0-alpha1+build.20181101 => 1.1.0-alpha1+build.20181101
1.0.0-beta2+build.20181028 => 1.1.0-alpha1+build.20181101
1.0.0-alpha1+build.20181021 => 1.1.0-alpha1+build.20181101
1.0.0-alpha1+build.20181020 => 1.1.0-alpha1+build.20181101
1.0.0+build.20181031 => 1.1.0-alpha1+build.20181101
invisnet commented 6 years ago

That was a first PoC; now updated:

Step 1
======
1.0.0-alpha1+build.20181021
1.0.0-alpha1

Step 2
======
1.0.0-alpha1+build.20181021
1.0.0-alpha2
1.0.0-alpha1 => 1.0.0-alpha2

Step 3
======
1.0.0-alpha1+build.20181021
1.0.0-beta1
1.0.0-alpha2 => 1.0.0-beta1
1.0.0-alpha1 => 1.0.0-beta1

Step 4
======
1.0.0-beta1
1.0.0-beta2+build.20181028
1.0.0-alpha2 => 1.0.0-beta1
1.0.0-alpha1 => 1.0.0-beta1
1.0.0-alpha1+build.20181021 => 1.0.0-beta2+build.20181028
1.0.0-alpha1+build.20181020 => 1.0.0-beta2+build.20181028

Step 5
======
1.0.0-beta2+build.20181030
1.0.0-beta2
1.0.0-beta1 => 1.0.0-beta2
1.0.0-alpha2 => 1.0.0-beta2
1.0.0-alpha1 => 1.0.0-beta2
1.0.0-alpha1+build.20181021 => 1.0.0-beta2+build.20181030
1.0.0-alpha1+build.20181020 => 1.0.0-beta2+build.20181030

Step 6
======
1.0.0+build.20181031
1.0.0
1.0.0-beta2 => 1.0.0
1.0.0-beta1 => 1.0.0
1.0.0-alpha2 => 1.0.0
1.0.0-alpha1 => 1.0.0
1.0.0-beta2+build.20181030 => 1.0.0+build.20181031
1.0.0-beta2+build.20181028 => 1.0.0+build.20181031
1.0.0-alpha1+build.20181021 => 1.0.0+build.20181031
1.0.0-alpha1+build.20181020 => 1.0.0+build.20181031

Step 7
======
1.0.0
1.1.0-alpha1+build.20181101
1.1.0-alpha1
1.0.0-beta2 => 1.0.0
1.0.0-beta1 => 1.0.0
1.0.0-alpha2 => 1.0.0
1.0.0-alpha1 => 1.0.0
1.0.0-beta2+build.20181030 => 1.1.0-alpha1+build.20181101
1.0.0-beta2+build.20181028 => 1.1.0-alpha1+build.20181101
1.0.0-alpha1+build.20181021 => 1.1.0-alpha1+build.20181101
1.0.0-alpha1+build.20181020 => 1.1.0-alpha1+build.20181101
1.0.0+build.20181031 => 1.1.0-alpha1+build.20181101

Each step is a point in time, and each line without a => is an actual lump of json.

The major change in logic is that a prerelease should update to the next full release, not the latest prerelease.

nylen commented 5 years ago

This is implemented in the latest commits, and now live at https://api-v1.classicpress.net/upgrade/. Closing; we can track specific follow-up tasks in new issues.