blob: 6d8ea0986ece6e594100baa325d146c524b3db42 (
plain) (
tree)
|
|
name: CI
on:
push:
pull_request:
workflow_dispatch:
env:
JEKYLL_PROJECT_AUTHOR: egor-tensin
JEKYLL_PROJECT_NAME: egor-tensin.github.io
jobs:
local_build:
runs-on: ubuntu-latest
name: Local build
env:
JEKYLL_GITHUB_TOKEN: '${{ secrets.GH_TOKEN }}'
steps:
- name: Checkout
uses: actions/checkout@v3
with:
path: src
- name: Checkout Jekyll project
uses: actions/checkout@v3
with:
repository: '${{ env.JEKYLL_PROJECT_AUTHOR }}/${{ env.JEKYLL_PROJECT_NAME }}'
path: '${{ env.JEKYLL_PROJECT_NAME }}'
- name: Add ~/.local/bin to PATH
run: echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: chruby & ruby-install are not installed
run: |
test '' = "$( type -t chruby-exec )"
test '' = "$( type -t ruby-install )"
- name: Install Ruby
run: |
cd src
make ruby-install
make ruby-install/clean
make ruby
make chruby
make chruby/clean
- name: chruby & ruby-install were installed
run: |
test 'file' = "$( type -t chruby-exec )"
test 'file' = "$( type -t ruby-install )"
- name: Install dependencies
run: |
cd src
make bundler
make dependencies "PROJECT_DIR=../$JEKYLL_PROJECT_NAME"
- name: _site doesn't exist
run: test ! -e "$JEKYLL_PROJECT_NAME/_site"
- name: Build Jekyll project
run: make -f src/Makefile jekyll/build "PROJECT_DIR=$JEKYLL_PROJECT_NAME"
- name: _site exists
run: |
test -d "$JEKYLL_PROJECT_NAME/_site"
test -f "$JEKYLL_PROJECT_NAME/_site/index.html"
docker_build:
runs-on: ubuntu-latest
name: Docker build
steps:
- name: Running as regular user
run: test "$( id -u )" != 0
- name: Docker is accessible as regular user
run: docker ps
- name: Checkout
uses: actions/checkout@v3
with:
path: src
- name: Checkout Jekyll project
uses: actions/checkout@v3
with:
repository: '${{ env.JEKYLL_PROJECT_AUTHOR }}/${{ env.JEKYLL_PROJECT_NAME }}'
path: '${{ env.JEKYLL_PROJECT_NAME }}'
- name: Build Docker images
run: make -f src/Makefile docker/build "PROJECT_DIR=$JEKYLL_PROJECT_NAME"
- name: _site doesn't exist
run: test ! -e "$JEKYLL_PROJECT_NAME/_site"
- name: Start containers
run: |
cd src
make docker/up "PROJECT_DIR=../$JEKYLL_PROJECT_NAME"
sleep 3
make docker/logs
- name: Check Jekyll running as current user
run: |
pid="$( docker inspect -f '{{.State.Pid}}' jekyll_project_1 )"
info="$( ps --no-headers -o uid:1,gid:1 -p "$pid" )"
test "$( id -u ) $( id -g )" = "$info"
- name: _site exists
run: |
test -d "$JEKYLL_PROJECT_NAME/_site"
test -f "$JEKYLL_PROJECT_NAME/_site/index.html"
- name: Check _site owned by current user
run: |
test "$( id -u ) $( id -g )" = "$( stat -c '%u %g' "$JEKYLL_PROJECT_NAME/_site" )"
test "$( id -u ) $( id -g )" = "$( stat -c '%u %g' "$JEKYLL_PROJECT_NAME/_site/index.html" )"
- name: Fetch index.html
run: curl -sS -D - http://localhost:4000/index.html
- name: _site/dummy.txt doesn't exist
run: test ! -e "$JEKYLL_PROJECT_NAME/_site/dummy.txt"
- name: create dummy.txt
run: |
echo 123 > "$JEKYLL_PROJECT_NAME/dummy.txt"
sleep 3
- name: _site/dummy.txt exists
run: test -f "$JEKYLL_PROJECT_NAME/_site/dummy.txt"
- name: Check _site/dummy.txt owned by current user
run: test "$( id -u ) $( id -g )" = "$( stat -c '%u %g' "$JEKYLL_PROJECT_NAME/_site/dummy.txt" )"
- name: Fetch dummy.txt
run: curl -sS -D - http://localhost:4000/dummy.txt
- name: Stop containers
run: make -f src/Makefile docker/down
docker_root_build:
runs-on: ubuntu-latest
name: Docker build (as root)
steps:
- name: Running as regular user
run: test "$( id -u )" != 0
- name: sudo makes root
run: test "$( sudo id -u )" = 0
- name: Checkout
uses: actions/checkout@v3
with:
path: src
- name: Checkout Jekyll project
uses: actions/checkout@v3
with:
repository: '${{ env.JEKYLL_PROJECT_AUTHOR }}/${{ env.JEKYLL_PROJECT_NAME }}'
path: '${{ env.JEKYLL_PROJECT_NAME }}'
- name: Jekyll project is owned by root
run: sudo chown -R -- root:root "$JEKYLL_PROJECT_NAME"
- name: Build Docker images
run: sudo make -f src/Makefile docker/build "PROJECT_DIR=$JEKYLL_PROJECT_NAME"
- name: _site doesn't exist
run: test ! -e "$JEKYLL_PROJECT_NAME/_site"
- name: Start containers
run: |
cd src
sudo make docker/up "PROJECT_DIR=../$JEKYLL_PROJECT_NAME"
sleep 3
sudo make docker/logs
- name: Check Jekyll running as container user
run: |
pid="$( docker inspect -f '{{.State.Pid}}' jekyll_project_1 )"
info="$( ps --no-headers -o uid:1,gid:1 -p "$pid" )"
test '999 999' = "$info"
- name: _site exists
run: |
test -d "$JEKYLL_PROJECT_NAME/_site"
test -f "$JEKYLL_PROJECT_NAME/_site/index.html"
- name: Check _site owned by container user
run: |
test '999 999' = "$( stat -c '%u %g' "$JEKYLL_PROJECT_NAME/_site" )"
test '999 999' = "$( stat -c '%u %g' "$JEKYLL_PROJECT_NAME/_site/index.html" )"
- name: Fetch index.html
run: curl -sS -D - http://localhost:4000/index.html
- name: _site/dummy.txt doesn't exist
run: test ! -e "$JEKYLL_PROJECT_NAME/_site/dummy.txt"
- name: create dummy.txt
run: |
echo 123 | sudo tee "$JEKYLL_PROJECT_NAME/dummy.txt"
sleep 3
- name: _site/dummy.txt exists
run: test -f "$JEKYLL_PROJECT_NAME/_site/dummy.txt"
- name: Check _site/dummy.txt owned by container user
run: test '999 999' = "$( stat -c '%u %g' "$JEKYLL_PROJECT_NAME/_site/dummy.txt" )"
- name: Fetch dummy.txt
run: curl -sS -D - http://localhost:4000/dummy.txt
- name: Stop containers
run: sudo make -f src/Makefile docker/down
|