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 - uses: actions/cache@v3 name: Setup pnpm cache with: path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Install dependencies run: pnpm install - name: Setup gluon run: | npm i -g gluon-build@next - name: Bump version run: | pnpm gluon ci --brand alpha --bump prerelease - name: Debug run: | gluon get version gluon get version | xargs echo "$(gluon get version | xargs)" - name: Export release date id: data shell: bash run: | echo "builddate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT echo "version=$(gluon 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: zen-browser-bot@users.noreply.github.com 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 - uses: actions/cache@v3 name: Setup pnpm cache with: path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Install dependencies run: pnpm install - name: Setup gluon run: | npm i -g gluon-build@next - name: Activate gluon CLI run: | echo "There's a bug in the gluon CLI, we run this so that gluon sets everything up correctly" pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} - name: Check version run: | echo "$(pwd)" ls . echo "version=$(pnpm gluon get version | xargs)" >> $GITHUB_OUTPUT if [[ $(pnpm gluon 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/set-swap-space@v1.0 with: swap-size-gb: 6 - name: Setup git run: | git config --global user.email "mauro-balades@users.noreply.github.com" 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: Disable wasm sandboxing for the sake of my sanity run: | echo "ac_add_options --without-wasm-sandboxed-libraries" >> mozconfig - 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 - uses: actions/cache@v3 name: Setup pnpm cache with: path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Install dependencies run: pnpm install - name: Load gluon CI setup run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} - name: Download firefox source and dependencies run: pnpm gluon download - name: Import run: pnpm gluon import - name: Bootstrap run: | cd engine ./mach --no-interactive bootstrap --application-choice browser cd .. - name: Build run: 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/set-swap-space@v1.0 with: swap-size-gb: 6 - name: Install pnpm run: npm install -g pnpm - name: Setup git run: | git config --global user.email "mauro-balades@users.noreply.github.com" git config --global user.name "mauro-balades" - name: Install dependencies run: | pnpm i - name: Load gluon CI setup run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} - name: Download run: pnpm gluon download - name: Disable wasm sandboxing for the sake of my sanity run: | cd engine/ echo "ac_add_options --without-wasm-sandboxed-libraries" >> mozconfig - 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 pnpm gluon 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/nsis || 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 gluon import --verbose - name: Build run: pnpm build - name: Package run: | set -x pnpm package mv ./dist/output.mar windows.mar mv ./dist/zen-$(pnpm gluon get version | xargs).en-US.win64.zip zen.en-US.win64.zip ls ./dist ls . - name: Upload artifact uses: actions/upload-artifact@v3 with: name: zen.installer.exe path: ./dist/zen.installer.exe - name: Upload artifact uses: actions/upload-artifact@v3 with: name: zen.win64.zip path: ./zen.en-US.win64.zip - name: Upload mar uses: actions/upload-artifact@v3 with: name: windows.mar path: ./windows.mar - 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 "mauro-balades@users.noreply.github.com" 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 gluon CI setup run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} - name: Download firefox source and dependancies run: pnpm gluon download --verbose - name: Import run: pnpm gluon 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: if: false runs-on: macos-13 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 "mauro-balades@users.noreply.github.com" 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 - uses: actions/cache@v3 name: Setup pnpm cache with: path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Install dependencies run: pnpm install - name: Load gluon CI setup run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} - name: Download firefox source and dependancies run: pnpm gluon download - name: Import run: pnpm gluon import - name: Bootstrap run: | cd engine ./mach --no-interactive bootstrap --application-choice browser cd .. - name: Gluon build run: 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] runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v3 - name: release-github uses: 'marvinpinto/action-automatic-releases@latest' with: repo_token: '${{ secrets.GITHUB_TOKEN }}' automatic_release_tag: ${{ needs.build-data.outputs.version }} prerelease: true title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})' files: | zen.linux.tar.bz2 zen.en-US.win64.zip zen.source.tar.gz linux.mar windows.mar - name: List run: find . - name: Checkout tools repo uses: actions/checkout@v3 with: repository: zen-browser/desktop path: updates token: ${{ secrets.GITHUB_TOKEN }} - name: Copy update manifests run: | mkdir -p updates/updates cp -a linux_update_manifest/. updates/updates/ cp -a windows_update_manifest/. updates/updates/ - uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: 🔖 Upload update manifests ${{ needs.build-data.outputs.version }} commit_user_name: Zen Browser Robot commit_user_email: zen-browser-bot@users.noreply.github.com repository: ./updates