diff options
Diffstat (limited to '.forgejo/scripts/mirror-core-repo.sh')
| -rw-r--r-- | .forgejo/scripts/mirror-core-repo.sh | 91 |
1 files changed, 91 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..20ee1dc --- /dev/null +++ b/.forgejo/scripts/mirror-core-repo.sh @@ -0,0 +1,91 @@ +#!/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 + aname_nosig="${aname%.sig}" + apkg=$(echo "$aname_nosig" | sed -E 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//') + if [ "$apkg" = "$pkgname" ] && [ "$aname" != "$f" ] && [ "$aname" != "${f}.sig" ]; then + curl -sf -X DELETE -H "@${HDRFILE}" "${API}/releases/assets/${aid}" || true + echo "torolve (regi verzio): $aname" + fi + 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)" |