-
Notifications
You must be signed in to change notification settings - Fork 87
Expand file tree
/
Copy pathupdate_meta.sh
More file actions
executable file
·138 lines (114 loc) · 4.08 KB
/
update_meta.sh
File metadata and controls
executable file
·138 lines (114 loc) · 4.08 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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env bash
set -euo pipefail
# ------------------------------------------------------------
# Config
# ------------------------------------------------------------
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"
# ------------------------------------------------------------
# Helpers
# ------------------------------------------------------------
xml_escape() {
sed -e 's/&/\&/g' \
-e 's/</\</g' \
-e 's/>/\>/g'
}
# ------------------------------------------------------------
# Fetch releases
# ------------------------------------------------------------
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)"
# ------------------------------------------------------------
# Download an existing metainfo.xml from releases
# ------------------------------------------------------------
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"
# ------------------------------------------------------------
# Abort if release already exists
# ------------------------------------------------------------
if xmllint --xpath "//release[@version='$VERSION']" "$OUT_FILE" >/dev/null 2>&1; then
echo "Latest release already present, nothing to do"
exit 0
fi
# ------------------------------------------------------------
# Build <description> XML
# ------------------------------------------------------------
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"
# ------------------------------------------------------------
# Create <release> block
# ------------------------------------------------------------
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
# ------------------------------------------------------------
# Insert release after <releases>
# ------------------------------------------------------------
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"
# ------------------------------------------------------------
# Format XML
# ------------------------------------------------------------
xmllint --format "$OUT_FILE" --output "$OUT_FILE"
# ------------------------------------------------------------
# Cleanup
# ------------------------------------------------------------
rm -f "$DESCRIPTION_TMP" "$RELEASE_TMP"
echo "✅ Updated metainfo written to $OUT_FILE"