case 4690 - release procedure: publish order, check downloads before the droplet upgrades

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-28 17:25:51 -07:00
parent 903f14ba1d
commit ad5b797854

View File

@@ -19,15 +19,15 @@ bash on a droplet or the ayanova.com web server (logged in as root).
5. Test on devtest: upgrade it from `next`, remote E2E, check each change
6. Tag the release in git
7. Publish: docs and downloads go live (not announced yet)
8. **Upgrade the subscription droplets** (Thursday, by time zone)
9. **Announce**: upload `latest-version.json`
10. Download every published file back and check its version
8. Download every published file back and check its version
9. **Upgrade the subscription droplets** (Thursday, by time zone)
10. **Announce**: upload `latest-version.json`
11. Tell subscription customers
12. Start the next version
**Subscription droplets are upgraded before the release is announced** (John, 2026-10-26, from
8.3.0 on). Uploading `latest-version.json` is what tells every AyaNova installation that a new
version exists, so it is the very last publishing step. Between steps 7 and 9 the new docs and
version exists, so it is the very last publishing step. Between steps 7 and 10 the new docs and
downloads are already visible on the website; that gap is accepted.
## 1. Code complete
@@ -148,53 +148,53 @@ next patch version (8.3.1) with its own tag. To see later what any release conta
## 7. Publish (not announced yet)
On the ayanova.com web server. In the archive folder name (`YYYY-MM-DD-vX.Y.Z`), replace the
example date and version with the real release date and version:
The download folders on the ayanova.com web server:
```bash
rm -r /var/www/html/ayanova.com/docs/* && cp -r /var/www/html/ayanova.com/docs-next/* /var/www/html/ayanova.com/docs
```
- `download/` always holds the current release, plus files that are not part of a release (for
example `QBFC14_0installer.exe`), which stay.
- `download/next/` is staging: the release as built and tested in steps 4 and 5.
- `download/old/` archives the three most recent releases, including the current one, each in a
folder named for its release date and version. The current release is therefore in both
`download/` and `download/old/`, on purpose.
```bash
mkdir /var/www/html/ayanova.com/download/old/2026-11-05-v8.3.0 && cp -r /var/www/html/ayanova.com/download/next/* /var/www/html/ayanova.com/download/old/2026-11-05-v8.3.0
```
On the ayanova.com web server, in this order:
Remove the oldest release folder in `download/old`: only the three most recent releases are kept
(since December 2023; customers whose maintenance lapsed must purchase to upgrade, and the older
versions are kept only to diagnose a regression). List the folder, then remove the oldest; at
8.3.0 that is 8.2.2:
1. Replace the manual with the new one:
```bash
ls /var/www/html/ayanova.com/download/old
```
```bash
rm -r /var/www/html/ayanova.com/docs/* && cp -r /var/www/html/ayanova.com/docs-next/* /var/www/html/ayanova.com/docs
```
```bash
rm -r /var/www/html/ayanova.com/download/old/2024-10-23-v8.2.2
```
2. Replace this release's files in `download/` with the tested ones from `next/`. Only the files
in `next/` are overwritten; everything else in `download/` stays. The same command keeps a copy
of the current `latest-version.json` (it is not in `next/` and is replaced only in step 10):
```bash
cp /var/www/html/ayanova.com/download/next/* /var/www/html/ayanova.com/download && cp /var/www/html/ayanova.com/download/latest-version.json /var/www/html/ayanova.com/download/previous-latest-version.json
```
```bash
cp /var/www/html/ayanova.com/download/next/* /var/www/html/ayanova.com/download && cp /var/www/html/ayanova.com/download/latest-version.json /var/www/html/ayanova.com/download/previous-latest-version.json
```
3. Archive the release in `download/old/`, in a folder named `YYYY-MM-DD-vX.Y.Z` with the release
date and version (for 8.3.0, released 2026-10-29):
```bash
mkdir /var/www/html/ayanova.com/download/old/2026-10-29-v8.3.0 && cp /var/www/html/ayanova.com/download/next/* /var/www/html/ayanova.com/download/old/2026-10-29-v8.3.0
```
4. Remove the oldest release folder in `download/old`, so three remain (kept since December 2023;
customers whose maintenance lapsed must purchase to upgrade, and the older versions are kept
only to diagnose a regression). List the folder, then remove the oldest; at 8.3.0 that is 8.2.2:
```bash
ls /var/www/html/ayanova.com/download/old
```
```bash
rm -r /var/www/html/ayanova.com/download/old/2024-10-23-v8.2.2
```
Do **not** upload the new `latest-version.json` yet.
## 8. Upgrade the subscription droplets
On the normal Thursday schedule and times (or out of band for an emergency), as in the
[weekly update](#weekly-os-update): snapshot, health check, OS update, reboot; then any
one-time steps for this release, then the [release upgrade commands](#upgrade-commands); then the
health check and the log entry. Mark each server as upgraded in its Sockeye subscription server record.
## 9. Announce
Only after the last subscription droplet is upgraded, from PowerShell on the workstation (overwrites
the old one; from this moment every AyaNova installation shows that the new version is available):
```powershell
scp C:\data\code\raven\dist\latest-version.json root@ayanova.com:/var/www/html/ayanova.com/download/
```
## 10. Check what was published
## 8. Check what was published
Download every installer and package back from ayanova.com and check its version: Windows
installers by the .exe's ProductVersion, Linux zips by the `AyaNova.dll` inside. (Found
@@ -204,7 +204,24 @@ installers by the .exe's ProductVersion, Linux zips by the `AyaNova.dll` inside.
$ProgressPreference = 'SilentlyContinue'; $d = "$env:TEMP\ayanova-published"; Remove-Item $d -Recurse -Force -ErrorAction SilentlyContinue; New-Item -ItemType Directory $d | Out-Null; foreach ($f in 'ayanova-windows-x64-single-setup.exe','ayanova-windows-x64-lan-setup.exe','ayanova-linux-x64-server.zip','ayanova-linux-x64-desktop.zip','ayanova-subscription-linux-x64-server.zip') { Invoke-WebRequest "https://www.ayanova.com/download/$f" -OutFile "$d\$f" -UseBasicParsing; if ($f -like '*.exe') { "$f $((Get-Item "$d\$f").VersionInfo.ProductVersion)" } else { Expand-Archive "$d\$f" "$d\$($f -replace '\.zip$','')" ; "$f $((Get-Item "$d\$($f -replace '\.zip$','')\AyaNova.dll").VersionInfo.ProductVersion)" } }
```
Every line must show the new version.
Every line must show the new version. If one does not, fix the download folder (step 7) and check
again; no subscription droplet is upgraded and nothing is announced until every line is right.
## 9. Upgrade the subscription droplets
On the normal Thursday schedule and times (or out of band for an emergency), as in the
[weekly update](#weekly-os-update): snapshot, health check, OS update, reboot; then any
one-time steps for this release, then the [release upgrade commands](#upgrade-commands); then the
health check and the log entry. Mark each server as upgraded in its Sockeye subscription server record.
## 10. Announce
Only after the last subscription droplet is upgraded, from PowerShell on the workstation (overwrites
the old one; from this moment every AyaNova installation shows that the new version is available):
```powershell
scp C:\data\code\raven\dist\latest-version.json root@ayanova.com:/var/www/html/ayanova.com/download/
```
## 11. Tell subscription customers