use shell parameter expansion to get corect relative path and add mis… #11
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Render Quarto Files and Deploy to GitHub Pages | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: # Manual trigger | |
jobs: | |
render_quarto: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Build Docker image | |
run: | | |
docker build -t demo-quarto-image . | |
- name: Create gallery directory on the host | |
run: | | |
echo 'Creating gallery directory...' | |
mkdir -p gallery && chmod -R 777 gallery | |
echo 'gallery directory created.' | |
- name: Run Quarto in Docker container | |
run: | | |
docker run --rm -v ${{ github.workspace }}:/workspace -w /workspace demo-quarto-image bash -c " | |
source /opt/venv/bin/activate | |
echo 'activated virtualenv.' | |
chmod +x /workspace/r/install_quarto_extensions.expect | |
/workspace/r/install_quarto_extensions.expect | |
quarto list extensions | |
FOLDERS=(python r) | |
echo 'Folders to process: \${FOLDERS[@]}' | |
for FOLDER in \"\${FOLDERS[@]}\"; do | |
echo \"Searching for .qmd and .ipynb files in /workspace/\$FOLDER...\" | |
find \"/workspace/\$FOLDER\" \( -name '*.qmd' -o -name '*.ipynb' \) | while read -r file; do | |
echo \"Processing file: \$file\" | |
# Remove the /workspace prefix from the file path | |
relative_dir=\$(dirname \"\${file#'/workspace/'}\") | |
target_dir=\"/workspace/gallery/\$relative_dir\" | |
echo \"Creating target directory: \$target_dir\" | |
mkdir -p \"\$target_dir\" && echo \"Directory \$target_dir created.\" | |
echo \"Attempting to render \$file with execution...\" | |
if quarto render \"\$file\" --to html --output-dir \"\$target_dir\"; then | |
echo \"Successfully rendered \$file with execution.\" | |
else | |
echo \"Failed to render \$file with execution. Rendering without execution...\" | |
if quarto render \"\$file\" --to html --no-execute --output-dir \"\$target_dir\"; then | |
echo \"Successfully rendered \$file without execution.\" | |
else | |
echo \"Rendering failed for \$file, even without execution.\" | |
fi | |
fi | |
done | |
done" | |
- name: Generate Index HTML | |
run: | | |
ls -laR gallery | |
echo "<html><body><h1>Gallery Index</h1><ul>" > gallery/index.html | |
find gallery -name "*.html" | while read -r file; do | |
# Remove the 'gallery/' prefix from the file path | |
relative_path="${file#gallery/}" | |
file_name=$(basename "$file") | |
echo "<li><a href=\"./$relative_path\">$file_name</a></li>" >> gallery/index.html | |
done | |
echo "</ul></body></html>" >> gallery/index.html | |
- name: Upload HTML output | |
uses: actions/upload-artifact@v4 | |
with: | |
name: gallery | |
path: gallery/ | |
- name: Set up Git user | |
run: | | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
- name: Commit and Push to docs branch | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
ls -laR . | |
# Fetch all branches | |
git fetch origin | |
# Check if the docs branch exists, create it if not | |
if git show-ref --quiet refs/heads/docs; then | |
git checkout docs | |
else | |
git checkout --orphan docs | |
fi | |
# Add, commit, and push changes | |
# Check if there are changes to commit | |
if git diff-index --quiet HEAD --; then | |
echo "No changes to commit." | |
else | |
# Commit and push changes | |
# First Remove any files in the gallery directory that no longer exist locally | |
git rm -r --cached gallery | |
# Add all current changes from the gallery folder | |
git add -A gallery | |
git commit -m "Update rendered Quarto files for GitHub Pages (commit: ${{ github.sha }})" | |
git push origin docs --force | |
fi |