Skip to content

Commit

Permalink
✅ Automate URL check
Browse files Browse the repository at this point in the history
  • Loading branch information
thinkyhead committed May 1, 2024
1 parent 91ae676 commit ec07491
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 2 deletions.
88 changes: 88 additions & 0 deletions .github/workflows/check-urls.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#
# check-urls.yml
# Check (most) distinct URLs in the project for reachability
#

name: Check URLs

on:
schedule:
- cron: '0 4 * * 2' # Tues 4:00 AM UTC

jobs:
check_urls:
name: Check All URLs
if: github.repository == 'MarlinFirmware/Marlin'

runs-on: ubuntu-latest

permissions:
issues: write
pull-requests: write

steps:

- name: Check out bugfix-2.1.x
uses: actions/checkout@v4
with:
ref: bugfix-2.1.x

- name: Check All URLs
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Exit with an error to notify fail on URL tests
run: |
UA="Mozilla/5.0 (Linux; Android 10; SM-G996U Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36"
UTMP=$(mktemp)
grep -R -E "https?:\/\/[^ \"''\(\)\<\>]+" . 2>/dev/null \
| grep -v "Binary file" \
| sed -E "s/\/https?:\/\//\//" \
| sed -E 's/.*\((https?:\/\/[^ ]+)\).*$/\1/' \
| sed -E 's/.*\[(https?:\/\/[^ ]+)\].*$/\1/' \
| sed -E 's/.*(https?:\/\/[^ \"''()<>]+).*/\1/' \
| grep -vE "(127\.0\.0\.1|localhost|myserver|doc\.qt\.io|docs\.google\.com|raw\.githubusercontent\.com|[\${}])" \
| sed -E 's/]$//' | sed -E "s/'$//" | sed -E "s/[#.',]+$//" \
| sed -E 's/youtu\.be\/(.+)/www.youtube.com\/watch?v=\1/' \
| sort -u -R \
>"$UTMP"
ISERR=
declare -a BADURLS
while IFS= read -r URL
do
echo -n "Checking ${URL} ... "
HEAD=$(curl -s -I -A "${UA}" --request GET "${URL}" 2>/dev/null) ; HERR=$?
if [[ $HERR > 0 ]]; then
# Error 92 may be domain blocking curl / wget
[[ $HERR == 92 ]] || { ISERR=1 ; BADURLS+=($URL) ; }
echo "[FAIL ($HERR)]"
else
HEAD1=$(echo $HEAD | head -n1)
EMSG=
case "$HEAD1" in
*" 301"*) EMSG="[Moved Permanently]" ;;
*" 302"*) EMSG="[Moved Temporarily]" ;;
*" 303"*) echo "[See Other]" ;;
*" 400"*) EMSG="[Invalid Request]" ;;
*" 403"*) EMSG="[Forbidden]" ;;
*" 404"*) EMSG="[Not Found]" ;;
*" 503"*) EMSG="[Unavailable]" ;;
*" 200"*) echo "[ OK ]" ;;
*) EMSG="[Other Err]" ;;
esac
[[ -n $EMSG ]] && { ISERR=1 ; BADURLS+=($URL) ; echo $EMSG ; }
fi
done <"$UTMP"
if [[ -n $ISERR ]]; then
# Join bad URLs into a bulleted markdown list
printf -v BADSTR -- "- %s\n" "${BADURLS[@]}"
BODY=$(echo -e "URL Checker reports one or more URLs could not be reached:\n${BADSTR}")
echo -e "\n$BODY"
#gh issue comment 26975 --repo $GITHUB_REPOSITORY --body "${BODY}"
exit 1
fi
echo -e "\nURL Check Passed."
exit 0
3 changes: 1 addition & 2 deletions buildroot/share/PlatformIO/scripts/signature.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ def enabled_defines(filepath):
our crude scraping method and the actual compiler output.
We end up with the actual configured state,
better than what the config files say. You can then use the
a decent reflection of all enabled options that (probably) came from
resulting config.ini to produce more exact configuration files.
'''
outdict = {}
Expand Down Expand Up @@ -188,7 +187,7 @@ def tryint(key):

ini_fmt = '{0:40} = {1}'
ext_fmt = '{0:40} {1}'
ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_EXPORT')
ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_EXAMPLES_DIR', 'CONFIG_EXPORT')

if extended_dump:
# Extended export will dump config options by section
Expand Down

0 comments on commit ec07491

Please sign in to comment.