Versions and releases
The stack has two outputs: the npm packages (@real-life/*, for apps outside the repository) and the app (the reference app as web, container image, APK, AAB). One engine drives both: release-please reads the Conventional Commits on master, keeps a release PR open and creates the tags on merge. In detail, with its fragile spots, in docs/RELEASING.md.
Which version is running for me?
- In the app: at the very bottom of the user menu a small line shows version, commit and OTA channel (tapping copies it, for bug reports). The same values are at
/app/build-info.json. - Instance:
RLS_IMAGE_TAGin.env; which image actually runs is shown bydocker compose images. - Image tags: the release tag
app-v0.4.0yields0.4.0(exactly this version) and0.4(follows fixes within the minor version).edgeis the state of the main branch. There is nolatest, and a major tag only from 1.0. All tags: ghcr.io/real-life-org/rls-app. - Packages: the version on npm; tags in the repository are named
toolkit-vX.Y.Z,data-interface-vX.Y.Z,*-connector-vX.Y.Z.
What a merge to master already publishes
Without a release PR, with every matching merge:
- Web app, site, Storybook on real-life-stack.de, plus the OTA bundles with which installed apps (F-Droid, Obtainium, iOS) reload their web content (
deploy-prototypes.yml). - The image
edge(publish-app-image.yml), on changes to the reference app, packages ordeploy/app/.
Whoever runs edge therefore gets changes the same day. For production an instance pins the minor version it has checked.
What a release triggers
Merging the release PR creates the tags; from them:
toolkit-v*,data-interface-v*,*-connector-v*→ publish to npm.app-v*→ native build: APK for F-Droid and Obtainium (with OTA), AAB for Play (without OTA, Google forbids self-updates), and the image with the tagsX.Y.ZandX.Y.
A fix in a package cascades to the app version so that it reaches Play too; without that a package fix would stay invisible there. The app build takes the workspace packages from source, it never waits for the npm publish.
Updating an instance
- Check the new tag in a preview with its own Compose project name and port so that it does not replace the running container:
RLS_PORT=8081 RLS_IMAGE_TAG=0.5 docker compose -p rls-vorschau -f docker-compose.preview.yml up -d. Afterwardsdocker compose -p rls-vorschau -f docker-compose.preview.yml down. - Back up configuration, assets and the backend’s data; note the previous tag.
- Change
RLS_IMAGE_TAGin.env,docker compose pull && docker compose up -d. - The way back is the old tag; whether older software works with data that has changed since must be checked beforehand.
What a release contains
release-please generates the release notes from the commits. As long as the versions are at 0.x, feat and fix raise the patch version and only a breaking change (! or BREAKING CHANGE) the minor version (release-please-config.json: bump-minor-pre-major, bump-patch-for-minor-pre-major). A change from 0.4 to 0.5 is therefore the announcement that something changed that operators should check; what exactly is in the commit subjects and not in a second list.