Files
netbird/docker/build-env/README.md
2026-06-16 15:31:52 +02:00

2.2 KiB

Build environments

Dockerfiles that pin the same toolchain CI uses, so a developer can reproduce a CI build locally without installing platform SDKs on their workstation. The version pins in each Dockerfile must stay in lockstep with .github/workflows/.

android/

Mirrors .github/workflows/mobile-build-validation.yml (android_build job). Carries Go 1.25.5, Adopt JDK 11, Android cmdline-tools 8512546, NDK 23.1.7779620 and gomobile pinned at the CI commit. Use it to produce netbird.aar from ./client/android:

docker build -t netbird/build-android docker/build-env/android
docker run --rm -v "$PWD:/src" -w /src netbird/build-android \
    gomobile bind \
    -o netbird.aar \
    -javapkg=io.netbird.gomobile \
    -ldflags="-checklinkname=0 \
              -X golang.zx2c4.com/wireguard/ipc.socketDirectory=/data/data/io.netbird.client/cache/wireguard \
              -X github.com/netbirdio/netbird/version.version=local" \
    ./client/android

To build the full Android APK, bind-mount the android-client repo as well and run its own ./gradlew assembleDebug from inside the container (the gradle wrapper ships with android-client).

windows-cross/

Cross-compiles Windows binaries from Linux using mingw-w64. Lets you verify that GOOS=windows go build ./... compiles cleanly without needing a Windows VM. Cannot run Windows tests — the golang-test-windows CI job executes on a native windows-latest runner with wintun.dll and PsExec, neither of which lives under Linux containers.

docker build -t netbird/build-windows docker/build-env/windows-cross
docker run --rm -v "$PWD:/src" -w /src netbird/build-windows \
    bash -c 'GOOS=windows GOARCH=amd64 go build ./...'

What is NOT here

  • iOS / macOS: cannot legally run macOS in Docker (Apple EULA), and Xcode is not redistributable. The ios_build CI job uses a macos-latest GitHub runner; locally you need a real Mac.

  • Native Windows tests: see note above. The Linux+mingw image builds, it does not execute Windows-host code paths (registry, wintun, services, PsExec workflows).

When CI version pins change, update the corresponding ARG lines in the Dockerfiles and the README's table of versions.