Docker install: both compose files still name the 0.2 image, so an install runs an old release and a pull can downgrade #403
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#403
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found on 2026-09-29 in a read-only review of postulo at
95348908d, reading the compose files against the version, the release checklist and the wiki's install and upgrade instructions.Checked again on 2026-10-01 against
mainat0a5cad587: still present. The code is now atCONTRIBUTING.md:333-361(Making a release); the other locations have not moved.Every Postulo service in both compose files names
source.tiagoagueda.com/postulo/postulo:0.2, while the project is at 0.3.0 (pyproject.toml:3,## [0.3.0] — 2026-09-16inCHANGELOG.md); thev0.3.0tag itself carries the same:0.2pin. Nothing moves the pin when a release is cut. So the documented install runs the previous minor's image rather than the code, compose services and wiki beside it, without the 0.3.0 fixes, and an image built from a 0.3 checkout carries a tag that a later documentedpullreplaces with that older image.Related to #251 (closed), which found that no 0.3 image had been published and made the release push and verify
X.Y.Z,X.Yandlatest. Publishing:0.3does not help while the compose files still name:0.2; this issue adds the pin, the missing release step and the two upgrade paths that contradict each other.docker/compose.yml:29,:50,:93anddocker/compose.postgres.yml:23,:51(image: source.tiagoagueda.com/postulo/postulo:0.2), each under the comment thatbuild:"tags the result with the same name" (docker/compose.yml:26-28).CONTRIBUTING.md:331-359, which sets the version inpyproject.toml,src/postulo/__init__.pyand the changelog but never the image tag;check()inscripts/release_tools.py:146-156, which compares those three and nothing else.tests/test_image_build.py, which readscompose.postgres.ymlonly for the database major (:157-158) and the scheduler service (:193-194).Installing-Postulo.md:141andWriting-a-plugin.md:1529(FROM source.tiagoagueda.com/postulo/postulo:0.2for a plugin image), andInstalling-Postulo.md:346("pinned to a minor,…/postulo:0.2").README.md:176-182or the wiki'sInstalling-Postulo.md:9(git clone,docker compose -f docker/compose.yml up -d). With bothimage:andbuild:and nopull_policy, Compose pulls the named image when it is not present locally and builds only if the pull fails, so they run the newest 0.2.x. Settings they configure from the wiki that 0.3 introduced do nothing.schedulerservice's healthcheck looks for/app/data/scheduler-heartbeat(docker/compose.yml:69), which the scheduler writes only from 0.3.0, so on a 0.2 image it is permanently unhealthy.compose.postgres.yml, the 0.2 image has nopsycopg(added by #219 in 0.3.0), so the entrypoint'smigratefails and the web container restarts in a loop: the documented PostgreSQL install does not start.SECURITY.md:70-71says ("Upgrading is adocker compose pull") stays on 0.2.x for good, though the same paragraph says only the latest release receives fixes.Installing-Postulo.md:310-312:git pull,build --pull,up -d) gets a 0.3 build tagged:0.2, and the database is migrated to 0.3. Following Releases and upgrading later (Installing-Postulo.md:346-352, orSECURITY.md:70-71) replaces it with the registry's 0.2.x, which then runs against a schema newer than it knows.postuloimage tag in both compose files, the two wikiFROMlines andInstalling-Postulo.md:346to:0.3.CONTRIBUTING.md(or haverelease_toolswrite the new minor into both compose files), and havescripts/release_tools.py checkrefuse a tag whose compose files name another minor.postulo:local, withpull_policy: build, in a separate override file) so that a pull can never replace it.SECURITY.mdwhich of the two upgrade paths applies to which install, and never both.workerservice atdocker/compose.yml:88-106runsmanage.py work, which is still under Unreleased, #247), so point the install instructions at the latest release tag (git checkout vX.Y.Z) rather than at main, or attach the compose files to each release and link those.Done when
tests/test_image_build.pyreads everyservices.*.imagenamingpostulo/postuloindocker/compose.ymlanddocker/compose.postgres.ymland holds its tag to the major and minor ofpyproject.toml's version; it fails today on:0.2.tests/test_release_tools.pygivescheck()a repository whose compose file names another minor than the tag and expectsReleaseError.SECURITY.mdname one upgrade path per kind of install, and no documented sequence ends with a pulled image older than the migrated database.