• Stars
    star
    261
  • Rank 156,630 (Top 4 %)
  • Language
    Shell
  • License
    MIT License
  • Created over 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿช‚ A Github Action to deploy the Jekyll site conveniently for GitHub Pages.

jekyll-theme-yat โ†’~ jekyll

๐Ÿช‚ A GitHub Action to deploy the Jekyll site conveniently for GitHub Pages.


JEKYLL DEPLOY ACTION

Jekyll action for deployment.

Tests Release Version License: MIT Donate (Liberapay) Donate (Patreon) Donate (Ko-fi)

Built with โค๏ธŽ by jeffreytse and contributors

โœจ Story

As we known, GitHub Pages runs in safe mode and a set of allow-listed plugins. To use the gem in GitHub Pages, you need to build locally or use CI (e.g. travis, github workflow) and deploy to your gh-pages branch.

Therefore, if you want to make Jekyll site run as if it were local, such as let the custom plugins work properly, this action can be very useful for you, beacause it's really convenient to build and deploy the Jekyll site to Github Pages.

๐Ÿ“š Usage

At First, you should add a github workflow file (e.g. .github/workflows/build-jekyll.yml) in your repository's master branch as below:

name: Build and Deploy to Github Pages

on:
  push:
    branches:
      - master  # Here source code branch is `master`, it could be other branch

jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      # Use GitHub Actions' cache to cache dependencies on servers
      - uses: actions/cache@v3
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gems-

      # Use GitHub Deploy Action to build and deploy to Github
      - uses: jeffreytse/[email protected]
        with:
          provider: 'github'
          token: ${{ secrets.GITHUB_TOKEN }} # It's your Personal Access Token(PAT)
          repository: ''             # Default is current repository
          branch: 'gh-pages'         # Default is gh-pages for github provider
          jekyll_src: './'           # Default is root directory
          jekyll_cfg: '_config.yml'  # Default is _config.yml
          jekyll_baseurl: ''         # Default is according to _config.yml
          bundler_ver: '>=0'         # Default is latest bundler version
          cname: ''                  # Default is to not use a cname
          actor: ''                  # Default is the GITHUB_ACTOR
          pre_build_commands: ''     # Installing additional dependencies (Arch Linux)

To schedule a workflow, you can use the POSIX cron syntax in your workflow file. The shortest interval you can run scheduled workflows is once every 5 minutes. For example, this workflow is triggered every hour.

on:
  schedule:
    - cron:  '0 * * * *'

At the start of each workflow run, GitHub automatically creates a unique GITHUB_TOKEN secret to use in your workflow. You can use the GITHUB_TOKEN to authenticate in a workflow run. You can use the GITHUB_TOKEN by using the standard syntax for referencing secrets: ${{ secrets.GITHUB_TOKEN }}. For more information, you can see here.

If you need a token that requires permissions that aren't available in the GITHUB_TOKEN, you can create a Personal Access Token (PAT), and set it as a secret in your repository for this action to push to the gh-pages branch:

  • Create a Personal Access Token with custom permissions and copy the value.
  • Go to your repositoryโ€™s Settings and then switch to the Secrets tab.
  • Create a token named GH_TOKEN (important) using the value copied.

In the end, go to your repositoryโ€™s Settings and scroll down to the GitHub Pages section, choose the gh-pages branch as your GitHub Pages source.

Additionally, if you don't have the gh-pages branch, you can create it as below:

git checkout --orphan gh-pages
git rm -rf .
git commit --allow-empty -m "initial commit"
git push origin gh-pages

๐Ÿ’ก Tip: The gh-pages branch is only for the site static files and the master branch is for source code.

โœจ FAQ

If you use jekyll-last-modified-at plugin, you can configure the checkout action to fetch all commit history so that plugin could use the last Git commit date to determine a page's last modified date.

- uses: actions/checkout@v3
  with:
    # The checkout action doesn't provide a way to get all commit history for a single branch
    # So we use the magic number 2147483647 here which means infinite depth for git fetch
    # See https://github.com/actions/checkout/issues/520, https://stackoverflow.com/a/6802238
    fetch-depth: 2147483647

If your site building needs some specific environments, here are some recipes for you:

# NodeJS
pre_build_commands: pacman -S --noconfirm nodejs npm

# Python
pre_build_commands: pacman -S --noconfirm python

# Gem RMagick
pre_build_commands: pacman -S --noconfirm imagemagick

# Jekyll-Picture-Tag
pre_build_commands: pacman -S --noconfirm libvips lcms2 openjpeg2 libpng libwebp libheif imagemagick openslide libjxl poppler-glib

๐ŸŒฑ Credits

  • Jekyll - A blog-aware static site generator in Ruby.
  • actions/checkout - Action for checking out a repo.
  • actions/cache - Cache dependencies and build outputs in GitHub Actions.

โœ๏ธ Contributing

Issues and Pull Requests are greatly appreciated. If you've never contributed to an open source project before I'm more than happy to walk you through how to create a pull request.

You can start by opening an issue describing the problem that you're looking to resolve and we'll go from there.

๐ŸŒˆ License

This software is licensed under the MIT license ยฉ JeffreyTse.