diff options
-rw-r--r-- | .gitattributes | 1 | ||||
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | Dockerfile | 41 | ||||
-rw-r--r-- | Makefile | 118 | ||||
-rw-r--r-- | docker-compose.yml | 10 |
5 files changed, 173 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..176a458 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0aea6ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.tar.gz +/chruby-*/ +/ruby-install-*/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1f56c22 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM debian:buster-slim + +SHELL ["/bin/bash", "-c"] + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt update -yq && \ + apt install -yq --no-install-recommends \ + build-essential \ + ca-certificates wget \ + sudo + +# Creating regular user 'developer': +ARG USER=developer +RUN addgroup "$USER" && \ + adduser --disabled-password --gecos "" --ingroup "$USER" --home "/home/$USER" "$USER" && \ + addgroup "$USER" sudo && \ + echo -e '%sudo ALL=(ALL) NOPASSWD:ALL\nDefaults env_keep += "HOME"' >> /etc/sudoers + +USER "$USER" +ENV src_dir="/home/$USER/src" +RUN mkdir -p -- "$src_dir/docker" +WORKDIR "$src_dir/docker" + +ENV PATH="/home/$USER/.local/bin:$PATH" + +COPY ["docker/Makefile", "./"] +RUN sudo make ruby-install && \ + sudo make ruby-install/clean && \ + make ruby && \ + sudo make chruby && \ + sudo make chruby/profile.d && \ + sudo make chruby/clean && \ + make bundler + +COPY ["Gemfile", "Gemfile.lock", "../"] +RUN make dependencies + +COPY [".", "../"] +RUN sudo chown -R "$USER:$USER" ../ +CMD make jekyll/serve diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..06d725c --- /dev/null +++ b/Makefile @@ -0,0 +1,118 @@ +SHELL := bash +.SHELLFLAGS := -e -o pipefail -c +.DEFAULT_GOAL := jekyll/serve +.DELETE_ON_ERROR: +.SUFFIXES: + +makefile_dir := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) +project_dir := $(dir $(makefile_dir))/.. + +PREFIX ?= $(HOME)/.local + +chruby_version ?= 0.3.9 +chruby_url := https://github.com/postmodern/chruby/archive/v$(chruby_version).tar.gz +chruby_archive := $(makefile_dir)/chruby-$(chruby_version).tar.gz +chruby_dir := $(makefile_dir)/chruby-$(chruby_version) + +chruby_sh := $(PREFIX)/share/chruby/chruby.sh +auto_sh := $(PREFIX)/share/chruby/auto.sh + +ruby_install_version ?= 0.7.0 +ruby_install_url := https://github.com/postmodern/ruby-install/archive/v$(ruby_install_version).tar.gz +ruby_install_archive := $(makefile_dir)/ruby-install-$(ruby_install_version).tar.gz +ruby_install_dir := $(makefile_dir)/ruby-install-$(ruby_install_version) + +ruby_version ?= 2.6.5 + +.PHONY: chruby +chruby: + wget -O '$(chruby_archive)' '$(chruby_url)' + tar -xzvf '$(chruby_archive)' -C '$(makefile_dir)' + cd -- '$(chruby_dir)' && $(MAKE) install 'PREFIX=$(PREFIX)' + +.PHONY: chruby/uninstall +chruby/uninstall: + cd -- '$(chruby_dir)' && $(MAKE) uninstall 'PREFIX=$(PREFIX)' + +.PHONY: chruby/clean +chruby/clean: + rm -rf -- '$(chruby_archive)' '$(chruby_dir)' + +define chruby_profile_d +if [ -n "$$BASH_VERSION" ] || [ -n "$$ZSH_VERSION" ]; then + [ -r '$(chruby_sh)' ] && source '$(chruby_sh)' + [ -r '$(auto_sh)' ] && source '$(auto_sh)' +fi +endef +export chruby_profile_d + +.PHONY: chruby/profile.d +chruby/profile.d: + echo "$$chruby_profile_d" > /etc/profile.d/chruby.sh + +.PHONY: chruby/profile.d/clean +chruby/profile.d/clean: + rm -f -- /etc/profile.d/chruby.sh + +.PHONY: ruby-install +ruby-install: + wget -O '$(ruby_install_archive)' '$(ruby_install_url)' + tar -xzvf '$(ruby_install_archive)' -C '$(makefile_dir)' + cd -- '$(ruby_install_dir)' && make install 'PREFIX=$(PREFIX)' + +.PHONY: ruby-install/uninstall +ruby-install/uninstall: + cd -- '$(ruby_install_dir)' && make uninstall 'PREFIX=$(PREFIX)' + +.PHONY: ruby-install/clean +ruby-install/clean: + rm -rf -- '$(ruby_install_archive)' '$(ruby_install_dir)' + +.PHONY: ruby +ruby: + ruby-install -j2 --cleanup ruby '$(ruby_version)' + +chruby := cd -- '$(project_dir)' && . '$(chruby_sh)' && chruby 'ruby-$(ruby_version)' + +.PHONY: bundler +bundler: + $(chruby) && gem install --norc bundler + +.PHONY: dependencies +dependencies: + $(chruby) && bundle install --jobs=2 --retry=3 + +.PHONY: deps +deps: dependencies + +jekyll := $(chruby) && bundle exec jekyll + +.PHONY: jekyll/build +jekyll/build: + $(jekyll) build --config _config.yml,_config_dev.yml + +.PHONY: jekyll/serve +jekyll/serve: + $(jekyll) serve --host 0.0.0.0 --config _config.yml,_config_dev.yml + +docker_compose := cd -- '$(makefile_dir)' && docker-compose + +.PHONY: docker/build +docker/build: + $(docker_compose) build --force-rm + +.PHONY: docker/up +docker/up: + $(docker_compose) up -d + +.PHONY: docker/down +docker/down: + $(docker_compose) down -v + +.PHONY: docker/shell +docker/shell: + $(docker_compose) exec serve bash --login + +.PHONY: docker/clean +docker/clean: + docker system prune -a -f --volumes diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1600e0d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +version: '3' +services: + serve: + build: + context: .. + dockerfile: docker/Dockerfile + ports: + - 4000:4000 + volumes: + - ../:/home/developer/src |