-
-
Notifications
You must be signed in to change notification settings - Fork 92
Expand file tree
/
Copy pathupdate_meta.sh
More file actions
executable file
·108 lines (84 loc) · 2.63 KB
/
update_meta.sh
File metadata and controls
executable file
·108 lines (84 loc) · 2.63 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env bash
set -euo pipefail
REPO="claration/Impactor"
API="https://api.github.com/repos/$REPO/releases"
OUT_DIR="upload"
OUT_FILE="$OUT_DIR/dev.khcrysalis.PlumeImpactor.metainfo.xml"
mkdir -p "$OUT_DIR"
xml_escape() {
sed -e 's/&/\&/g' \
-e 's/</\</g' \
-e 's/>/\>/g'
}
echo "Fetching releases…"
RELEASES_JSON="$(curl -fsSL -H "Accept: application/vnd.github+json" "$API")"
LATEST_RELEASE="$(echo "$RELEASES_JSON" | jq '.[0]')"
VERSION="$(echo "$LATEST_RELEASE" | jq -r '.name')"
DATE="$(echo "$LATEST_RELEASE" | jq -r '.published_at | split("T")[0]')"
RELEASE_URL="$(echo "$LATEST_RELEASE" | jq -r '.html_url')"
BODY="$(echo "$LATEST_RELEASE" | jq -r '.body')"
echo "Latest version: $VERSION ($DATE)"
META_URL="$(
echo "$RELEASES_JSON" |
jq -r '
.[] |
.assets[]? |
select(.name | endswith(".metainfo.xml")) |
.browser_download_url
' |
head -n1
)"
if [[ -z "$META_URL" ]]; then
echo "❌ Could not find an existing metainfo.xml in any release"
exit 1
fi
echo "Downloading existing metainfo.xml…"
curl -fsSL "$META_URL" -o "$OUT_FILE"
if xmllint --xpath "//release[@version='$VERSION']" "$OUT_FILE" >/dev/null 2>&1; then
echo "Latest release already present, nothing to do"
exit 0
fi
DESCRIPTION_TMP="$(mktemp)"
IN_LIST=0
while IFS= read -r line; do
line="${line//$'\r'/}"
[[ "$line" == *"New Contributors"* ]] && break
if [[ "$line" == "## "* ]]; then
[[ $IN_LIST -eq 1 ]] && echo "</ul>" >> "$DESCRIPTION_TMP" && IN_LIST=0
printf "<p>%s</p>\n" \
"$(echo "${line#\#\# }" | xml_escape)" >> "$DESCRIPTION_TMP"
elif [[ "$line" == "* "* ]]; then
[[ $IN_LIST -eq 0 ]] && echo "<ul>" >> "$DESCRIPTION_TMP" && IN_LIST=1
CLEAN="$(echo "${line#\* }" | sed 's/in https:\/\/github.com.*//')"
printf "<li>%s</li>\n" \
"$(echo "$CLEAN" | xml_escape)" >> "$DESCRIPTION_TMP"
else
[[ $IN_LIST -eq 1 ]] && echo "</ul>" >> "$DESCRIPTION_TMP" && IN_LIST=0
fi
done <<< "$BODY"
[[ $IN_LIST -eq 1 ]] && echo "</ul>" >> "$DESCRIPTION_TMP"
RELEASE_TMP="$(mktemp)"
cat > "$RELEASE_TMP" <<EOF
<release version="$VERSION" date="$DATE">
<url type="details">$RELEASE_URL</url>
<description>
$(sed 's/^/ /' "$DESCRIPTION_TMP")
</description>
</release>
EOF
OUTPUT_TMP="$(mktemp)"
awk '
/<releases>/ && !done {
print
while ((getline line < "'"$RELEASE_TMP"'") > 0)
print line
close("'"$RELEASE_TMP"'")
done = 1
next
}
{ print }
' "$OUT_FILE" > "$OUTPUT_TMP"
mv "$OUTPUT_TMP" "$OUT_FILE"
xmllint --format "$OUT_FILE" --output "$OUT_FILE"
rm -f "$DESCRIPTION_TMP" "$RELEASE_TMP"
echo "✅ Updated metainfo written to $OUT_FILE"