Skip to content

chore: workflow - Run link checker on commit message trigger [link-ch… #92

chore: workflow - Run link checker on commit message trigger [link-ch…

chore: workflow - Run link checker on commit message trigger [link-ch… #92

Workflow file for this run

name: Deploy Hugo site to Pages
on:
push:
branches: ["main", "cache-images"]
pull_request: # Add this to run on pull requests
branches: ["main"]
permissions:
contents: read
pages: write
id-token: write
issues: write # Add this permission for creating issues
env:
HUGO_ENV: production
HUGO_VERSION: "0.147.7"
GO_VERSION: "1.24.3"
NODE_VERSION: "22.x" # Use major version for setup-node
jobs:
build:
runs-on: ubuntu-24.04
steps:
- name: Install Hugo
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Go
run: |
wget -O ${{ runner.temp }}/go.tar.gz https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz \
&& sudo tar -C /usr/local -xzf ${{ runner.temp }}/go.tar.gz \
&& sudo ln -s /usr/local/go/bin/go /usr/local/bin/go
- name: Checkout
uses: actions/checkout@v4.2.2
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install npm dependencies
run: npm ci
- name: Cache and Restore OG Images
uses: actions/cache@v4
id: og-cache
with:
path: |
content/**/*-og-*.jpg
static/images/og-image-*.jpg
tmp/og-cache-manifest.json
key: ${{ runner.os }}-og-images-${{ hashFiles('**/content/**/index.md', '**/content/**/_index.md', 'assets/og-template/template.html', 'assets/images/ONM-logo.png') }}
restore-keys: |
${{ runner.os }}-og-images-
- name: Generate OG Images
run: npm run og-images
- name: Determine Base URL
id: base_url
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
BASE_URL="/"
elif [[ "${{ github.repository_owner }}.github.io" == "open-neuromorphic.github.io" && "${{ github.ref_name }}" == "main" ]]; then
BASE_URL="https://open-neuromorphic.org/"
elif [[ "${{ github.repository_owner }}.github.io" == "open-neuromorphic.github.io" && "${{ github.ref_name }}" == "refactor" ]]; then
BASE_URL="https://open-neuromorphic.github.io/refactor-preview/" # Example preview URL
else
REPO_NAME=$(echo "${{ github.repository }}" | cut -d '/' -f 2)
BASE_URL="https://${{ github.repository_owner }}.github.io/${REPO_NAME}/"
fi
echo "BASE_URL=$BASE_URL" >> $GITHUB_ENV
echo "Determined BASE_URL: $BASE_URL"
- name: Modify hugo.toml
run: |
echo "Attempting to set baseURL to $BASE_URL in hugo.toml"
sed -i "s|baseURL = .*|baseURL = \"$BASE_URL\"|" hugo.toml
echo "hugo.toml after modification:"
cat hugo.toml
- name: Build Hugo Site
run: |
echo "Starting Hugo site build..."
npm run hugo-build
echo "Hugo site build completed."
echo "Contents of public directory after build:"
ls -la public
- name: Create and Populate .htaccess
run: |
echo "Creating and populating .htaccess in public directory"
mkdir -p public
cat .github/config/htaccess.template > public/.htaccess
echo ".htaccess created and populated."
echo "Contents of public/.htaccess:"
cat public/.htaccess
- name: Modify .htaccess (Prevent Indexing if not production Open Neuromorphic)
run: |
echo "Current BASE_URL for .htaccess modification: $BASE_URL"
if [[ "$BASE_URL" != "https://open-neuromorphic.org/" ]]; then
echo "Modifying .htaccess to prevent indexing for $BASE_URL"
chmod u+w public/.htaccess
echo "" >> public/.htaccess
echo "# Rules to prevent indexing on non-production deployments" >> public/.htaccess
echo "Header set X-Robots-Tag \"noindex, nofollow\"" >> public/.htaccess
echo ".htaccess modified."
echo "Final contents of public/.htaccess:"
cat public/.htaccess
else
echo ".htaccess modification skipped for production URL."
fi
- name: Create robots.txt (Prevent Indexing if not production)
run: |
echo "Current BASE_URL for robots.txt creation: $BASE_URL"
if [[ "$BASE_URL" != "https://open-neuromorphic.org/" ]]; then
echo "Creating robots.txt to prevent indexing for $BASE_URL"
echo "User-agent: *" > public/robots.txt
echo "Disallow: /" >> public/robots.txt
echo "robots.txt created."
echo "Contents of public/robots.txt:"
cat public/robots.txt
else
echo "robots.txt creation skipped for production URL."
fi
- name: Upload artifact for link checker
if: github.event_name == 'pull_request' || contains(github.event.head_commit.message, '[link-check]')
uses: actions/upload-artifact@v4
with:
name: built-site-for-lychee
path: public/
- name: Upload artifact for deployment
uses: actions/upload-pages-artifact@v3.0.1
with:
path: ./public
name: Deploy Hugo site to Pages

Check failure on line 152 in .github/workflows/main.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/main.yml

Invalid workflow file

You have an error in your yaml syntax on line 152
on:
push:
branches: ["main", "cache-images"]
pull_request: # Add this to run on pull requests
branches: ["main"]
permissions:
contents: read
pages: write
id-token: write
issues: write # Add this permission for creating issues
env:
HUGO_ENV: production
HUGO_VERSION: "0.147.7"
GO_VERSION: "1.24.3"
NODE_VERSION: "22.x" # Use major version for setup-node
jobs:
build:
runs-on: ubuntu-24.04
steps:
- name: Install Hugo
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Go
run: |
wget -O ${{ runner.temp }}/go.tar.gz https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz \
&& sudo tar -C /usr/local -xzf ${{ runner.temp }}/go.tar.gz \
&& sudo ln -s /usr/local/go/bin/go /usr/local/bin/go
- name: Checkout
uses: actions/checkout@v4.2.2
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install npm dependencies
run: npm ci
- name: Cache and Restore OG Images
uses: actions/cache@v4
id: og-cache
with:
path: |
content/**/*-og-*.jpg
static/images/og-image-*.jpg
tmp/og-cache-manifest.json
key: ${{ runner.os }}-og-images-${{ hashFiles('**/content/**/index.md', '**/content/**/_index.md', 'assets/og-template/template.html', 'assets/images/ONM-logo.png') }}
restore-keys: |
${{ runner.os }}-og-images-
- name: Generate OG Images
run: npm run og-images
- name: Determine Base URL
id: base_url
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
BASE_URL="/"
elif [[ "${{ github.repository_owner }}.github.io" == "open-neuromorphic.github.io" && "${{ github.ref_name }}" == "main" ]]; then
BASE_URL="https://open-neuromorphic.org/"
elif [[ "${{ github.repository_owner }}.github.io" == "open-neuromorphic.github.io" && "${{ github.ref_name }}" == "refactor" ]]; then
BASE_URL="https://open-neuromorphic.github.io/refactor-preview/" # Example preview URL
else
REPO_NAME=$(echo "${{ github.repository }}" | cut -d '/' -f 2)
BASE_URL="https://${{ github.repository_owner }}.github.io/${REPO_NAME}/"
fi
echo "BASE_URL=$BASE_URL" >> $GITHUB_ENV
echo "Determined BASE_URL: $BASE_URL"
- name: Modify hugo.toml
run: |
echo "Attempting to set baseURL to $BASE_URL in hugo.toml"
sed -i "s|baseURL = .*|baseURL = \"$BASE_URL\"|" hugo.toml
echo "hugo.toml after modification:"
cat hugo.toml
- name: Build Hugo Site
run: |
echo "Starting Hugo site build..."
npm run hugo-build
echo "Hugo site build completed."
echo "Contents of public directory after build:"
ls -la public
- name: Create and Populate .htaccess
run: |
echo "Creating and populating .htaccess in public directory"
mkdir -p public
cat .github/config/htaccess.template > public/.htaccess
echo ".htaccess created and populated."
echo "Contents of public/.htaccess:"
cat public/.htaccess
- name: Modify .htaccess (Prevent Indexing if not production Open Neuromorphic)
run: |
echo "Current BASE_URL for .htaccess modification: $BASE_URL"
if [[ "$BASE_URL" != "https://open-neuromorphic.org/" ]]; then
echo "Modifying .htaccess to prevent indexing for $BASE_URL"
chmod u+w public/.htaccess
echo "" >> public/.htaccess
echo "# Rules to prevent indexing on non-production deployments" >> public/.htaccess
echo "Header set X-Robots-Tag \"noindex, nofollow\"" >> public/.htaccess
echo ".htaccess modified."
echo "Final contents of public/.htaccess:"
cat public/.htaccess
else
echo ".htaccess modification skipped for production URL."
fi
- name: Create robots.txt (Prevent Indexing if not production)
run: |
echo "Current BASE_URL for robots.txt creation: $BASE_URL"
if [[ "$BASE_URL" != "https://open-neuromorphic.org/" ]]; then
echo "Creating robots.txt to prevent indexing for $BASE_URL"
echo "User-agent: *" > public/robots.txt
echo "Disallow: /" >> public/robots.txt
echo "robots.txt created."
echo "Contents of public/robots.txt:"
cat public/robots.txt
else
echo "robots.txt creation skipped for production URL."
fi
- name: Upload artifact for link checker
if: github.event_name == 'pull_request' || contains(github.event.head_commit.message, '[link-check]')
uses: actions/upload-artifact@v4
with:
name: built-site-for-lychee
path: public/
- name: Upload artifact for deployment
uses: actions/upload-pages-artifact@v3.0.1
with:
path: ./public
link-checker:
runs-on: ubuntu-latest
needs: build
if: github.event_name == 'pull_request' || contains(github.event.head_commit.message, '[link-check]')
steps:
- name: Download built site artifact
uses: actions/download-artifact@v4
with:
name: built-site-for-lychee
path: public
- name: List downloaded files # Debugging step
run: ls -R public
- name: Restore lychee cache
uses: actions/cache@v4
with:
path: ./public/.lycheecache # The cache file will be inside the 'public' directory
key: lychee-cache-${{ github.ref }}
restore-keys: |
lychee-cache-
- name: Link Checker
id: lychee
uses: lycheeverse/lychee-action@v2
with:
workingDirectory: ./public
args: >-
--cache
--max-cache-age 1d
--exclude-mail
--exclude-all-private
--exclude 'https://www.linkedin.com/.*'
--exclude 'https://twitter.com/intent/.*'
--exclude 'https://x.com/.*'
--exclude 'https://github.com/open-neuromorphic/open-neuromorphic.github.io/issues/new/choose'
--exclude 'https://*.intel.com/.*'
--exclude 'https://doi.org/.*'
--exclude 'https://*.biorxiv.org/.*'
--exclude 'https://*.science.org/.*'
--exclude 'http://blogs.sciencemag.org/.*'
--exclude 'https://codeconfessions.substack.com/.*'
--exclude 'https://www.kth.se/.*'
--exclude 'https://ch.frenkel.github.io/.*'
--exclude 'https://*.ecmlpkdd.org/.*'
--exclude 'https://*.acm.org/.*'
--exclude 'https://*.synsense.ai/.*'
--exclude 'https://doc.brainchipinc.com/.*'
--exclude 'https://fabrizio-ottati.dev/.*'
--exclude 'https://drive.google.com/.*'
'./**/*.html'
fail: false
jobSummary: true
output: ./lychee-out.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Issue From File
if: steps.lychee.outputs.exit_code != 0
uses: peter-evans/create-issue-from-file@v5
with:
title: Link Checker Report
content-filepath: ./public/lychee-out.md
labels: report, automated, broken-links
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-24.04
needs: build
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/cache-images')
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4.0.5
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-24.04
needs: build
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/cache-images')
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4.0.5