-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathautogenerate-downloads.sh
108 lines (90 loc) · 3.29 KB
/
autogenerate-downloads.sh
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
#!/bin/bash
# Retrieve and process S3 file listings to generate download Markdown
aws s3 ls s3://timeplus.io/dist/timeplus_enterprise/ \
| grep -v -E 'sp-demo|rc' \
| awk '
BEGIN {
print "# Package Downloads\n"
platform_order["linux-amd64"] = "Linux x86_64"
platform_order["linux-arm64"] = "Linux ARM64"
platform_order["darwin-amd64"] = "macOS x86_64"
platform_order["darwin-arm64"] = "macOS ARM64"
}
# Process each line with tar.gz file
/tar\.gz$/ {
# Extract version and architecture
split($NF, parts, "-")
version = parts[3]
sub(/^v/, "", version)
# Get architecture components
arch = parts[4] "-" parts[5]
gsub(/\.tar\.gz$/, "", arch)
# Store in version map
version_map[version] = 1
pkg_map[version, arch] = $NF
# Process and store latest release date
split($1, date_parts, "-")
formatted_date = sprintf("%02d-%02d-%04d", date_parts[2], date_parts[3], date_parts[1])
date_num = date_parts[1] date_parts[2] date_parts[3] # YYYYMMDD for comparison
if (!(version in latest_date) || date_num > latest_date[version]) {
latest_date[version] = date_num
release_date[version] = formatted_date
}
# Extract major.minor for grouping
split(version, ver_parts, ".")
major_minor = ver_parts[1] "." ver_parts[2]
# Store unique versions per major.minor group
if (!((major_minor, version) in version_groups)) {
version_groups[major_minor, version] = 1
grouped_versions[major_minor] = grouped_versions[major_minor] ? grouped_versions[major_minor] " " version : version
}
}
END {
# Sort major.minor groups
sort_cmd = "printf \"%s\\n\" "
for (v in grouped_versions) sort_cmd = sort_cmd " \"" v "\""
sort_cmd = sort_cmd " | sort -t. -k1,1nr -k2,2nr"
i = 0
while ((sort_cmd | getline major_minor) > 0) {
ordered_groups[++i] = major_minor
}
close(sort_cmd)
# Generate output
for (g=1; g<=i; g++) {
major_minor = ordered_groups[g]
minor_anchor = major_minor
gsub(/\./, "_", minor_anchor)
printf "## %s {#%s}\n\n", major_minor, minor_anchor
# Sort patch versions within group
split(grouped_versions[major_minor], patch_versions, " ")
sort_cmd = "printf \"%s\\n\" "
for (v in patch_versions) sort_cmd = sort_cmd " \"" patch_versions[v] "\""
sort_cmd = sort_cmd " | sort -V -r"
j = 0
while ((sort_cmd | getline version) > 0) {
ordered_versions[++j] = version
}
close(sort_cmd)
# Print each version
for (k=1; k<=j; k++) {
version = ordered_versions[k]
anchor = version
gsub(/\./, "_", anchor)
printf "### v%s {#%s}\n", version, anchor
printf "Released on %s ([Change logs](/enterprise-v%s#%s)).\n\n",
release_date[version], major_minor, anchor
printf "* Bare metal installation: "
link_count = 0
split("linux-amd64 linux-arm64 darwin-amd64 darwin-arm64", platforms, " ")
for (m=1; m<=4; m++) {
arch = platforms[m]
if ((version, arch) in pkg_map) {
if (link_count++ > 0) printf " | "
printf "[%s](https://d.timeplus.com/%s)",
platform_order[arch], pkg_map[version, arch]
}
}
printf "\n* All-in-one Docker image (not recommended for production): `docker run -p 8000:8000 docker.timeplus.com/timeplus/timeplus-enterprise:%s`\n\n", version
}
}
}' > docs/release-downloads.md