summaryrefslogtreecommitdiff
path: root/.forgejo/scripts/mirror-core-repo.sh
blob: 9c6d5e0e9450d19409fa74f74bb559a631cff218 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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)"