nerd-fonts/bin/scripts/fetch-archives.sh
2024-04-12 14:31:51 +00:00

79 lines
2.5 KiB
Bash
Executable file

#!/usr/bin/env bash
# Nerd Fonts Version: 3.2.1
# Script Version: 2.0.1
#
# Fetches the current release files.
# It fetches the latest release, not release candidate.
# Or fetches the specified release's files.
#
# The second parameter specifies the beginning of the artifact
# name that shall be fetched. If unspecified all artifacts will
# be fetched.
#
# Example runs
# fetch-archives
# fetch-archives v2.2.2
# fetch-archives v2.2.2 Heavy
# fetch-archives latest HeavyDat
# fetch-archives v3.1.0 'Ara.*zip' (just fetch the zip archive)
set -e
LINE_PREFIX="# [Nerd Fonts] "
scripts_root_dir="$(cd "$(dirname "$0")" && pwd)"
outputdir=$(realpath "${scripts_root_dir}/../../archives")
if [ $# -ge 1 ]; then
versiontag=$1
else
versiontag="latest"
fi
if [ "${versiontag}" != "latest" ]; then
echo "${LINE_PREFIX} Fetching release archives with version tag '${versiontag}'"
releasedata=$(curl -Lf "https://api.github.com/repos/ryanoasis/nerd-fonts/releases")
num=$(jq ".[] | select(.tag_name == \"${versiontag}\") | .assets | length" <<< "${releasedata}")
if [ -z "${num}" ]; then
echo "${LINE_PREFIX} Release tag ${versiontag} unknown"
exit 1
fi
files=()
while IFS='' read -r file; do
files+=("$file")
done < <(jq -r ".[] | select(.tag_name == \"${versiontag}\") | .assets[].name | @sh" <<< "${releasedata}")
else
echo "${LINE_PREFIX} Fetching latest release archives"
releasedata=$(curl -Lf "https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest")
versiontag=$(jq -r ".tag_name" <<< "${releasedata}")
num=$(jq ".assets | length" <<< "${releasedata}")
files=()
while IFS='' read -r file; do
files+=("$file")
done < <(jq -r ".assets[].name | @sh" <<< "${releasedata}")
fi
echo "${LINE_PREFIX} Found ${num} artifacts"
if [ $# -ge 2 ]; then
pattern=${2// /\\ }
echo "${LINE_PREFIX} Limiting archive to regex '${pattern}'"
else
pattern=""
echo "${LINE_PREFIX} No limiting pattern given"
fi
if [ $# -gt 2 ]; then
echo "${LINE_PREFIX} Too many parameters, exiting"
exit 2
fi
for assetname in "${files[@]}"; do
assetname=${assetname:1:-1}
if [[ ! "${assetname}" =~ ${pattern} ]]; then
continue
fi
echo >&2 "${LINE_PREFIX} Fetching ${versiontag}/${assetname}"
mkdir -p "${outputdir}"
touch "${outputdir}/_Release_${versiontag}"
curl --fail -Lo "${outputdir}/${assetname}" "https://github.com/ryanoasis/nerd-fonts/releases/download/${versiontag}/${assetname}" \
|| echo " => error fetching"
done