bglug.it/.gitea/workflows/external_links.yaml

72 lines
2.4 KiB
YAML
Raw Normal View History

---
name: External links check
on:
schedule:
- cron: "30 18 * * 2"
jobs:
scan:
name: Check all external links
runs-on: ubuntu-latest
container:
image: catthehacker/ubuntu:act-latest
steps:
- name: checkout repo
uses: actions/checkout@v4
with:
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: restore resources from cache
uses: actions/cache/restore@v4
with:
path: |
resources
key: bglug-it-hugo-resources
- name: update git hash
run: |
H=$(git rev-parse --short=10 HEAD)
echo "commit: $H"
sed -i "s/AbbreviatedHash\:.*$/AbbreviatedHash: ${H}/" config/_default/params.yaml
- name: Build Hugo
run: |
wget -O - https://github.com/gohugoio/hugo/releases/download/v0.135.0/hugo_extended_0.135.0_linux-amd64.tar.gz | tar zxv
./hugo --gc --minify --cleanDestinationDir
- name: store resources into cache
uses: actions/cache/save@v4
if: always() # salva in cache anche se la build fallisce
with:
path: |
resources
key: bglug-it-hugo-resources
- name: parse all the links
shell: bash
run: |
echo "Calculating a list of URLs"
grep --ignore-case --recursive --only-matching --no-filename \
--include \*.html --perl-regexp '(?<=href=")[^"]*' public/ | \
grep ^http | \
grep --invert-match --extended-regexp \
--file .gitea/workflows/extlinks_whitelist_patterns.list | \
sort -u > all_links.list
echo "List contains $(cat all_links.list | wc -l) URLs"
unreachable_count=0
while IFS= read -r url; do
response_code=$(curl --head --silent --output /dev/null --retry 2 --connect-timeout 2 --write-out "%{http_code}" "$url" || true)
if [[ ! $response_code == 200 && ! $response_code =~ 3[0-9]{2} ]]; then
echo "UNREACHABLE ($response_code): $url"
unreachable_count=$((unreachable_count+1))
fi
done < all_links.list
echo "List parsed. Unreachable URLs: $unreachable_count"
if [[ $unreachable_count -gt 0 ]] ; then
exit 1
fi