app.ini.tmpl changed in BREAKING CHANGE: remove forgejo (6a0339d):
-{{ if or (eq (env "FORGE") "forgejo") (eq (env "GITEA_LFS_START_SERVER") "true") }}
+{{ if (eq (env "GITEA_LFS_START_SERVER") "true") }}
LFS_JWT_SECRET = {{ secret "lfs_jwt_secret" }}
…but abra.sh kept APP_INI_VERSION=v22, and 3.6.2+1.27.1-rootless shipped that way. Swarm
configs are immutable, so upgrading any existing deployment whose config is already _v22
(i.e. anything on 3.6.0/3.6.1) aborts:
INFO initialising deployment
FATA failed to update config <stack>_app_ini_v22: Error response from daemon:
rpc error: code = InvalidArgument desc = only updates to Labels are allowed
Reproduced on a live 3.6.1+1.26.2-rootless → 3.6.2+1.27.1-rootless upgrade. This blocks
existing installs from taking 3.6.2, which carries the 1.27.1 security fixes
(CVE-2026-60004, CVE-2026-59774).
Bumping to v23 makes Swarm create a new config object instead of mutating v22; the orphaned _v22 object can be pruned after rollout. Only app.ini.tmpl changed, so DOCKER_SETUP_SH_VERSION and PG_BACKUP_VERSION are untouched.
Bumps `APP_INI_VERSION` v22 → v23.
`app.ini.tmpl` changed in `BREAKING CHANGE: remove forgejo` (`6a0339d`):
```diff
-{{ if or (eq (env "FORGE") "forgejo") (eq (env "GITEA_LFS_START_SERVER") "true") }}
+{{ if (eq (env "GITEA_LFS_START_SERVER") "true") }}
LFS_JWT_SECRET = {{ secret "lfs_jwt_secret" }}
```
…but `abra.sh` kept `APP_INI_VERSION=v22`, and `3.6.2+1.27.1-rootless` shipped that way. Swarm
configs are immutable, so upgrading any existing deployment whose config is already `_v22`
(i.e. anything on 3.6.0/3.6.1) aborts:
```
INFO initialising deployment
FATA failed to update config <stack>_app_ini_v22: Error response from daemon:
rpc error: code = InvalidArgument desc = only updates to Labels are allowed
```
Reproduced on a live `3.6.1+1.26.2-rootless` → `3.6.2+1.27.1-rootless` upgrade. This blocks
existing installs from taking 3.6.2, which carries the 1.27.1 security fixes
(CVE-2026-60004, CVE-2026-59774).
Bumping to v23 makes Swarm create a new config object instead of mutating v22; the orphaned
`_v22` object can be pruned after rollout. Only `app.ini.tmpl` changed, so
`DOCKER_SETUP_SH_VERSION` and `PG_BACKUP_VERSION` are untouched.
Docker Swarm configs are IMMUTABLE — only labels can be updated. The config is
named ${STACK_NAME}_app_ini_${APP_INI_VERSION}, so when app.ini.tmpl's rendered
content changes the version suffix MUST be bumped, otherwise abra tries to mutate
the existing object and the deploy aborts:
FATA failed to update config <stack>_app_ini_v22: Error response from daemon:
rpc error: code = InvalidArgument desc = only updates to Labels are allowed
'BREAKING CHANGE: remove forgejo' (6a0339d) edited app.ini.tmpl —
-{{ if or (eq (env "FORGE") "forgejo") (eq (env "GITEA_LFS_START_SERVER") "true") }}
+{{ if (eq (env "GITEA_LFS_START_SERVER") "true") }}
— but left APP_INI_VERSION at v22 (unchanged since the LFS commit 357926f), and
3.6.2+1.27.1-rootless shipped that way. Every existing deployment upgrading ACROSS
the forgejo removal therefore fails at 'initialising deployment'; reproduced on a
live 3.6.1+1.26.2-rootless -> 3.6.2+1.27.1-rootless upgrade.
Bumping to v23 makes Swarm create a NEW config object instead of mutating v22. The
orphaned v22 object can be pruned after the rollout. Only app.ini.tmpl changed, so
DOCKER_SETUP_SH_VERSION and PG_BACKUP_VERSION stay put.
Note: cc-ci's upgrade tier did not catch this because it resolved the upgrade base
to main-tip, which ALREADY contains the forgejo removal — base and head then render
identical app.ini and no config update is attempted. Real deployments upgrade from
the last published RELEASE (3.6.1+1.26.2), which is where the break appears.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Bumps
APP_INI_VERSIONv22 → v23.app.ini.tmplchanged inBREAKING CHANGE: remove forgejo(6a0339d):…but
abra.shkeptAPP_INI_VERSION=v22, and3.6.2+1.27.1-rootlessshipped that way. Swarmconfigs are immutable, so upgrading any existing deployment whose config is already
_v22(i.e. anything on 3.6.0/3.6.1) aborts:
Reproduced on a live
3.6.1+1.26.2-rootless→3.6.2+1.27.1-rootlessupgrade. This blocksexisting installs from taking 3.6.2, which carries the 1.27.1 security fixes
(CVE-2026-60004, CVE-2026-59774).
Bumping to v23 makes Swarm create a new config object instead of mutating v22; the orphaned
_v22object can be pruned after rollout. Onlyapp.ini.tmplchanged, soDOCKER_SETUP_SH_VERSIONandPG_BACKUP_VERSIONare untouched.Docker Swarm configs are IMMUTABLE — only labels can be updated. The config is named ${STACK_NAME}_app_ini_${APP_INI_VERSION}, so when app.ini.tmpl's rendered content changes the version suffix MUST be bumped, otherwise abra tries to mutate the existing object and the deploy aborts: FATA failed to update config <stack>_app_ini_v22: Error response from daemon: rpc error: code = InvalidArgument desc = only updates to Labels are allowed 'BREAKING CHANGE: remove forgejo' (6a0339d) edited app.ini.tmpl — -{{ if or (eq (env "FORGE") "forgejo") (eq (env "GITEA_LFS_START_SERVER") "true") }} +{{ if (eq (env "GITEA_LFS_START_SERVER") "true") }} — but left APP_INI_VERSION at v22 (unchanged since the LFS commit357926f), and 3.6.2+1.27.1-rootless shipped that way. Every existing deployment upgrading ACROSS the forgejo removal therefore fails at 'initialising deployment'; reproduced on a live 3.6.1+1.26.2-rootless -> 3.6.2+1.27.1-rootless upgrade. Bumping to v23 makes Swarm create a NEW config object instead of mutating v22. The orphaned v22 object can be pruned after the rollout. Only app.ini.tmpl changed, so DOCKER_SETUP_SH_VERSION and PG_BACKUP_VERSION stay put. Note: cc-ci's upgrade tier did not catch this because it resolved the upgrade base to main-tip, which ALREADY contains the forgejo removal — base and head then render identical app.ini and no config update is attempted. Real deployments upgrade from the last published RELEASE (3.6.1+1.26.2), which is where the break appears.!testme
🌻 cc-ci —
gitea@a5ce46f2✅ passedfull logs · dashboard
a5ce46f2a3to852717d212!testme
🌻 cc-ci —
gitea@852717d2✅ passedfull logs · dashboard
Auto-closed by /recipe-upgrade: its changes are already in upstream main (merged upstream); mirror main re-synced
Pull request closed