#!/usr/bin/env bash set -euo pipefail REPO_DIR="${1:-/tmp/raveos-core-repo}" X86="$REPO_DIR/x86_64" OWNER="rave-os" GH_REPO="RaveOS-core-repo-mirror" TAG="core-repo-x86_64" API="https://api.github.com/repos/${OWNER}/${GH_REPO}" UPLOADS="https://uploads.github.com/repos/${OWNER}/${GH_REPO}/releases" if [ ! -d "$X86" ]; then echo "Nincs mit tukrozni (${X86}) -> kihagyva" exit 0 fi if [ -z "${GH_MIRROR_TOKEN:-}" ]; then echo "FIGYELMEZTETES: GH_MIRROR_TOKEN nincs beallitva -> GitHub tukrozes kihagyva" exit 0 fi HDRFILE=$(mktemp) chmod 600 "$HDRFILE" trap 'rm -f "$HDRFILE"' EXIT printf 'Authorization: Bearer %s\n' "$GH_MIRROR_TOKEN" > "$HDRFILE" fetch_release() { curl -sf -H "@${HDRFILE}" "${API}/releases/tags/${TAG}" || true } release_json=$(fetch_release) if [ -z "$release_json" ] || ! echo "$release_json" | jq -e .id &>/dev/null; then echo "FIGYELMEZTETES: GitHub release nem erheto el (${TAG}) -> kihagyva" exit 0 fi release_id=$(echo "$release_json" | jq -r .id) cd "$X86" existing_names=$(echo "$release_json" | jq -r '.assets[]? | "\(.id)\t\(.name)"' 2>/dev/null || true) for f in *.pkg.tar.zst; do [ -f "$f" ] || continue pkgname=$(echo "$f" | sed -E 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//') [ -n "$pkgname" ] || continue while IFS=$'\t' read -r aid aname; do [ -n "$aid" ] || continue case "$aname" in "${pkgname}-"*.pkg.tar.zst | "${pkgname}-"*.pkg.tar.zst.sig) if [ "$aname" != "$f" ] && [ "$aname" != "${f}.sig" ]; then curl -sf -X DELETE -H "@${HDRFILE}" "${API}/releases/assets/${aid}" || true echo "torolve (regi verzio): $aname" fi ;; esac done <<< "$existing_names" done release_json=$(fetch_release) if [ -z "$release_json" ]; then echo "FIGYELMEZTETES: GitHub release ujra nem erheto el -> kihagyva" exit 0 fi assets_tsv=$(echo "$release_json" | jq -r '.assets[]? | "\(.id)\t\(.name)\t\(.digest // "-")"' 2>/dev/null || true) UPLOADED=0 SKIPPED=0 for f in *; do [ -f "$f" ] || continue local_sha=$(sha256sum "$f" | cut -d' ' -f1) asset_line=$(echo "$assets_tsv" | awk -F'\t' -v n="$f" '$2==n {print; exit}') if [ -n "$asset_line" ]; then asset_id=$(echo "$asset_line" | cut -f1) asset_digest=$(echo "$asset_line" | cut -f3) if [ "sha256:${local_sha}" = "$asset_digest" ]; then SKIPPED=$((SKIPPED + 1)) continue fi curl -sf -X DELETE -H "@${HDRFILE}" "${API}/releases/assets/${asset_id}" || true fi if curl -sf -X POST -H "@${HDRFILE}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@${f}" \ "${UPLOADS}/${release_id}/assets?name=${f}"; then UPLOADED=$((UPLOADED + 1)) else echo "HIBA: ${f} feltoltese sikertelen" fi done echo "GitHub mirror kesz: ${UPLOADED} feltoltve, ${SKIPPED} valtozatlan (kihagyva)"