Skip to content

Zen Alpha builds

Zen Alpha builds #163

Workflow file for this run

name: Zen Alpha builds
on:
workflow_dispatch:
inputs:
create_release:
description: 'Create a new release for this build'
required: false
default: false
type: 'boolean'
update_version:
description: 'Update the version number'
required: false
default: true
type: 'boolean'
jobs:
build-data:
permissions:
contents: write
name: Generate build data
runs-on: ubuntu-latest
outputs:
build_date: ${{ steps.data.outputs.builddate }}
version: ${{ steps.data.outputs.version }}
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v3
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Setup Surfer
run: |
npm i -g @zen-browser/surfer
- name: Bump version
run: |
pnpm surfer ci --brand alpha --bump prerelease
- name: Debug
run: |
surfer get version
surfer get version | xargs
echo "$(surfer get version | xargs)"
- name: Export release date
id: data
shell: bash
run: |
echo "builddate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT
echo "version=$(surfer get version | xargs)" >> $GITHUB_OUTPUT
- uses: stefanzweifel/git-auto-commit-action@v4
if: ${{ github.event.inputs.update_version == 'true' }}
with:
commit_message: 🔖 Update version to ${{ steps.data.outputs.version }}
commit_user_name: Zen Browser Robot
commit_user_email: [email protected]
check-release:
runs-on: ubuntu-latest
needs: [build-data]
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- name: Checkout
uses: actions/checkout@v3
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Setup surfer
run: |
npm i -g @zen-browser/surfer
- name: Activate surfer CLI
run: |
echo "There's a bug in the surfer CLI, we run this so that surfer sets everything up correctly"
pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Check version
run: |
echo "$(pwd)"
ls .
echo "version=$(pnpm surfer get version | xargs)" >> $GITHUB_OUTPUT
if [[ $(pnpm surfer get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
echo ">>> Version matches"
else
echo ">>> Version mismatch"
exit 1
fi
linux:
permissions:
contents: write
runs-on: ubuntu-latest
needs: [build-data, check-release]
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v3
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
- name: Set Swap Space
uses: pierotofy/[email protected]
with:
swap-size-gb: 6
- name: Setup git
run: |
git config --global user.email "[email protected]"
git config --global user.name "mauro-balades"
- name: Install system dependencies
run: |
sudo apt-get update --fix-missing
sudo apt-get update
sudo apt-get install dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
pip install pycairo testresources
- name: Free up space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Install sccache
env:
LINK: https://github.com/mozilla/sccache/releases/download
SCCACHE_VERSION: 0.2.13
run: |
SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl
mkdir -p $HOME/.local/bin
curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz
mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Save sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: /home/runner/.cache/sccache
key: ${{ runner.os }}-sccache
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependencies
run: pnpm surfer download
- name: Import
run: pnpm surfer import
- name: Bootstrap
run: |
cd engine
./mach --no-interactive bootstrap --application-choice browser
cd ..
- name: Build
run: |
export ZEN_RELEASE=1
pnpm build
- name: Package
run: pnpm package
- name: Rename artifacts
run: |
mv dist/zen-*.tar.bz2 "zen.linux.tar.bz2"
mv dist/output.mar linux.mar
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: zen.linux.tar.bz2
path: ./zen.linux.tar.bz2
- name: Upload mar
uses: actions/upload-artifact@v3
with:
name: linux.mar
path: ./linux.mar
- name: Upload update manifests
uses: actions/upload-artifact@v3
with:
name: linux_update_manifest
path: ./dist/update
windows:
runs-on: ubuntu-latest
needs: [build-data, check-release]
steps:
- name: Install Node.js and pnpm
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v3
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
- name: Set Swap Space
uses: pierotofy/[email protected]
with:
swap-size-gb: 6
- name: Install pnpm
run: npm install -g pnpm
- name: Setup git
run: |
git config --global user.email "[email protected]"
git config --global user.name "mauro-balades"
- name: Install dependencies
run: |
pnpm i
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download
run: pnpm surfer download
- name: Free up space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Setup For Windows
run: |
set -x
mkdir -p ~/win-cross
cd engine/
echo Setup wine
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
tar --zstd -xvf wine.tar.zst -C ~/win-cross
rm wine.tar.zst
echo Setup Visual Studio
sudo apt install -y msitools python3-pip
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
cat ../.github/workflows/src/windows_mozconfig >> ../configs/common/mozconfig
cd ..
npm install -g pnpm
export SURFER_PLATFORM="win32"
pnpm surfer bootstrap
cd engine/
ls ~/.mozbuild/clang/lib/clang/
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
cat ../configs/common/mozconfig
ls ~/win-cross/wine || true
ls ~/win-cross/vs2022 || true
- name: setup Rust
run: |
cd engine/
# Install a rust version compatible with 17
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.76
source $HOME/.cargo/env
rustup target add x86_64-pc-windows-msvc
cargo install cargo-download
cargo download -x windows=0.52.0
#? https://github.com/mozilla/sccache#known-caveats
export CARGO_INCREMENTAL=0
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
- name: Import
run: pnpm surfer import --verbose
- name: Build
run: |
unset SURFER_PLATFORM
export ZEN_RELEASE=1
export ZEN_CROSS_COMPILING=1
pnpm build
- name: Package
run: |
set -x
export SURFER_PLATFORM="win32"
pnpm package
mv ./dist/output.mar windows.mar
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
ls ./dist
ls .
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: zen.win64.zip
path: ./zen.win64.zip
- name: Upload mar
uses: actions/upload-artifact@v3
with:
name: windows.mar
path: ./windows.mar
- name: Upload installer
uses: actions/upload-artifact@v3
with:
name: zen.installer.exe
path: ./dist/zen.installer.exe
- name: Upload installer stub
uses: actions/upload-artifact@v3
with:
name: zen.installer.pretty.exe
path: ./dist/zen.installer.pretty.exe
- name: Upload update manifests
uses: actions/upload-artifact@v3
with:
name: windows_update_manifest
path: ./dist/update
source:
permissions:
contents: write
runs-on: ubuntu-latest
needs: [build-data]
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup git
run: |
git config --global user.email "[email protected]"
git config --global user.name "mauro-balades"
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependancies
run: pnpm surfer download --verbose
- name: Import
run: pnpm surfer import --verbose
- name: Compress
run: |
cd engine
# -h is used to dereference symlinks
tar --use-compress-program=zstd -hcf ../zen.source.tar.gz *
cd ..
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: zen.source.tar.gz
path: ./zen.source.tar.gz
mac:
runs-on: macos-14
needs: [build-data, check-release]
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: actions/checkout@v3
- name: Setup git
run: |
git config --global user.email "[email protected]"
git config --global user.name "mauro-balades"
- name: Install system dependencies
run: |
brew install cairo sccache gnu-tar mercurial
sudo pip install setuptools
- name: Force usage fo gnu-tar
run: |
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
source ~/.bash_profile
- name: Save sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: ~/Library/Caches/Mozilla.sccache
key: ${{ runner.os }}-sccache
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependancies
run: pnpm surfer download
- name: Import
run: pnpm surfer import
- name: Bootstrap
run: |
cd engine
./mach --no-interactive bootstrap --application-choice browser
cd ..
- name: surfer build
run: |
export ZEN_RELEASE=1
pnpm build --verbose
- name: Package
run: pnpm package
- name: Rename artifacts
run: |
mv ./dist/*.dmg "zen.macos.dmg"
mv ./dist/output.mar macos.mar
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: zen.macos.dmg
path: ./zen.macos.dmg
- name: Upload mar
uses: actions/upload-artifact@v3
with:
name: macos.mar
path: ./macos.mar
- name: Upload update manifests
uses: actions/upload-artifact@v3
with:
name: macos_update_manifest
path: ./dist/update
release:
if: ${{ github.event.inputs.create_release == 'true' }}
permissions: write-all
name: Release
needs: [build-data, linux, source, windows, check-release, mac]
runs-on: ubuntu-latest
steps:
- name: Update repo
uses: actions/checkout@v3
- name: Git Pull
run: git pull
- uses: actions/download-artifact@v3
- name: release-github
uses: 'marvinpinto/action-automatic-releases@latest'
with:
repo_token: '${{ secrets.DEPLOY_KEY }}'
automatic_release_tag: ${{ needs.build-data.outputs.version }}
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
files: |
zen.linux.tar.bz2
zen.win64.zip
zen.source.tar.gz
linux.mar
windows.mar
macos.mar
zen.installer.exe
zen.installer.pretty.exe
zen.macos.dmg
- name: List
run: find .
- name: Clone updates repo
uses: actions/checkout@v3
with:
repository: zen-browser/updates-server
path: updates-server
token: ${{ secrets.DEPLOY_KEY }}
- name: Copy update manifests
run: |
cd updates-server
mkdir -p updates
cp -a ../linux_update_manifest/. updates/
cp -a ../windows_update_manifest/. updates/
cp -a ../macos_update_manifest/. updates/
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 🚀 Update update manifests
commit_user_name: Zen Browser Robot
commit_user_email: [email protected]
repository: ./updates-server
distro-flatpak:
name: Build flatpak repos
needs: [release]
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-44
options: --privileged
if: ${{ github.event.inputs.create_release == 'true' && false }}
steps:
- uses: actions/checkout@v3
with:
repository: zen-browser/flatpak
token: ${{ secrets.DEPLOY_KEY }}
submodules: recursive
- name: Ensure repo is on main branch
run: |
cd flatpak
git checkout main
git pull
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: org.zen.browser.flatpak
manifest-path: flatpak/org.zen.browser.flatpak.json
cache-key: flatpak-builder-${{ github.sha }}
- name: Upload flatpak repo
uses: actions/upload-artifact@v3
with:
name: flatpak-repo
path: flatpak/repo