Skip to content

Zen Release builds

Zen Release builds #55

Workflow file for this run

name: Zen Release 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: false
type: 'boolean'
update_branch:
description: 'Update branch with new version'
required: true
default: 'alpha'
type: 'choice'
options:
- 'alpha'
- 'twilight'
workflow_call:
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: false
type: 'boolean'
update_branch:
description: 'Update branch with new version'
required: true
default: 'alpha'
type: 'string'
jobs:
debug-inputs:
name: Debug inputs
runs-on: ubuntu-latest
steps:
- name: Debug
run: |
echo "create_release: ${{ inputs.create_release }}"
echo "update_version: ${{ inputs.update_version }}"
echo "update_branch: ${{ inputs.update_branch }}"
echo "GITHUB_REPOSITORY: ${{ github.repository }}"
echo "GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}"
echo "GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}"
echo "GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
check-build-is-correct:
runs-on: ubuntu-latest
needs: [debug-inputs]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.DEPLOY_KEY }}
fetch-depth: 0
- name: Check if correct branch
run: |
echo "Checking if we are on the correct branch"
git branch
git status
git branch --show-current
branch="${{ inputs.update_branch }}"
if [[ $branch == "alpha" ]]; then
branch="stable"
elif [[ $branch == "twilight" ]]; then
branch="dev"
fi
if [[ $(git branch --show-current) != $branch ]]; then
echo ">>> Branch mismatch"
exit 1
else
echo ">>> Branch matches"
fi
build-data:
permissions:
contents: write
name: Generate build data
runs-on: ubuntu-latest
needs: check-build-is-correct
outputs:
build_date: ${{ steps.data.outputs.builddate }}
version: ${{ steps.data.outputs.version }}
build_time: ${{ steps.data.outputs.buildtime }}
steps:
- 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: 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
if: ${{ inputs.update_version && inputs.update_branch == 'alpha' }}
run: |
pnpm surfer ci --brand ${{ inputs.update_branch }} --bump prerelease
- name: Bump version without new version
if: ${{ !inputs.update_version || inputs.update_branch == 'twilight' }}
run: |
pnpm surfer ci --brand ${{ inputs.update_branch }}
- 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
echo "buildtime=$(date +"%H:%M:%S")" >> $GITHUB_OUTPUT
- uses: stefanzweifel/git-auto-commit-action@v4
if: ${{ inputs.update_version }}
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
- uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.DEPLOY_KEY }}
- 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 ${{ inputs.update_branch }} --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
source:
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@v4
with:
submodules: recursive
token: ${{ secrets.DEPLOY_KEY }}
- 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 ${{ inputs.update_branch }} --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@v4
with:
name: zen.source.tar.gz
path: ./zen.source.tar.gz
windows-step-1:
name: Windows build step 1 (PGO build)
uses: ./.github/workflows/windows-release-build.yml
needs: [build-data]
permissions:
contents: write
secrets: inherit
with:
build-version: ${{ needs.build-data.outputs.version }}
generate-gpo: true
profile-data-path-archive: zen-windows-x86_64-profile-data-and-jarlog.zip
release-branch: ${{ inputs.update_branch }}
windows-step-2:
name: Windows build step 2 (Generate profile data)
uses: ./.github/workflows/windows-profile-build.yml
permissions:
contents: write
secrets: inherit
needs: [windows-step-1, build-data]
with:
build-version: ${{ needs.build-data.outputs.version }}
profile-data-path-archive: zen.win64-pgo-stage-1.zip
release-branch: ${{ inputs.update_branch }}
windows-step-3:
name: Windows build step 3 (build with profile data)
uses: ./.github/workflows/windows-release-build.yml
permissions:
contents: write
secrets: inherit
needs: [build-data, windows-step-2]
with:
build-version: ${{ needs.build-data.outputs.version }}
generate-gpo: false
release-branch: ${{ inputs.update_branch }}
linux:
name: Linux build
uses: ./.github/workflows/linux-release-build.yml
permissions:
contents: write
secrets: inherit
needs: [build-data]
with:
build-version: ${{ needs.build-data.outputs.version }}
release-branch: ${{ inputs.update_branch }}
mac:
name: macOS build
uses: ./.github/workflows/macos-release-build.yml
permissions:
contents: write
secrets: inherit
needs: [build-data]
with:
build-version: ${{ needs.build-data.outputs.version }}
release-branch: ${{ inputs.update_branch }}
appimage:
name: AppImage build - Linux ${{ matrix.generic == true && 'generic' || 'specific' }}
permissions:
contents: write
runs-on: ubuntu-latest
strategy:
matrix:
generic: [true, false]
needs: [linux]
steps:
- 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: Install dependencies
run: |
npm install -g pnpm
sudo apt-get update
sudo apt-get -y install libfuse2 desktop-file-utils appstream
- name: Download linux build
uses: actions/download-artifact@v4
with:
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
- name: Execute AppImage build
run: |
set -eux
rm AppDir/.DirIcon || true
cp configs/branding/${{ inputs.update_branch }}/logo128.png AppDir/usr/share/icons/hicolor/128x128/apps/zen.png
cp configs/branding/${{ inputs.update_branch }}/logo128.png AppDir/zen.png && ln -s zen.png AppDir/.DirIcon
if [ "${{ inputs.update_branch }}" = "twilight" ]; then
sed -i -e 's/Name=Zen Browser/Name=Zen Twilight/g' AppDir/zen.desktop
sed -i -e 's/StartupWMClass=zen-alpha/StartupWMClass=zen-twilight/g' AppDir/zen.desktop
fi
APPDIR=AppDir
tar -xvf *.tar.* && rm -rf *.tar.*
mv zen/* $APPDIR/
wget https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x *.AppImage
chmod +x ./AppDir/AppRun
echo "AppDir: $APPDIR"
ls -al
find .
ls -al "$APPDIR"
ARCH=x86_64 ./appimagetool-x86_64.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 10 \
-u "gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|desktop|latest|zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync" \
"$APPDIR" zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
mkdir dist
mv zen*AppImage* dist/.
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
- name: Upload artifact (ZSync)
uses: actions/upload-artifact@v4
with:
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
release:
if: ${{ inputs.create_release || inputs.update_branch == 'twilight' }}
permissions: write-all
name: Release
needs: [build-data, linux, windows-step-3, check-release, mac, appimage, source]
runs-on: ubuntu-latest
environment:
name: ${{ inputs.update_branch == 'alpha' && 'Deploy-Release' || 'Deploy-Twilight' }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.DEPLOY_KEY }}
- name: Git Pull
run: |
git pull
- uses: actions/download-artifact@v4
- name: List
run: find .
- name: Clone updates repo
uses: actions/checkout@v4
with:
repository: zen-browser/updates-server
path: updates-server
token: ${{ secrets.DEPLOY_KEY }}
- name: Download object files
run: |
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object
- name: Copy update manifests
env:
RELEASE_BRANCH: ${{ inputs.update_branch }}
run: |
cd updates-server
mkdir -p updates
cp -a ../linux_update_manifest_generic/. updates/
cp -a ../linux_update_manifest_specific/. updates/
if [[ $RELEASE_BRANCH == 'alpha' ]]; then
cp -a ../.github/workflows/object/windows-x64-signed-generic/update_manifest/. updates/
cp -a ../.github/workflows/object/windows-x64-signed-specific/update_manifest/. updates/
else
cp -a ../windows_update_manifest_generic/. updates/
cp -a ../windows_update_manifest_specific/. updates/
fi
cp -a ../macos_update_manifest_aarch64/. updates/
cp -a ../macos_update_manifest_x64/. 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
# If we are on twilight, we want to just update the twilight tag's release
- name: Update twilight tag
if: ${{ inputs.update_branch == 'twilight' }}
uses: 'marvinpinto/action-automatic-releases@latest'
with:
files: |
zen.source.tar.gz
zen.linux-generic.tar.bz2
zen.linux-specific.tar.bz2
zen-generic.AppImage
zen-generic.AppImage.zsync
zen-specific.AppImage
zen-specific.AppImage.zsync
zen.win-generic.zip
zen.win-specific.zip
linux.mar
linux-generic.mar
windows-generic.mar
windows.mar
macos-x64.mar
macos-aarch64.mar
zen.installer.exe
zen.installer-generic.exe
zen.macos-x64.dmg
zen.macos-aarch64.dmg
automatic_release_tag: 'twilight'
title: 'Twilight build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }} at ${{ needs.build-data.outputs.build_time }})'
draft: false
prerelease: true
repo_token: ${{ github.token }}
env:
GITHUB_REPOSITORY: ${{ github.repository }}
- name: release-github
uses: 'marvinpinto/action-automatic-releases@latest'
if: ${{ inputs.update_branch == 'alpha' }}
with:
repo_token: '${{ secrets.DEPLOY_KEY }}'
automatic_release_tag: ${{ needs.build-data.outputs.version }}
prerelease: false
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
files: |
zen.source.tar.gz
zen.linux-generic.tar.bz2
zen.linux-specific.tar.bz2
zen-generic.AppImage
zen-generic.AppImage.zsync
zen-specific.AppImage
zen-specific.AppImage.zsync
.github/workflows/object/windows-x64-signed-generic/zen.win-generic.zip
.github/workflows/object/windows-x64-signed-specific/zen.win-specific.zip
linux.mar
linux-generic.mar
.github/workflows/object/windows-x64-signed-generic/windows-generic.mar
.github/workflows/object/windows-x64-signed-specific/windows.mar
macos-x64.mar
macos-aarch64.mar
.github/workflows/object/windows-x64-signed-specific/zen.installer.exe
.github/workflows/object/windows-x64-signed-generic/zen.installer-generic.exe
zen.macos-x64.dmg
zen.macos-aarch64.dmg
prepare-flatpak:
if: ${{ inputs.create_release && inputs.update_branch == 'alpha' }}
permissions: write-all
name: Prepare Flatpak
needs: [release, linux, build-data]
runs-on: ubuntu-latest
steps:
- name: Clone flatpak repo
uses: actions/checkout@v4
with:
repository: zen-browser/release-utils
token: ${{ secrets.DEPLOY_KEY }}
- name: Install dependencies
run: |
git pull
sudo apt-get update
npm install
- name: Generate new flatpak release
run: |
npm run build-flatpak -- \
--version ${{ needs.build-data.outputs.version }}
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 🚀 Update releases for flatpak
commit_user_name: Zen Browser Robot
commit_user_email: [email protected]
- name: Clone flatpak repo
uses: actions/checkout@v4
with:
repository: zen-browser/flatpak
token: ${{ secrets.DEPLOY_KEY }}
path: flatpak
- name: Move releases.xml
run: |
pwd
ls .
ls ..
mv releases.xml ./flatpak/io.github.zen_browser.zen.metainfo.xml
# output the version to the file
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: '[release]: Update flatpak manifest'
commit_user_name: Zen Browser Robot
commit_user_email: [email protected]
repository: ./flatpak
- name: Wait 4 minutes for the flatpak repo to update
run: sleep 240
release-flatpak:
if: ${{ inputs.create_release && inputs.update_branch == 'alpha' }}
permissions: write-all
name: Release Flatpak
needs: [prepare-flatpak, build-data]
runs-on: ubuntu-latest
steps:
- name: Clone flatpak repo
uses: actions/checkout@v4
with:
repository: flathub/io.github.zen_browser.zen
token: ${{ secrets.DEPLOY_KEY }}
- name: Download linux generic build
uses: actions/download-artifact@v4
with:
name: zen.linux-generic.tar.bz2
- name: Update repo
uses: actions/checkout@v4
with:
path: zen-browser
token: ${{ secrets.DEPLOY_KEY }}
- name: Download flatpak archive
run: |
wget https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar -O archive.tar
- name: Setup git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Prepare flatpak manifest
run: |
python3 ./zen-browser/scripts/prepare-flatpak-release.py \
--flatpak-archive archive.tar \
--version ${{ needs.build-data.outputs.version }} \
--linux-archive zen.linux-generic.tar.bz2 \
--output io.github.zen_browser.zen.yml \
--template-root ./zen-browser/flatpak
- name: Commit changes
run: |
git add io.github.zen_browser.zen.yml
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
- name: Clean up
run: |
rm -rf zen-browser
rm -rf archive.tar
rm -rf zen.linux-generic.tar.bz2
- name: Upload flatpak manifest
uses: actions/upload-artifact@v4
with:
name: io.github.zen_browser.zen.yml
path: ./io.github.zen_browser.zen.yml
- name: Create pull request
uses: peter-evans/create-pull-request@v6
env:
GIT_TRACE: 1
GIT_CURL_VERBOSE: 1
with:
token: ${{ secrets.DEPLOY_KEY }}
commit-message: 🚀 Update to version ${{ needs.build-data.outputs.version }}
title: 🚀 Update to version ${{ needs.build-data.outputs.version }}
body: |
This PR updates the Zen Browser Flatpak package to version ${{ needs.build-data.outputs.version }}.
@${{ github.actor }} please review and merge this PR.
branch: update-to-${{ needs.build-data.outputs.version }}
base: master
git-token: ${{ secrets.DEPLOY_KEY }}
delete-branch: true
release-homebrew:
if: ${{ inputs.create_release && inputs.update_branch == 'alpha' }}
permissions: write-all
name: Homebrew release
needs: [release, mac, build-data]
runs-on: macos-latest
steps:
- name: Set up Homebrew
uses: Homebrew/actions/setup-homebrew@master
with:
cask: true
test-bot: false
- name: Setup git
uses: Homebrew/actions/git-user-config@master
with:
username: zen-browser-bot
- name: Bump zen-browser
uses: Homebrew/actions/bump-packages@master
with:
token: ${{ secrets.DEPLOY_KEY }}
casks: zen-browser