Commit Graph
22 Commits
Author SHA1 Message Date
Linus Rath 3b4babca4c ci: name workflows and jobs by area 2026-10-11 18:18:36 +02:00
Linus Rath 5133d618d1 ci: run the docker integration suite nightly and on labelled PRs #647 2026-10-06 14:52:37 +02:00
Linus Rath 569c796522 ci: sign published images and release files with build provenance
Nothing showed where a published image or download came from, and the
standalone tarballs had no checksum at all. Anyone who could swap a
release asset could swap its `.sha256` with it.

- every published image (release, `-always`, beta/dev and Lite) gets a
  signed build provenance attestation, pushed to GHCR next to it
- the Lite zips and standalone tarballs are attested as well
- standalone tarballs get a `.sha256`, like the Lite zips
- the tarball build no longer holds a write token: a separate release
  job, which runs no checked-out code, checksums, attests and uploads
- the README says how to check with `gh attestation verify`
2026-09-27 15:22:17 +02:00
Linus Rath eb7b6f8dab fix: point Stalwart installs at a tagged Lite release and publish checksums
The Stalwart bundle's README told admins to use
`releases/latest/download/bulwark-lite-stalwart.zip` as `resourceUrl`.
Stalwart re-downloads that URL on its own schedule and checks no hash or
signature, so whatever the newest release held would run as script on
the Stalwart origin next to the web admin.

The README now installs from the tagged release, explains updating by
moving `resourceUrl` to the next tag, and describes the floating URL as
an opt-in with that risk spelled out. Release runs upload a `.sha256`
next to each Lite zip.
2026-09-26 17:30:47 +02:00
Linus Rath 582960ae06 ci: publish latest only from stable releases and scope workflow tokens
A manual run of the release image workflow tagged `latest` on whatever
ref it was dispatched from, and the demo deploy and every Watchtower
install follow `latest`. It now moves only for a published stable
release or a dispatch on a stable `v*` tag.

- `static-lite.yml` gave the whole workflow `contents: write`, including
  the build job that runs pull-request code. The build is read-only
  now; a separate release job with no checkout uploads the zips.
- `docker-publish.yml` passes the ref name through `env` instead of
  interpolating it into the shell script.
2026-09-26 16:30:23 +02:00
Linus Rath a4afc407e5 feat: publish Bulwark Lite as a container image #1081 2026-09-21 22:56:26 +02:00
Linus Rath c76969522d ci: deploy demo.bulwarkmail.org from here instead of Watchtower
The demo container followed ghcr.io/bulwarkmail/webmail:latest through
Watchtower, so a release reached it silently and there was no way to see,
trigger or undo it. It is now a deployment of this repo:

- .github/workflows/deploy-demo.yml runs after "Publish Docker Image on
  Release" succeeds, or on demand with a tag
  (`gh workflow run deploy-demo.yml -f tag=1.10.0`, or action=rollback).
  It only talks to the server; nothing is built.
- deploy/demo-deploy.sh is the forced command behind the deploy key
  (/usr/local/bin/bulwark-demo-deploy): pulls the tag, recreates the
  container with the demo mounts, checks /api/health and goes back to the
  image it replaced if that fails. A pre-release moves no :latest, so the
  deploy after one finds the same image and does nothing.

Watchtower has been recreated without bulwark-demo; it still updates the
two rbm.systems containers.
2026-09-20 02:57:52 +02:00
Linus Rath 7b07d25386 chore: release 1.11.0-beta.1 (Bulwark Lite pre-release)
Keep the latest Docker tags on the stable release when a GitHub release is marked as a pre-release, so auto-updating deployments on :latest do not pick up beta builds.
2026-09-19 15:04:49 +02:00
Linus Rath fdfcb1711e feat: add Bulwark Lite build for Stalwart Applications 2026-09-19 00:53:53 +02:00
Linus Rath 5de98bc04b feat: add Bulwark Lite static export build 2026-09-17 23:54:33 +02:00
Linus Rath afd8b64813 feat: run the test suite in CI #647 2026-09-07 22:34:47 +02:00
HardAndHeavy a3f9055541 ci: build and publish images with NEXT_PUBLIC_LOCALE_PREFIX=always 2026-07-21 20:58:02 +02:00
Linus Rath 599fa66822 fix: show git commit in About instead of "unknown" 2026-05-02 00:28:08 +02:00
shuki 6aaeb34272 feat: publish standalone tarball on release
Adds a GitHub Action that builds the Next.js standalone output on
release and attaches architecture-specific tarballs (amd64 + arm64)
as release assets. Downstream projects can download and extract
instead of building from source.

Closes #178
2026-04-11 23:28:39 +02:00
Linus Rath c24762c7a3 feat: separate branch containers into beta and dev packages 2026-04-10 14:51:17 +02:00
Linus Rath facef97fcc feat: publish main and dev branches as separate GHCR packages 2026-04-10 14:33:18 +02:00
xnilsit bc202498d5 feat: re-add release workflow 2026-03-21 11:06:14 +01:00
Linus Rath e7e07a38d7 fix: use native ARM runners instead of QEMU for Docker builds 2026-03-19 18:57:17 +01:00
Linus Rath 4737f2928b Remove Docker Hub, publish only to GHCR 2026-03-12 13:25:14 +01:00
Matthieu MALVACHE 29f186b6f2 feat(ci): publish Docker image to Docker Hub and GHCR
Add dual-registry publishing to both Docker Hub (rootfr/jmap-webmail)
and GitHub Container Registry. Multi-arch support for amd64/arm64.
2026-02-26 01:13:29 +01:00
Matthieu MALVACHE fb7cfe1634 fix(ci): add path filters to Docker workflow to avoid unnecessary rebuilds 2026-02-21 23:59:03 +01:00
Matthieu MALVACHE a932e1a1c7 feat: add GHCR Docker image publishing with multi-arch support
Add GitHub Actions workflow to automatically build and publish Docker
images to ghcr.io on releases. Supports amd64 and arm64 architectures.
Pre-built image available at ghcr.io/root-fr/jmap-webmail.
2026-02-21 23:30:44 +01:00