Add workflow to check mirrors are functional

This Actions workflow will run twice every day. It checks ziglang.org
for the latest `master` build, downloads it from ziglang.org and runs it
through sha512sum, and does the same for each mirror. If the download
from the mirror fails, or the sha512sum output differs, it sends me
personally a notification via an external webhook.
This commit is contained in:
mlugg
2024-09-13 11:16:37 +01:00
committed by Matthew Lugg
parent 2f99513571
commit b92374239f
4 changed files with 60 additions and 5 deletions
+25
View File
@@ -0,0 +1,25 @@
{
"name": "check-mirrors",
"on": {
"schedule": [
{ "cron": "0 6,18 * * *" },
],
"workflow_dispatch": null,
},
"jobs": {
"check-mirrors": {
"runs-on": "ubuntu-latest",
"steps": [
{ "uses": "actions/checkout@v4" },
{
"name": "Check mirrors",
"env": {
"PUSHOVER_USER": "${{ secrets.PUSHOVER_USER }}",
"PUSHOVER_TOKEN": "${{ secrets.PUSHOVER_TOKEN }}",
},
"run": "sh check-mirrors.sh",
},
],
},
},
}
+28
View File
@@ -0,0 +1,28 @@
#!/bin/sh
temp_path="$(mktemp)"
zig_version="$(curl -sSL 'https://ziglang.org/download/index.json' | jq -r '.master.version')"
filename="zig-linux-x86_64-$zig_version.tar.xz"
curl -L "https://ziglang.org/builds/$filename" >"$temp_path"
correct_sum="$(sha512sum "$temp_path")"
jq '.[] | .[0] + " " + .[1]' -r <mirrors.json | while read -r mirror_url mirror_name; do
curl -L "$mirror_url/$filename" >"$temp_path"
download_status="$?"
mirror_sum="$(sha512sum "$temp_path")"
if [ "$download_status" -eq 0 ]; then
if [ "$mirror_sum" = "$correct_sum" ]; then
continue
fi
fi
curl -s \
-F user="$PUSHOVER_USER" -F token="$PUSHOVER_TOKEN" \
-F message="Zig download mirror '$mirror_name' is down" \
https://api.pushover.net/1/messages.json
done
rm "$temp_path"
+2 -5
View File
@@ -15,11 +15,8 @@ const CANONICAL = 'https://ziglang.org/builds';
// The list of mirrors we attempt to fetch from. These need not be trusted, as
// we always verify the minisign signature.
const MIRRORS = [
'https://pkg.machengine.org/zig', // slimsag <[email protected]>
'https://zigmirror.hryx.net/zig', // hryx <[email protected]>
'https://zig.linus.dev/zig', // linusg <[email protected]>
];
// This is an array of URLs.
const MIRRORS = require('./mirrors.json').map((x) => x[0]);
async function downloadFromMirror(mirror, tarball_name, tarball_ext) {
const tarball_path = await tc.downloadTool(`${mirror}/${tarball_name}${tarball_ext}?source=github-actions`);
+5
View File
@@ -0,0 +1,5 @@
[
[ "https://pkg.machengine.org/zig", "slimsag <[email protected]>" ],
[ "https://zigmirror.hryx.net/zig", "hryx <[email protected]>" ],
[ "https://zig.linus.dev/zig", "linusg <[email protected]>" ]
]