92 lines
2.4 KiB
YAML
92 lines
2.4 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
validate:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Validate generated JSON
|
|
run: |
|
|
python3 -m json.tool data/tvbox.json > /dev/null
|
|
python3 -m json.tool data/tvbox.meta.json > /dev/null
|
|
|
|
- name: Test extractor success path
|
|
run: |
|
|
temp_dir="$(mktemp -d)"
|
|
trap 'rm -rf "${temp_dir}"' EXIT
|
|
|
|
payload_path="${temp_dir}/payload.bin"
|
|
PAYLOAD_PATH="${payload_path}" python3 - <<'PY'
|
|
import base64
|
|
import os
|
|
|
|
decoded_json = b'{"sites":[{"key":"demo"}]}'
|
|
payload = (
|
|
b"\xff\xd8\xff\xd9"
|
|
+ b"prefix**"
|
|
+ base64.b64encode(decoded_json)
|
|
)
|
|
|
|
with open(os.environ["PAYLOAD_PATH"], "wb") as payload_file:
|
|
payload_file.write(payload)
|
|
PY
|
|
|
|
payload_url="$(python3 - "${payload_path}" <<'PY'
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
print(Path(sys.argv[1]).resolve().as_uri())
|
|
PY
|
|
)"
|
|
|
|
TVBOX_URL="${payload_url}" \
|
|
OUT_JSON="${temp_dir}/tvbox.json" \
|
|
OUT_META="${temp_dir}/tvbox.meta.json" \
|
|
python3 scripts/extract_tvbox.py > /dev/null
|
|
|
|
python3 -m json.tool "${temp_dir}/tvbox.json" > /dev/null
|
|
python3 -m json.tool "${temp_dir}/tvbox.meta.json" > /dev/null
|
|
|
|
- name: Test extractor upstream error path
|
|
run: |
|
|
temp_dir="$(mktemp -d)"
|
|
trap 'rm -rf "${temp_dir}"' EXIT
|
|
|
|
bad_payload_path="${temp_dir}/bad-payload.bin"
|
|
printf 'not-a-tvbox-payload' > "${bad_payload_path}"
|
|
|
|
bad_payload_url="$(python3 - "${bad_payload_path}" <<'PY'
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
print(Path(sys.argv[1]).resolve().as_uri())
|
|
PY
|
|
)"
|
|
|
|
set +e
|
|
TVBOX_URL="${bad_payload_url}" \
|
|
OUT_JSON="${temp_dir}/tvbox.json" \
|
|
OUT_META="${temp_dir}/tvbox.meta.json" \
|
|
python3 scripts/extract_tvbox.py > /dev/null 2>&1
|
|
status="$?"
|
|
set -e
|
|
|
|
if [ "${status}" -ne 75 ]; then
|
|
echo "Expected upstream error exit code 75, got ${status}."
|
|
exit 1
|
|
fi
|