From 253063a60c9336e3d62cca706b8c4bd6a519db8f Mon Sep 17 00:00:00 2001 From: Splitter Date: Sat, 23 Aug 2025 01:09:50 +0000 Subject: [PATCH] ci(starters): upgrade --- .github/workflows/deploy.yml | 105 ++++++++++++++++++++++ .github/workflows/import-publications.yml | 73 +++++++++++---- .github/workflows/publish.yaml | 105 ---------------------- 3 files changed, 163 insertions(+), 120 deletions(-) create mode 100644 .github/workflows/deploy.yml delete mode 100644 .github/workflows/publish.yaml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..44a4a6a --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,105 @@ +name: Deploy website to GitHub Pages + +env: + WC_HUGO_VERSION: '0.148.2' + NODE_VERSION: '20' + +on: + # Trigger the workflow every time you push to the `main` branch + push: + branches: ['main'] + # Allows you to run this workflow manually from the Actions tab on GitHub. + workflow_dispatch: + +# Provide permission to clone the repo and deploy it to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: false + +jobs: + # Build website + build: + if: github.repository_owner != 'HugoBlox' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + # Fetch history for Hugo's .GitInfo and .Lastmod + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Setup pnpm + if: hashFiles('package.json') != '' + uses: pnpm/action-setup@v4 + + - name: Install dependencies + run: | + # Install Tailwind CLI if package.json exists + if [ -f "package.json" ]; then + echo "Installing Tailwind dependencies..." + pnpm install || npm install + fi + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v3 + with: + hugo-version: ${{ env.WC_HUGO_VERSION }} + extended: true + + - uses: actions/cache@v4 + with: + path: | + /tmp/hugo_cache_runner/ + node_modules/ + modules/*/node_modules/ + key: ${{ runner.os }}-hugomod-${{ hashFiles('**/go.mod', '**/package-lock.json', '**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-hugomod- + + - name: Setup Pages + id: pages + uses: actions/configure-pages@v5 + + - name: Build with Hugo + env: + HUGO_ENVIRONMENT: production + run: | + echo "Hugo Cache Dir: $(hugo config | grep cachedir)" + hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}/" + + - name: Generate Pagefind search index (if applicable) + run: | + # Check if site uses Pagefind + if [ -f "package.json" ] && grep -q "pagefind" package.json; then + pnpm dlx pagefind --source "public" || npx pagefind --source "public" + elif [ -f "netlify.toml" ] && grep -q "pagefind" netlify.toml; then + pnpm dlx pagefind --source "public" || npx pagefind --source "public" + fi + + - name: Upload artifact + uses: actions/upload-pages-artifact@v4 + with: + path: ./public + + # Deploy website to GitHub Pages hosting + deploy: + if: github.repository_owner != 'HugoBlox' + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/import-publications.yml b/.github/workflows/import-publications.yml index 8ee4b62..5879c19 100644 --- a/.github/workflows/import-publications.yml +++ b/.github/workflows/import-publications.yml @@ -1,10 +1,11 @@ # Hugo Blox GitHub Action to convert Bibtex publications to Markdown-based webpages name: Import Publications From Bibtex -# Require permission to create a PR +# Require permission to create a PR (least privilege principle) permissions: contents: write pull-requests: write + metadata: read # Run workflow when a `.bib` file is added or updated in the `data/` folder on: @@ -19,39 +20,81 @@ jobs: hugoblox: if: github.repository_owner != 'HugoBlox' runs-on: ubuntu-latest + timeout-minutes: 10 + + env: + ACADEMIC_VERSION: '>=0.10.0' steps: - name: Checkout the repo - uses: actions/checkout@v3 - - name: Set up Python 3.12 - uses: actions/setup-python@v4 + uses: actions/checkout@v4 with: - python-version: "3.12" + # Fetch history for better performance and debugging + fetch-depth: 0 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: '3.13' + - name: Setup pip cache + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install academic==0.10.0 + pip install academic${{ env.ACADEMIC_VERSION }} - name: Run Academic (Bibtex To Markdown Converter) # Check `.bib` file exists for case when action runs on `.bib` deletion # Note GH only provides hashFiles func in `steps.if` context, not `jobs.if` context if: ${{ hashFiles('publications.bib') != '' }} - run: academic import publications.bib content/publication/ --compact + run: | + echo "Starting publication import..." + academic import publications.bib content/publication/ --compact + echo "Publication import completed successfully" + continue-on-error: false - name: Create Pull Request # Set ID for `Check outputs` stage id: cpr - uses: peter-evans/create-pull-request@v5 + uses: peter-evans/create-pull-request@v6 with: - commit-message: 'content: import publications from Bibtex' - title: Hugo Blox Builder - Import latest publications + commit-message: 'content(publications): run Hugo Blox importer to import publications from Bibtex' + title: 'Hugo Blox Builder - Import latest publications from Bibtex' body: | - Import the latest publications from `publications.bib` to `content/publication/`. + πŸ”„ **Automated Publication Import** + + This PR automatically imports the latest publications from `publications.bib` to `content/publication/`. + + **Changes:** + - πŸ“š Updated publication entries + - 🏷️ Processed bibliographic data + + --- ε°†ζœ€ζ–°ηš„ε‡Ίη‰ˆη‰©δ»Ž`publications.bib`ε―Όε…₯到`content/publication/`。 - [View Documentation](https://github.com/GetRD/academic-file-converter) + + πŸ“– [View Documentation](https://github.com/GetRD/academic-file-converter) base: main - labels: automated-pr, content + labels: automated-pr, content, publications branch: hugoblox-import-publications delete-branch: true + draft: false - name: Check outputs if: ${{ steps.cpr.outputs.pull-request-number }} run: | - echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" - echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" + echo "βœ… Successfully created Pull Request!" + echo "πŸ“ Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "πŸ”— Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" + echo "🎯 Operation completed at $(date)" + + - name: Report workflow status + if: always() + run: | + if [ "${{ job.status }}" == "success" ]; then + echo "πŸŽ‰ Workflow completed successfully" + else + echo "❌ Workflow failed - check logs for details" + exit 1 + fi diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml deleted file mode 100644 index 80616fe..0000000 --- a/.github/workflows/publish.yaml +++ /dev/null @@ -1,105 +0,0 @@ -name: Deploy website to GitHub Pages - -env: - WC_HUGO_VERSION: '0.148.2' - NODE_VERSION: '20' - -on: - # Trigger the workflow every time you push to the `main` branch - push: - branches: ["main"] - # Allows you to run this workflow manually from the Actions tab on GitHub. - workflow_dispatch: - -# Provide permission to clone the repo and deploy it to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Build website - build: - if: github.repository_owner != 'HugoBlox' - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - # Fetch history for Hugo's .GitInfo and .Lastmod - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - - - name: Setup pnpm - if: hashFiles('package.json') != '' - uses: pnpm/action-setup@v4 - - - name: Install dependencies - run: | - # Install Tailwind CLI if package.json exists - if [ -f "package.json" ]; then - echo "Installing Tailwind dependencies..." - pnpm install || npm install - fi - - - name: Setup Hugo - uses: peaceiris/actions-hugo@v3 - with: - hugo-version: ${{ env.WC_HUGO_VERSION }} - extended: true - - - uses: actions/cache@v4 - with: - path: | - /tmp/hugo_cache_runner/ - node_modules/ - modules/*/node_modules/ - key: ${{ runner.os }}-hugomod-${{ hashFiles('**/go.mod', '**/package-lock.json', '**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-hugomod- - - - name: Setup Pages - id: pages - uses: actions/configure-pages@v5 - - - name: Build with Hugo - env: - HUGO_ENVIRONMENT: production - run: | - echo "Hugo Cache Dir: $(hugo config | grep cachedir)" - hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}/" - - - name: Generate Pagefind search index (if applicable) - run: | - # Check if site uses Pagefind - if [ -f "package.json" ] && grep -q "pagefind" package.json; then - pnpm dlx pagefind --source "public" || npx pagefind --source "public" - elif [ -f "netlify.toml" ] && grep -q "pagefind" netlify.toml; then - pnpm dlx pagefind --source "public" || npx pagefind --source "public" - fi - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./public - - # Deploy website to GitHub Pages hosting - deploy: - if: github.repository_owner != 'HugoBlox' - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4