name: Linux Release Build on: workflow_call: inputs: build-version: description: 'The version to build' required: true type: string release-branch: description: 'The branch to build' required: true type: string jobs: build-linux: permissions: contents: write runs-on: ubuntu-latest strategy: fail-fast: false matrix: generic: [true, false] name: Build Linux - ${{ matrix.generic == true && 'Generic' || 'Specific' }} steps: - name: Free Disk Space (Ubuntu) uses: jlumbroso/free-disk-space@main with: # this might remove tools that are actually needed, # if set to "true" but frees about 6 GB tool-cache: false - name: Install Node.js uses: actions/setup-node@v3 with: node-version: 20 - uses: actions/checkout@v4 with: submodules: recursive token: ${{ secrets.DEPLOY_KEY }} - 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: | set -x 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 - name: Configure sccache uses: actions/github-script@v7 with: script: | core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - 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 ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} - name: Download firefox source and dependencies run: pnpm surfer download - name: Fix rust version run: | # Install a rust version compatible with LLVM 18 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.79 source $HOME/.cargo/env - name: Import env: SURFER_COMPAT: ${{ matrix.generic == true }} run: pnpm surfer import - name: Build language packs run: sh scripts/download-language-packs.sh - name: Bootstrap run: | cd engine ./mach --no-interactive bootstrap --application-choice browser cd .. - name: Build env: SURFER_COMPAT: ${{ matrix.generic == true }} continue-on-error: true run: sh .github/workflows/src/release-build.sh - name: Build again if it failed if: failure() env: SURFER_COMPAT: ${{ matrix.generic == true }} run: sh .github/workflows/src/release-build.sh - name: Package env: SURFER_COMPAT: ${{ matrix.generic == true }} run: pnpm package - name: Rename artifacts run: | mv dist/zen-*.tar.bz2 "zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2" mv dist/output.mar linux${{ matrix.generic == true && '-generic' || '' }}.mar - name: Upload binary uses: actions/upload-artifact@v4 with: name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2 path: ./zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2 - name: Upload mar uses: actions/upload-artifact@v4 with: name: linux${{ matrix.generic == true && '-generic' || '' }}.mar path: ./linux${{ matrix.generic == true && '-generic' || '' }}.mar - name: Upload update manifests uses: actions/upload-artifact@v4 with: name: linux_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }} path: ./dist/update