diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 00000000..452e2ef4 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,54 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + permissions: + contents: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Emacs + uses: purcell/setup-emacs@master + with: + version: 29.1 + + - name: Setup Cask + uses: conao3/setup-cask@master + with: + version: snapshot + + - name: Install dependencies + working-directory: gen-gh-pages + run: cask install + + - name: Generate HTML + working-directory: gen-gh-pages + run: | + cask exec emacs --script generate-html.el + mv ../dotfiles/emacs.d/README.html ./index.html + + - name: Deploy to GitHub Pages + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./gen-gh-pages + publish_branch: gh-pages + user_name: 'github-actions[bot]' + user_email: 'github-actions[bot]@users.noreply.github.com' + commit_message: 'Deploy to GitHub Pages: ${{ github.sha }}' + keep_files: false diff --git a/dotfiles/emacs.d/README.org b/dotfiles/emacs.d/README.org index c0ff7d4d..bbd34266 100644 --- a/dotfiles/emacs.d/README.org +++ b/dotfiles/emacs.d/README.org @@ -1,6 +1,6 @@ # -*- mode: org; -*- -[[https://travis-ci.org/IvanMalison/dotfiles][ -file:https://travis-ci.org/IvanMalison/dotfiles.svg?branch=master]] +[[https://github.com/IvanMalison/dotfiles/actions/workflows/gh-pages.yml][ +file:https://github.com/IvanMalison/dotfiles/actions/workflows/gh-pages.yml/badge.svg?branch=master]] This document is best read at [[http://ivanmalison.github.io/dotfiles/]] or, of course, in emacs, as the internal links that follow are unlikely to work @@ -17,9 +17,10 @@ These sections are the ones that have the most potential to be interesting to others: ** How I generate http://ivanmalison.github.io/dotfiles/ *** org-export -**** travis-ci +**** GitHub Actions [[https://github.com/IvanMalison/dotfiles/tree/master/gen-gh-pages][This directory]] contains a collection of scripts that export this org document -to html. This approach is taken (with only a few modifications) from [[https://gist.github.com/domenic/ec8b0fc8ab45f39403dd][here]]. +to html. A [[https://github.com/IvanMalison/dotfiles/blob/master/.github/workflows/gh-pages.yml][GitHub Actions workflow]] runs on every push to master, generating the +HTML and deploying it to GitHub Pages. **** githook (The old way) NOTE: I've left this here in case other people have an interest in this method, but I no longer use it. diff --git a/gen-gh-pages/compile.sh b/gen-gh-pages/compile.sh index 37eda32a..2be0eb86 100755 --- a/gen-gh-pages/compile.sh +++ b/gen-gh-pages/compile.sh @@ -1,20 +1,25 @@ #!/usr/bin/env bash +# Local compilation script for generating HTML from README.org +# Note: For CI, this is now handled by GitHub Actions (.github/workflows/gh-pages.yml) + +set -e -export PATH="$HOME/.cask/bin:$HOME/.evm/bin:$PATH" THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -TARGET=$(readlink -f "$THIS_DIR/../dotfiles/emacs.d/README.org") +# Use system emacs or EMACS environment variable +EMACS="${EMACS:-emacs}" -git clone https://github.com/rejeep/evm.git "$HOME/.evm" -evm config path /tmp -evm install emacs-25.1-travis --use --skip -export EMACS="$(evm bin)" +cd "$THIS_DIR" -git clone https://github.com/cask/cask -export PATH=$(pwd)/cask/bin:$PATH +# Install cask dependencies if needed +if [ ! -d ".cask" ]; then + cask install +fi -cask install +# Generate HTML cask exec "$EMACS" --script generate-html.el +# Move the generated file mv "$THIS_DIR/../dotfiles/emacs.d/README.html" . +echo "Generated README.html in $THIS_DIR" diff --git a/gen-gh-pages/deploy.sh b/gen-gh-pages/deploy.sh index fa641073..d5816d02 100755 --- a/gen-gh-pages/deploy.sh +++ b/gen-gh-pages/deploy.sh @@ -1,68 +1,11 @@ #!/usr/bin/env bash -# This approach was adapted from https://gist.github.com/domenic/ec8b0fc8ab45f39403dd +# DEPRECATED: This script was used for Travis CI deployments. +# Deployment is now handled by GitHub Actions (.github/workflows/gh-pages.yml) +# +# This script is kept for reference only. +# See: https://github.com/IvanMalison/dotfiles/blob/master/.github/workflows/gh-pages.yml -THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -cd $THIS_DIR - -git config --global user.name "$COMMIT_AUTHOR_NAME" -git config --global user.email "$COMMIT_AUTHOR_EMAIL" - -set -e # Exit with nonzero exit code if anything fails - -SOURCE_BRANCH="master" -TARGET_BRANCH="gh-pages" - -function doCompile { - ./compile.sh -} - -# Pull requests and commits to other branches shouldn't try to deploy, just build to verify -if [ "$TRAVIS_PULL_REQUEST" != "false" -o "$TRAVIS_BRANCH" != "$SOURCE_BRANCH" ]; then - echo "Skipping deploy; just doing a build." - doCompile - exit 0 -fi - -# Save some useful information -REPO=`git config remote.origin.url` -SSH_REPO=${REPO/https:\/\/github.com\//git@github.com:} -SHA=`git rev-parse --verify HEAD` - -# Run our compile script -doCompile - -# Get the deploy key by using Travis's stored variables to decrypt deploy_key.enc -ENCRYPTED_KEY_VAR="encrypted_${ENCRYPTION_LABEL}_key" -ENCRYPTED_IV_VAR="encrypted_${ENCRYPTION_LABEL}_iv" -ENCRYPTED_KEY=${!ENCRYPTED_KEY_VAR} -ENCRYPTED_IV=${!ENCRYPTED_IV_VAR} - -openssl aes-256-cbc -K $ENCRYPTED_KEY -iv $ENCRYPTED_IV -in deploy_key.enc -out deploy_key -d -chmod 600 deploy_key -eval `ssh-agent -s` -ssh-add deploy_key - -# Clone the existing gh-pages for this repo into out/ -# Create a new empty branch if gh-pages doesn't exist yet (should only happen on first deply) -git clone $REPO out -cd out -git checkout $TARGET_BRANCH || git checkout --orphan $TARGET_BRANCH - -# Clean out existing contents -git ls-files | xargs rm -rf - -mv ../README.html ./index.html - -# Commit the "changes", i.e. the new version. -# The delta will show diffs between new and old versions. -git add --all . -git commit -m "Deploy to GitHub Pages: ${SHA}" - -git fetch origin master - -if [ "$(git rev-parse origin/master)" == "$SHA" ]; then - git push "$SSH_REPO" "$TARGET_BRANCH" -else - echo "The commit this build was started for is not the one on master. Doing nothing." -fi +echo "ERROR: This script is deprecated." +echo "Deployment is now handled by GitHub Actions." +echo "See: .github/workflows/gh-pages.yml" +exit 1 diff --git a/gen-gh-pages/deploy_key.enc b/gen-gh-pages/deploy_key.enc deleted file mode 100644 index 96c9fe96..00000000 Binary files a/gen-gh-pages/deploy_key.enc and /dev/null differ