#!/usr/bin/env bash set -euo pipefail package_dir="${PACKAGE_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" repo_root="${REPO_ROOT:-$(cd "${package_dir}/../../../.." && pwd)}" pkgver="$(awk -F= '$1 == "pkgver" { print $2; exit }' "${package_dir}/APKBUILD")" distfiles_dir="${repo_root}/.cache/apk-distfiles" shards_cache_dir="${repo_root}/.cache/shards" source_archive="${distfiles_dir}/lavinmq-${pkgver}.tar.gz" shards_archive="${package_dir}/lavinmq-${pkgver}-shards.tar.gz" assets_archive="${package_dir}/lavinmq-${pkgver}-assets.tar.gz" tmpdir="$(mktemp -d)" assets_dir="${tmpdir}/assets" cleanup() { rm -rf "${tmpdir}" } trap cleanup EXIT mkdir -p "${distfiles_dir}" "${shards_cache_dir}" if [[ ! -f "${source_archive}" ]]; then curl --fail --location --retry 3 --silent --show-error \ --output "${source_archive}" \ "https://github.com/cloudamqp/lavinmq/archive/refs/tags/v${pkgver}.tar.gz" fi tar -xzf "${source_archive}" -C "${tmpdir}" source_dir="${tmpdir}/lavinmq-${pkgver}" if [[ ! -d "${source_dir}" ]]; then printf 'unexpected LavinMQ source archive layout: %s\n' "${source_archive}" >&2 exit 1 fi # shard.lock pins the Crystal dependencies. `make js` fetches exactly the # frontend assets declared by this upstream version's Makefile. ( cd "${source_dir}" SHARDS_CACHE_PATH="${shards_cache_dir}" shards install --production make js ) tar --create --gzip --file "${shards_archive}" \ --directory "${source_dir}" \ --sort=name --mtime='UTC 1970-01-01' --owner=0 --group=0 --numeric-owner \ lib mkdir -p "${assets_dir}" # The offline Makefile patch intentionally reads every asset from the root of # .alpine-assets, including helpers.segment.js which upstream stores in chunks/. find "${source_dir}/static/js/lib" -type f -exec cp -p {} "${assets_dir}/" \; tar --create --gzip --file "${assets_archive}" \ --directory "${assets_dir}" \ --sort=name --mtime='UTC 1970-01-01' --owner=0 --group=0 --numeric-owner \ . printf 'Updated %s and %s\n' "${shards_archive##*/}" "${assets_archive##*/}"