Files
zen-browser-flake/.github/update.sh
Luis Quiñones dd6ba8e792 feat: variant version will be the default version + official variant
The official variant will pin the official binaries from
github:zen-browser/desktop, that's the option for people that doesn't
trust the binaries of this repository.

In other hand, the "twilight" package is pinned with artifacts that we
store in this repository. The reason why this is default now is because
I decided to follow the philosophy that is available in the official
NixOS page(https://nixos.org/): reproducible, declarative and reliable.
I know this could be a little bit invasive for some people but I think
that they're just a minority and this is a problem that should be solved
now given the time that has been passed since twilight was implemented.
2025-02-15 19:40:23 -05:00

188 lines
6.3 KiB
Bash
Executable File

#!/bin/sh
ci=false
if echo "$@" | grep -qoE '(--ci)'; then
ci=true
fi
only_check=false
if echo "$@" | grep -qoE '(--only-check)'; then
only_check=true
fi
repo_tags=$(curl 'https://api.github.com/repos/zen-browser/desktop/tags' -s)
twilight_tag=$(echo "$repo_tags" | jq -r '.[]|select(.name|test("twilight"))')
twilight_version_name=$(curl 'https://api.github.com/repos/zen-browser/desktop/releases/tags/twilight' -s | jq -r '.name' | grep -oE '([0-9\.])+(t|-t.[0-9]+)')
if [ "$twilight_version_name" = "" ]; then
echo "No twilight version could be extracted..."
exit 1
fi
beta_tag=$(echo "$repo_tags" | jq -r '(map(select(.name | test("[0-9]+\\.[0-9]+b$")))) | first')
commit_beta_targets=""
commit_beta_version=""
commit_twilight_targets=""
commit_twilight_version=""
get_twilight_release_from_zen_repo() {
arch=$1
curl -sL \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/zen-browser/desktop/releases/tags/twilight |
jq -r --arg arch "$arch" '.assets[] | select(.name | contains("zen.linux") and contains($arch)) | "\(.id) \(.name)"'
}
download_artifact_from_zen_repo() {
artifact_id="$1"
# relative or absolute path, whatever
file_path="$2"
curl -L \
-H "Accept: application/octet-stream" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/zen-browser/desktop/releases/assets/$artifact_id" >"$file_path"
}
try_to_update() {
# Options like "beta" or "twilight"
version_name=$1
# Options like "x86_64" or "aarch64"
arch=$2
# JSON object with metadata about the specified version($1)
target_tag_meta=$3
meta=$(jq ".[\"$version_name\"][\"$arch-linux\"]" <sources.json)
local_sha1=$(echo "$meta" | jq -r '.sha1')
remote_sha1=$(echo "$target_tag_meta" | jq -r '.commit.sha')
echo "Checking $version_name version @ $arch... local=$local_sha1 remote=$remote_sha1"
if [ "$local_sha1" = "$remote_sha1" ]; then
echo "Local $version_name version is up to date"
return
fi
echo "Local $version_name version mismatch with remote so we* assume it's outdated"
if $only_check; then
echo "should_update=true" >>"$GITHUB_OUTPUT"
exit 0
fi
version=$(echo "$target_tag_meta" | jq -r '.name')
download_url="https://github.com/zen-browser/desktop/releases/download/$version/zen.linux-$arch.tar.xz"
prefetch_output=$(nix store prefetch-file --unpack --hash-type sha256 --json "$download_url")
sha256=$(echo "$prefetch_output" | jq -r '.hash')
semver=$version
if [ "$version_name" = "twilight" ]; then
semver="$twilight_version_name"
short_sha1="$(echo "$remote_sha1" | cut -c1-7)"
release_name="$version-$short_sha1"
flake_repo_location="0xc000022070/zen-browser-flake"
if ! gh release list | grep "$release_name" >/dev/null; then
echo "Creating $release_name release..."
# Users with push access to the repository can create a release.
gh release --repo="$flake_repo_location" \
create "$release_name" --notes "$version#$remote_sha1 (for resilient)"
else
echo "Release $release_name already exists, skipping creation..."
fi
get_twilight_release_from_zen_repo "$arch" |
while read -r line; do
artifact_id=$(echo "$line" | cut -d' ' -f1)
artifact_name=$(echo "$line" | cut -d' ' -f2)
self_download_url="https://github.com/0xc000022070/zen-browser-flake/releases/download/$release_name/zen.linux-$arch.tar.xz"
if ! gh release --repo="$flake_repo_location" view "$release_name" | grep "$artifact_name" >/dev/null; then
echo "[downloading] An artifact $artifact_name doesn't exists in $release_name"
download_artifact_from_zen_repo "$artifact_id" "/tmp/$artifact_name"
gh release --repo="$flake_repo_location" \
upload "$release_name" "/tmp/$artifact_name"
echo "[uploaded] The artifact is available @ following link: $self_download_url"
else
echo "[skipping] An artifact $artifact_name already exists in $release_name @ following link: $self_download_url"
fi
jq ".[\"twilight\"][\"$arch-linux\"] = {\"version\":\"$semver\",\"sha1\":\"$remote_sha1\",\"url\":\"$self_download_url\",\"sha256\":\"$sha256\"}" <sources.json >sources.json.tmp
mv sources.json.tmp sources.json
done
fi
jq ".[\"$version_name-official\"][\"$arch-linux\"] = {\"version\":\"$semver\",\"sha1\":\"$remote_sha1\",\"url\":\"$download_url\",\"sha256\":\"$sha256\"}" <sources.json >sources.json.tmp
mv sources.json.tmp sources.json
echo "$version_name was updated to $version"
if ! $ci; then
return
fi
if [ "$version_name" = "beta" ]; then
if [ "$commit_beta_targets" = "" ]; then
commit_beta_targets="$arch"
commit_beta_version="$version"
else
commit_beta_targets="$commit_beta_targets && $arch"
fi
fi
if [ "$version_name" = "twilight" ]; then
if [ "$commit_twilight_targets" = "" ]; then
commit_twilight_targets="$arch"
commit_twilight_version="$twilight_version_name#$(echo "$remote_sha1" | cut -c1-7)"
else
commit_twilight_targets="$commit_twilight_targets && $arch"
fi
fi
}
set -e
try_to_update "beta" "x86_64" "$beta_tag"
try_to_update "beta" "aarch64" "$beta_tag"
try_to_update "twilight" "x86_64" "$twilight_tag"
try_to_update "twilight" "aarch64" "$twilight_tag"
if $only_check && $ci; then
echo "should_update=false" >>"$GITHUB_OUTPUT"
fi
# Check if there are changes
if ! git diff --exit-code >/dev/null; then
init_message="Update Zen Browser"
message="$init_message"
if [ "$commit_beta_targets" != "" ]; then
message="$message beta @ $commit_beta_targets to $commit_beta_version"
fi
if [ "$commit_twilight_targets" != "" ]; then
if [ "$message" != "$init_message" ]; then
message="$message and"
fi
message="$message twilight @ $commit_twilight_targets to $commit_twilight_version"
fi
echo "commit_message=$message" >>"$GITHUB_OUTPUT"
fi