Skip to content

Build

Build #48

Workflow file for this run

# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: Build
on:
workflow_dispatch:
inputs:
MOZ_BUILD_DATE:
description: Build date override
required: false
type: string
PRE_RELEASE:
description: Mark the build as a pre-release
required: false
default: "true"
type: string
TAG_VERSION:
description: Display version
required: true
type: string
workflow_call:
inputs:
MOZ_BUILD_DATE:
required: false
type: string
PRE_RELEASE:
required: false
default: "true"
type: string
TAG_VERSION:
required: true
type: string
outputs:
versiondisplay:
description: Display version used for this build
value: ${{ jobs.metadata.outputs.version_display }}
run_id:
description: Build workflow run id
value: ${{ jobs.metadata.outputs.run_id }}
permissions:
contents: read
env:
MOZ_BUILD_DATE: ${{ inputs.MOZ_BUILD_DATE }}
PRE_RELEASE: ${{ inputs.PRE_RELEASE }}
RUST_TOOLCHAIN: 1.95.0
TAG_VERSION: ${{ inputs.TAG_VERSION }}
jobs:
metadata:
name: Build metadata
runs-on:
- namespace-profile-linux-sm
outputs:
run_id: ${{ steps.outputs.outputs.run_id }}
version_display: ${{ steps.outputs.outputs.version_display }}
steps:
- name: Resolve version
shell: bash
run: |
VERSION_DISPLAY="${TAG_VERSION}"
{
echo 'VERSION_DISPLAY<<EOF'
printf '%s\n' "${VERSION_DISPLAY}"
echo 'EOF'
} >> "$GITHUB_ENV"
- name: Export metadata outputs
id: outputs
shell: bash
run: |
echo "run_id=${GITHUB_RUN_ID}" >> "$GITHUB_OUTPUT"
echo "version_display=${VERSION_DISPLAY}" >> "$GITHUB_OUTPUT"
- name: Save build metadata
shell: bash
run: |
mkdir -p artifacts
{
echo "VERSION_DISPLAY=${VERSION_DISPLAY}"
echo "PRE_RELEASE=${PRE_RELEASE}"
echo "MOZ_BUILD_DATE=${MOZ_BUILD_DATE}"
echo "TAG_VERSION=${TAG_VERSION}"
echo "BUILD_RUN_ID=${GITHUB_RUN_ID}"
echo "COMMIT_SHA=${GITHUB_SHA}"
} > artifacts/build-metadata.env
- name: Upload build metadata
uses: namespace-actions/upload-artifact@v1
with:
name: build-metadata
path: artifacts/build-metadata.env
build-windows-x64-stage-1:
name: Windows x64 PGO generate
runs-on:
- namespace-profile-linux-md
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-windows-x64-stage-1
cancel-in-progress: true
env:
ARCH: x86_64-pc-windows-msvc
MOZCONFIG: .mozconfig-x86_64-pc-windows-msvc
WINEDEBUG: -all
steps:
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.10
- name: Setup Namespace sccache
shell: bash
run: |
SCCACHE_ENV_VARS="$(nsc cache sccache setup --cache_name wf-build-windows-x64-stage1)"
for kv in $SCCACHE_ENV_VARS; do
echo "$kv" >> "$GITHUB_ENV"
done
- name: Checkout
uses: namespacelabs/nscloud-checkout-action@v8
with:
submodules: recursive
- name: Setup build packages
shell: bash
run: |
sudo apt update
sudo apt install -y msitools zstd
scripts/fetch-clang-22.sh
curl -L https://github.com/ip7z/7zip/releases/download/26.01/7z2601-linux-x64.tar.xz | tar xJ
sudo mv 7zz /usr/local/bin/7z
- name: Install Rust target
shell: bash
run: |
rustup default "${RUST_TOOLCHAIN}"
rustup target add --toolchain "${RUST_TOOLCHAIN}" x86_64-pc-windows-msvc
- name: Prepare version
shell: bash
run: printf '%s\n' "${TAG_VERSION}" > browser/config/version_display.txt
- name: Configure release mode
shell: bash
run: |
case "${PRE_RELEASE}" in
true)
echo WFX_PRE_RELEASE=1 >> "$GITHUB_ENV"
;;
false)
echo WFX_RELEASE=1 >> "$GITHUB_ENV"
;;
*)
echo "PRE_RELEASE must be true or false" >&2
exit 1
;;
esac
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Update bundled blocker assets
shell: bash
run: bun waterfox/browser/components/blocker/scripts/update-bundled-assets.js
- name: Update offline Remote Settings dumps
shell: bash
run: python3 scripts/update-remote-settings-dumps.py
- name: Build instrumented binary
shell: bash
run: |
export GEN_PGO=1
./mach build
- name: Package instrumented binary
shell: bash
run: ./mach package
- name: Upload Windows x64 PGO generate outputs
uses: namespace-actions/upload-artifact@v1
with:
name: windows-${{ env.ARCH }}-pgo-generate
path: obj-${{ env.ARCH }}/dist/waterfox
build-windows-x64-stage-2:
name: Windows x64 PGO profile
needs:
- build-windows-x64-stage-1
runs-on: namespace-profile-windows-md
defaults:
run:
shell: bash
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-windows-x64-stage-2
cancel-in-progress: true
env:
ARCH: x86_64-pc-windows-msvc
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup profile packages
run: |
curl -L https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe --output MozillaBuildSetup-Latest.exe
7z x MozillaBuildSetup-Latest.exe -o/c/mozilla-build
scripts/fetch-clang-22.sh
- name: Install Rust toolchain
run: rustup default "${RUST_TOOLCHAIN}"
- name: Download Windows x64 PGO generate outputs
uses: namespace-actions/download-artifact@v2
with:
name: windows-${{ env.ARCH }}-pgo-generate
path: obj-${{ env.ARCH }}/dist/waterfox
- name: Run PGO profile
shell: pwsh
run: |
Remove-Item .mozconfig
python mach configure --disable-bootstrap
$env:LLVM_PROFDATA = "$HOME/.mozbuild/clang-22/bin/llvm-profdata.exe"
$env:JARLOG_FILE = "en-US.log"
python mach python build/pgo/profileserver.py --binary "./obj-${{ env.ARCH }}/dist/waterfox/waterfox.exe"
- name: Upload Windows x64 PGO profile data
uses: namespace-actions/upload-artifact@v1
with:
name: windows-${{ env.ARCH }}-pgo-profile
path: |
merged.profdata
en-US.log
build-windows-x64:
name: Windows x64
needs:
- build-windows-x64-stage-2
runs-on:
- namespace-profile-linux-md
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-windows-x64-stage-3
cancel-in-progress: true
env:
ARCH: x86_64-pc-windows-msvc
MOZCONFIG: .mozconfig-x86_64-pc-windows-msvc
WINEDEBUG: -all
steps:
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.10
- name: Setup Namespace sccache
shell: bash
run: |
SCCACHE_ENV_VARS="$(nsc cache sccache setup --cache_name wf-build-windows-x64-stage3)"
for kv in $SCCACHE_ENV_VARS; do
echo "$kv" >> "$GITHUB_ENV"
done
- name: Checkout
uses: namespacelabs/nscloud-checkout-action@v8
with:
submodules: recursive
- name: Setup build packages
shell: bash
run: |
sudo apt update
sudo apt install -y msitools zstd
scripts/fetch-clang-22.sh
curl -L https://github.com/ip7z/7zip/releases/download/26.01/7z2601-linux-x64.tar.xz | tar xJ
sudo mv 7zz /usr/local/bin/7z
- name: Install Rust target
shell: bash
run: |
rustup default "${RUST_TOOLCHAIN}"
rustup target add --toolchain "${RUST_TOOLCHAIN}" x86_64-pc-windows-msvc
- name: Prepare version
shell: bash
run: printf '%s\n' "${TAG_VERSION}" > browser/config/version_display.txt
- name: Configure release mode
shell: bash
run: |
case "${PRE_RELEASE}" in
true)
echo WFX_PRE_RELEASE=1 >> "$GITHUB_ENV"
;;
false)
echo WFX_RELEASE=1 >> "$GITHUB_ENV"
;;
*)
echo "PRE_RELEASE must be true or false" >&2
exit 1
;;
esac
- name: Download Windows x64 PGO profile data
uses: namespace-actions/download-artifact@v2
with:
name: windows-${{ env.ARCH }}-pgo-profile
path: ${{ github.workspace }}
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Update bundled blocker assets
shell: bash
run: bun waterfox/browser/components/blocker/scripts/update-bundled-assets.js
- name: Update offline Remote Settings dumps
shell: bash
run: python3 scripts/update-remote-settings-dumps.py
- name: Build
shell: bash
run: |
export USE_PGO=1
./mach build
- name: Package
shell: bash
run: |
./mach package
if [[ -d "$PWD/waterfox/browser/locales/en-GB" ]]; then
./mach package-multi-locale --locales ar cs da de el en-GB en-US es-ES es-MX fr hu id it ja ko lt nl nn-NO pl pt-BR pt-PT ru sv-SE th uk vi zh-CN zh-TW
fi
- name: Upload Windows build outputs
uses: namespace-actions/upload-artifact@v1
with:
name: windows-${{ env.ARCH }}-build
path: |
obj-${{ env.ARCH }}/dist/waterfox
obj-${{ env.ARCH }}/dist/host/bin/mar
obj-${{ env.ARCH }}/browser/installer/windows/instgen/
build-windows-arm64:
name: Windows ARM64
runs-on:
- namespace-profile-linux-md
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-windows-arm64
cancel-in-progress: true
env:
ARCH: aarch64-pc-windows-msvc
MOZCONFIG: .mozconfig-aarch64-pc-windows-msvc
WINEDEBUG: -all
steps:
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.10
- name: Setup Namespace sccache
shell: bash
run: |
SCCACHE_ENV_VARS="$(nsc cache sccache setup --cache_name wf-build-windows-arm64)"
for kv in $SCCACHE_ENV_VARS; do
echo "$kv" >> "$GITHUB_ENV"
done
- name: Checkout
uses: namespacelabs/nscloud-checkout-action@v8
with:
submodules: recursive
- name: Setup build packages
shell: bash
run: |
sudo apt update
sudo apt install -y msitools zstd
scripts/fetch-clang-22.sh
curl -L https://github.com/ip7z/7zip/releases/download/26.01/7z2601-linux-x64.tar.xz | tar xJ
sudo mv 7zz /usr/local/bin/7z
- name: Install Rust target
shell: bash
run: |
rustup default "${RUST_TOOLCHAIN}"
rustup target add --toolchain "${RUST_TOOLCHAIN}" aarch64-pc-windows-msvc
- name: Prepare version
shell: bash
run: printf '%s\n' "${TAG_VERSION}" > browser/config/version_display.txt
- name: Configure release mode
shell: bash
run: |
case "${PRE_RELEASE}" in
true)
echo WFX_PRE_RELEASE=1 >> "$GITHUB_ENV"
;;
false)
echo WFX_RELEASE=1 >> "$GITHUB_ENV"
;;
*)
echo "PRE_RELEASE must be true or false" >&2
exit 1
;;
esac
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Update bundled blocker assets
shell: bash
run: bun waterfox/browser/components/blocker/scripts/update-bundled-assets.js
- name: Update offline Remote Settings dumps
shell: bash
run: python3 scripts/update-remote-settings-dumps.py
- name: Build
shell: bash
run: ./mach build
- name: Package
shell: bash
run: |
./mach package
if [[ -d "$PWD/waterfox/browser/locales/en-GB" ]]; then
./mach package-multi-locale --locales ar cs da de el en-GB en-US es-ES es-MX fr hu id it ja ko lt nl nn-NO pl pt-BR pt-PT ru sv-SE th uk vi zh-CN zh-TW
fi
- name: Upload Windows ARM64 build outputs
uses: namespace-actions/upload-artifact@v1
with:
name: windows-${{ env.ARCH }}-build
path: |
obj-${{ env.ARCH }}/dist/waterfox
obj-${{ env.ARCH }}/dist/host/bin/mar
obj-${{ env.ARCH }}/browser/installer/windows/instgen/
build-macos:
name: macOS ${{ matrix.arch }}
runs-on:
- namespace-profile-macos-tahoe-lg
strategy:
fail-fast: false
matrix:
arch:
- x86_64-apple-darwin
- aarch64-apple-darwin
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-macos-${{ matrix.arch }}
cancel-in-progress: true
env:
ARCH: ${{ matrix.arch }}
MOZCONFIG: .mozconfig-${{ matrix.arch }}
steps:
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.10
- name: Setup Namespace sccache
shell: bash
run: |
SCCACHE_ENV_VARS="$(nsc cache sccache setup --cache_name wf-build-macos-${ARCH})"
for kv in $SCCACHE_ENV_VARS; do
echo "$kv" >> "$GITHUB_ENV"
done
- name: Checkout
uses: namespacelabs/nscloud-checkout-action@v8
with:
submodules: recursive
- name: Setup build packages
shell: bash
run: scripts/fetch-clang-22.sh
- name: Install Rust target
shell: bash
run: |
rustup default "${RUST_TOOLCHAIN}"
rustup target add --toolchain "${RUST_TOOLCHAIN}" "${ARCH}"
- name: Prepare version
shell: bash
run: printf '%s\n' "${TAG_VERSION}" > browser/config/version_display.txt
- name: Configure release mode
shell: bash
run: |
case "${PRE_RELEASE}" in
true)
echo WFX_PRE_RELEASE=1 >> "$GITHUB_ENV"
;;
false)
echo WFX_RELEASE=1 >> "$GITHUB_ENV"
;;
*)
echo "PRE_RELEASE must be true or false" >&2
exit 1
;;
esac
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Update bundled blocker assets
shell: bash
run: bun waterfox/browser/components/blocker/scripts/update-bundled-assets.js
- name: Update offline Remote Settings dumps
shell: bash
run: python3 scripts/update-remote-settings-dumps.py
- name: Build
shell: bash
run: ./mach build
- name: Package
shell: bash
run: |
./mach package
if [[ -d "$PWD/waterfox/browser/locales/en-GB" ]]; then
./mach package-multi-locale --locales ar cs da de el en-GB en-US es-ES es-MX fr hu id it ja ko lt nl nn-NO pl pt-BR pt-PT ru sv-SE th uk vi zh-CN zh-TW
fi
- name: Upload macOS build outputs
uses: namespace-actions/upload-artifact@v1
with:
name: macos-${{ matrix.arch }}-build
path: |
obj-${{ matrix.arch }}/dist/waterfox/*.app
obj-${{ matrix.arch }}/dist/host/bin/mar
build-linux-x64:
name: Linux x64
runs-on:
- namespace-profile-legacy-linux-md
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-linux-x64
cancel-in-progress: true
env:
ARCH: x86_64-pc-linux-gnu
MOZCONFIG: .mozconfig-x86_64-pc-linux-gnu
steps:
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.10
- name: Setup Namespace sccache
shell: bash
run: |
SCCACHE_ENV_VARS="$(nsc cache sccache setup --cache_name wf-build-linux-x64)"
for kv in $SCCACHE_ENV_VARS; do
echo "$kv" >> "$GITHUB_ENV"
done
- name: Checkout
uses: namespacelabs/nscloud-checkout-action@v8
with:
submodules: recursive
- name: Setup build packages
shell: bash
run: |
sudo apt update
sudo apt install -y patchelf python3-cryptography xvfb zstd
scripts/fetch-clang-22.sh
curl -L https://github.com/ip7z/7zip/releases/download/26.01/7z2601-linux-x64.tar.xz | tar xJ
sudo mv 7zz /usr/local/bin/7z
- name: Install Rust toolchain
shell: bash
run: rustup default "${RUST_TOOLCHAIN}"
- name: Prepare version
shell: bash
run: printf '%s\n' "${TAG_VERSION}" > browser/config/version_display.txt
- name: Configure release mode
shell: bash
run: |
case "${PRE_RELEASE}" in
true)
echo WFX_PRE_RELEASE=1 >> "$GITHUB_ENV"
;;
false)
echo WFX_RELEASE=1 >> "$GITHUB_ENV"
;;
*)
echo "PRE_RELEASE must be true or false" >&2
exit 1
;;
esac
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Update bundled blocker assets
shell: bash
run: bun waterfox/browser/components/blocker/scripts/update-bundled-assets.js
- name: Update offline Remote Settings dumps
shell: bash
run: python3 scripts/update-remote-settings-dumps.py
- name: Build
shell: bash
run: xvfb-run -a --server-args="-screen 0 1280x1024x24" ./mach build
- name: Package
shell: bash
run: |
./mach package
if [[ -d "$PWD/waterfox/browser/locales/en-GB" ]]; then
./mach package-multi-locale --locales ar cs da de el en-GB en-US es-ES es-MX fr hu id it ja ko lt nl nn-NO pl pt-BR pt-PT ru sv-SE th uk vi zh-CN zh-TW
fi
- name: Bundle Linux build outputs
shell: bash
run: |
dist_root="obj-${ARCH}/dist"
tar -C "$dist_root" -cf linux-build.tar waterfox host/bin/mar
- name: Upload Linux build outputs
uses: namespace-actions/upload-artifact@v1
with:
name: linux-build
path: linux-build.tar
build-linux-arm64:
name: Linux ARM64
runs-on:
- namespace-profile-linux-md-arm
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-linux-arm64
cancel-in-progress: true
env:
ARCH: aarch64-unknown-linux-gnu
MOZCONFIG: .mozconfig-aarch64-unknown-linux-gnu
steps:
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.10
- name: Setup Namespace sccache
shell: bash
run: |
SCCACHE_ENV_VARS="$(nsc cache sccache setup --cache_name wf-build-linux-arm64)"
for kv in $SCCACHE_ENV_VARS; do
echo "$kv" >> "$GITHUB_ENV"
done
- name: Checkout
uses: namespacelabs/nscloud-checkout-action@v8
with:
submodules: recursive
- name: Setup build packages
shell: bash
run: |
sudo apt update
sudo apt install -y clang lld patchelf python3-cryptography xvfb zstd
scripts/fetch-clang-22.sh
curl -L https://github.com/ip7z/7zip/releases/download/26.01/7z2601-linux-arm64.tar.xz | tar xJ
sudo mv 7zz /usr/local/bin/7z
- name: Install Rust target
shell: bash
run: |
rustup default "${RUST_TOOLCHAIN}"
rustup target add --toolchain "${RUST_TOOLCHAIN}" aarch64-unknown-linux-gnu
- name: Prepare version
shell: bash
run: printf '%s\n' "${TAG_VERSION}" > browser/config/version_display.txt
- name: Configure release mode
shell: bash
run: |
case "${PRE_RELEASE}" in
true)
echo WFX_PRE_RELEASE=1 >> "$GITHUB_ENV"
;;
false)
echo WFX_RELEASE=1 >> "$GITHUB_ENV"
;;
*)
echo "PRE_RELEASE must be true or false" >&2
exit 1
;;
esac
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Update bundled blocker assets
shell: bash
run: bun waterfox/browser/components/blocker/scripts/update-bundled-assets.js
- name: Update offline Remote Settings dumps
shell: bash
run: python3 scripts/update-remote-settings-dumps.py
- name: Build
shell: bash
run: xvfb-run -a --server-args="-screen 0 1280x1024x24" ./mach build
- name: Package
shell: bash
run: |
./mach package
if [[ -d "$PWD/waterfox/browser/locales/en-GB" ]]; then
./mach package-multi-locale --locales ar cs da de el en-GB en-US es-ES es-MX fr hu id it ja ko lt nl nn-NO pl pt-BR pt-PT ru sv-SE th uk vi zh-CN zh-TW
fi
- name: Bundle Linux ARM64 build outputs
shell: bash
run: |
dist_root="obj-${ARCH}/dist"
tar -C "$dist_root" -cf linux-aarch64-build.tar waterfox host/bin/mar
- name: Upload Linux ARM64 build outputs
uses: namespace-actions/upload-artifact@v1
with:
name: linux-aarch64-build
path: linux-aarch64-build.tar