summaryrefslogtreecommitdiff
path: root/.forgejo/scripts
diff options
context:
space:
mode:
Diffstat (limited to '.forgejo/scripts')
-rw-r--r--.forgejo/scripts/mirror-core-repo.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/.forgejo/scripts/mirror-core-repo.sh b/.forgejo/scripts/mirror-core-repo.sh
new file mode 100644
index 0000000..9c6d5e0
--- /dev/null
+++ b/.forgejo/scripts/mirror-core-repo.sh
@@ -0,0 +1,93 @@
+#!/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)"