Skip to content

Commit

Permalink
Add workflow to check mirrors are functional
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mlugg committed Sep 13, 2024
1 parent 2f99513 commit b923742
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 5 deletions.
25 changes: 25 additions & 0 deletions .github/workflows/check-mirrors.yaml
Original file line number Diff line number Diff line change
@@ -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 changes: 28 additions & 0 deletions check-mirrors.sh
Original file line number Diff line number Diff line change
@@ -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"
7 changes: 2 additions & 5 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -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`);
Expand Down
5 changes: 5 additions & 0 deletions mirrors.json
Original file line number Diff line number Diff line change
@@ -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]>" ]
]

0 comments on commit b923742

Please sign in to comment.