72 lines
2.4 KiB
YAML
72 lines
2.4 KiB
YAML
|
---
|
||
|
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
|