149 Commits
Author SHA1 Message Date
Mullvad build server 0dcf99d7c7 Add container signature for mullvadvpn-app-build-android:5a66b83775 2026-10-09 10:44:58 +02:00
Albin ebcf4e952a Install SBOM tools in Android container image 2026-10-08 14:59:04 +02:00
Jonatan Rhodin cfcf0f96a8 Update android container image 2026-10-06 09:03:03 +02:00
Mullvad build server 63b11296b0 Add container signature for mullvadvpn-app-build-android:c7f3b549dd 2026-10-05 13:20:45 +02:00
Albin 956929a192 Use platform dedicated cargo volumes by default
Generally this is a sane default and it's especially
important after the recent decoupling of the images
where different debian bases are used for each image.
2026-10-05 12:25:36 +02:00
Albin f162e499d5 Fix container setup order
Ensures basic packages such as curl are available
for other layers.
2026-10-05 12:06:25 +02:00
Albin 76b7136150 Migrate android container base to plain debian 13 2026-10-02 15:20:01 +02:00
Albin 3bbcce9c66 Extract linux container setup into scripts 2026-10-02 15:19:58 +02:00
Linus f39a8e2969 Install jq in the Linux build container
Generally useful tool to have and cheap to install. I want to use it to
parse `cargo metadata` output
2026-09-24 15:51:44 +02:00
Linus f8478540b4 Install a pinned and checksummed volta in the build container
Piping get.volta.sh into bash installs whatever version volta.sh
currently advertises as the latest. Download a fixed volta release
instead and verify its SHA-256 before extracting it, so the image
build is more reproducible and a tampered download fails the build.

Node and npm are still fetched by volta without any integrity check,
since volta does not verify its downloads.
2026-09-22 08:52:09 +02:00
Linus 355727f0c3 Install a pinned and checksummed rustup in the build container
Piping sh.rustup.rs into sh runs whatever script the server currently
serves. Download a fixed rustup-init version instead and verify its
SHA-256 before running it, so the image build is more reproducible and
a tampered download fails the build.
2026-09-18 15:03:45 +02:00
Mullvad build server b02547b3a4 Bump Linux build container to one with Debian 11 snapshot archives 2026-09-17 13:43:50 +02:00
Mullvad build server 9b55fc929c Add container signature for mullvadvpn-app-build:0b1d88e5d8 2026-09-17 11:10:52 +02:00
Linus 8367b83553 Set CARGO_TARGET_DIR when running the container, not in the image
The variable is only meaningful together with the /cargo-target volume
that container-run.sh mounts, but the image exported it to every user,
including CI jobs that run the image through `container:` and mount no
such volume. Those builds wrote to a path nothing else knew about, which
defeated Rust caching and forced workarounds.

Release builds and local containerized builds go through
container-run.sh and are unaffected, on both Linux and Android.
2026-09-17 10:57:31 +02:00
Linus 6a691f3e53 Bump nightly Rust toolchain for reproducible builds
Cargo removed the default "object" scope from the release profile in
rust-lang/cargo#17424, so enabling the feature in .cargo/config.toml no
longer trims anything, silently. The scope has to be set per profile,
and that key cannot be committed to .cargo/config.toml because stable
cargo rejects it rather than ignoring it.
2026-09-16 11:28:35 +02:00
Linus a115c30c39 Use Debian snapshot archives for build image pkg sources
Allows us to use Debian 11 packages beyond the EOL, and helps us make
the build container images more reproducible.
2026-09-15 15:32:43 +02:00
Linus da47fb869d Pin the build container images by digest
The image reference files, and the Dockerfiles that build on our own
images, named only a tag. Tags are mutable: whoever can push to the
registry can point one at a different image, and then everybody
silently builds in something else. We never reuse a tag, since it is
the commit the image was built from, but that is a promise the files
themselves do not make and nobody downstream can check.

Name the images by digest instead, everywhere they are referenced. The
build environment is an input to a reproducible build just as much as
the source is, so it has to be named as precisely.

test/scripts/Dockerfile loses its `latest` default rather than gaining
a digest. Its container-run.sh always passes the image in, read from
building/linux-container-image.txt, so the default only existed to be
silently wrong.

Which commit an image was built from is still in git: the signed commit
adding its signatures names the tag in its message and the digest in
the directory it adds under building/sigstore/.
build-and-publish-container-image.sh now also prints the line to put in
the reference file, so the digest never has to be looked up by hand.
2026-08-04 11:20:11 +02:00
Linus ca4a398531 Add build script for reproducible builds
All it does is build with a pinned nightly compiler, to be able to
use the trim-paths feature
2026-07-29 12:51:08 +02:00
David Lönnhager 04fb4026c6 Update android-container-image.txt 2026-07-28 09:48:58 +02:00
David Lönnhager 4c6f8fc720 Update linux-container-image.txt 2026-07-28 09:48:50 +02:00
Mullvad build server cb35e5b124 Add container signature for mullvadvpn-app-build-android:b40e0e28c2 2026-07-24 16:32:49 +02:00
Mullvad build server b2c1af592b Add container signature for mullvadvpn-app-build:da84604a2e 2026-07-24 15:25:34 +02:00
David Lönnhager da84604a2e Decouple Rust version used by Dockerfile from rust-toolchain.toml
The build script previously read the Rust version out of
rust-toolchain.toml and passed it to the image build. This coupled the
container image to the toolchain file: the two pin the same version and,
since Rust is preinstalled in the image, they must match exactly. A
mismatch is not a hard error either -- rustup silently auto-installs the
toolchain named in rust-toolchain.toml on first use, but only the bare
toolchain, without the clippy component or the targets baked into the
image, so clippy and cross-compilation jobs fail with 'missing
component/target' errors.

That coupling forced a Rust bump to rebuild and republish the image in
the same PR as the rust-toolchain.toml change. Because the image is
tagged with the git commit it was built from, rebasing that PR onto a
moved main rewrote the commit hash and left the published tag pointing
at a dangling commit.

Setting the version directly in the Dockerfile makes the image build
self-contained: it no longer needs the PR's rust-toolchain.toml. The
image can now be built, signed and pushed straight to main from a
permanent commit, and rust-toolchain.toml and the image pin bumped to
match in a later, rebase-safe change.
2026-07-24 15:08:00 +02:00
David Göransson 5ff07bb900 Bump to mullvadvpn-app-build-android:dd5021f5a9 2026-06-22 15:59:09 +02:00
Mullvad build server 60ad8f23a0 Add container signature for mullvadvpn-app-build-android:dd5021f5a9 2026-06-22 15:47:12 +02:00
Albin 10c44a5a9b Bump to mullvadvpn-app-build-android:014f9e29e5 2026-06-04 11:48:31 +02:00
Mullvad build server 1556298e83 Add container signature for mullvadvpn-app-build-android:014f9e29e5 2026-06-04 11:44:13 +02:00
Albin be6b4123be Migrate build script to gradle
This migration is done with forward and backward compatibility
in mind.
2026-04-27 17:21:28 +02:00
Markus Pettersson 66bd9107bc Remove Golang from build container Dockerfile
Update base Dockerfile to remove Golang, since all app version built by
this container no longer depend on wireguard-go.
2026-04-20 16:28:04 +02:00
Albin 0f615a3a67 Add support for setting container GRADLE_OPTS 2026-04-17 14:29:14 +02:00
Mullvad build server 487ae37f66 Update android-container-image.txt 2026-04-17 13:14:51 +02:00
Mullvad build server 79ce98f7f7 Add container signature for mullvadvpn-app-build-android:6103dbf051 2026-04-17 13:14:47 +02:00
Mullvad build server 125ff15247 Update linux-container-image.txt 2026-04-17 13:14:40 +02:00
Mullvad build server e25c932446 Add container signature for mullvadvpn-app-build:09b5e4e744 2026-04-17 13:14:36 +02:00
Jonatan Rhodin 1f4c9007a2 Point Android image to latest build 2026-04-13 13:12:57 +02:00
Mullvad build server 5e7542e236 Add container signature for mullvadvpn-app-build-android:849aa759bf 2026-04-13 12:27:36 +02:00
David Lönnhager 191e7a3380 Point Android image to latest build 2026-04-10 09:43:51 +02:00
Mullvad build server 89b4981b50 Add container signature for mullvadvpn-app-build-android:c7757eb83c 2026-04-10 09:40:36 +02:00
Jonatan RhodinandAlbin 4755ce58b5 Sign the android app with hardware key
Co-authored-by: Albin <albin@mullvad.net>
2026-04-01 13:47:17 +02:00
Mullvad build server be36612587 Add container signature for mullvadvpn-app-build-node-grpc-bindings
hash: 4c6c9f0924
2026-03-23 10:17:25 +01:00
Mullvad build server a70a5463c9 Update *-container-image.txt 2026-03-06 16:36:34 +01:00
Mullvad build server 36ba066fff Add container signature for mullvadvpn-app-build-android:3dfc61727f 2026-03-06 16:36:33 +01:00
Mullvad build server bb3a0c5134 Add container signature for mullvadvpn-app-build:c40d52f462 2026-03-06 16:36:32 +01:00
Kalle Lindström e138ad2eba Update to build app with Java 21 2026-02-27 10:35:14 +01:00
Mullvad build server 4aeb2bec27 Add container signature for mullvadvpn-app-build-android:39c0bb5b28 2026-02-26 11:53:52 +01:00
Linus Färnstrand a2f7475a43 Make dockerfiles use GPL-3.0-or-later license 2026-02-20 13:18:56 +01:00
Mullvad build server 448a1eeef0 Bump container images for Linux + Android 2025-11-13 16:01:26 +01:00
Mullvad build server 4472018917 Add container signature for mullvadvpn-app-build-android:6f6ff93a54 2025-11-13 16:01:24 +01:00
Mullvad build server 4eca8887ce Add container signature for mullvadvpn-app-build:dbc170b2c5 2025-11-13 16:01:21 +01:00
Linus Färnstrand 8e949bf836 Remove all usage of USE_MOLD env var for containers 2025-08-08 09:29:15 +02:00