From fbeb63b4742ba516578354604627a3b8d5cf46e5 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Wed, 6 May 2020 15:43:23 +0300 Subject: set up GitHub Actions --- .github/workflows/test.yml | 180 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 .github/workflows/test.yml (limited to '.github/workflows') diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..f0590a0 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,180 @@ +name: This even works? + +on: [push, pull_request] + +env: + JEKYLL_PROJECT_AUTHOR: egor-tensin + JEKYLL_PROJECT_NAME: egor-tensin.github.io + +jobs: + local_build: + name: Local build + runs-on: ubuntu-18.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + path: src + - name: Checkout Jekyll project + uses: actions/checkout@v2 + with: + repository: ${{ env.JEKYLL_PROJECT_AUTHOR }}/${{ env.JEKYLL_PROJECT_NAME }} + path: ${{ env.JEKYLL_PROJECT_NAME }} + - name: Add ~/.local/bin to PATH + run: echo "::add-path::$HOME/.local/bin" + - 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: | + cd -- "$JEKYLL_PROJECT_NAME" + test ! -e '_site' + - name: Build Jekyll project + run: | + cd src + make jekyll/build "PROJECT_DIR=../$JEKYLL_PROJECT_NAME" + - name: _site exists + run: | + cd -- "$JEKYLL_PROJECT_NAME" + test -d '_site' + test -f '_site/index.html' + docker_build: + name: Docker build + runs-on: ubuntu-18.04 + 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@v2 + with: + path: src + - name: Checkout Jekyll project + uses: actions/checkout@v2 + with: + repository: ${{ env.JEKYLL_PROJECT_AUTHOR }}/${{ env.JEKYLL_PROJECT_NAME }} + path: ${{ env.JEKYLL_PROJECT_NAME }} + - name: Build Docker images + run: | + cd src + make 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 container UID + 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 ownership + 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 ownership + 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: | + cd src + make docker/down + docker_root_build: + name: Docker build (as root) + runs-on: ubuntu-18.04 + 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@v2 + with: + path: src + - name: Checkout Jekyll project + uses: actions/checkout@v2 + 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: | + cd src + sudo make 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 container UID + 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 ownership + 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 ownership + 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: | + cd src + sudo make docker/down -- cgit v1.2.3