Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/validate-manifest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Validate manifest.json

on: push

jobs:
validate:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Validate manifest.json
id: validate_manifest
run: |
echo "Validating manifest files"
for item in $(jq -c -r '.lists.[].file | select( . != null )' manifest.json); do
if test -f $item; then
echo "$item exists"
else
echo "::error file=manifest.json,title=Invalid-Manifest::$item does not exist"
exit 1
fi
done

echo "Validating manifest urls"
for item in $(jq -c -r '.lists.[].url | select( . != null )' manifest.json); do
urlstatus=$(curl -H 'Cache-Control: no-cache' -o /dev/null --silent --head --write-out "$URL %{http_code}" "$item")
if [ $urlstatus -ne 200 ]; then
echo "::error file=manifest.json,title=Invalid-Manifest::$item has HTTP status of $urlstatus"
exit 1
fi
done

echo "Validation complete"
39 changes: 39 additions & 0 deletions scripts/validate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import os
import json

import requests


class Validate:

def __init__(self, manifest: str = "manifest.json") -> None:
if not os.path.exists(manifest):
err = f"manifest.json '{manifest}' doesn't exist."
self.set_output("error", err)
raise ValueError(err)
self.manifest = manifest

def set_output(self, name, value):
with open(os.environ['GITHUB_OUTPUT'], 'a') as fh:
print(f'{name}={value}', file=fh)

def run(self) -> bool:
data: dict = {}
with open(self.manifest) as f:
data = json.load(f)
for item in data.get("lists"):
if item.get("file") and not os.path.exists(item["file"]):
err = f"referenced static file does not exist: '{item}'"
self.set_output("error", err)
raise ValueError(err)
elif item.get("url"):
resp = requests.request("GET", item["url"])
resp.raise_for_status()
if not resp.ok:
err = f"unable to retrieve file from URL: '{item['url']}'"
self.set_output("error", err)
raise requests.exceptions.HTTPError(err)


if __name__ == "__main__":
Validate().run()