parent
ed6303c340
commit
7c15c748f5
@ -0,0 +1,18 @@
|
||||
FROM alpine as prezto-devel
|
||||
LABEL maintainer="h@hlo.mx"
|
||||
RUN apk --no-cache update && apk upgrade && \
|
||||
apk add make grep zsh git
|
||||
RUN addgroup prezto && adduser -D prezto -G prezto -S /bin/zsh
|
||||
WORKDIR /home/prezto
|
||||
USER prezto
|
||||
RUN cd /home/prezto && mkdir src
|
||||
COPY . src
|
||||
RUN cp src/Makefile .
|
||||
RUN make .clone
|
||||
RUN make src .homercs
|
||||
# ENTRYPOINT ["/bin/zsh", "-"]
|
||||
CMD ["/bin/zsh","-l","-o","verbose","-o","xtrace","-o","sourcetrace"]
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,110 @@
|
||||
#!/usr/bin/make shebang
|
||||
# _ ____ _
|
||||
# _ __ _ __ ___ ___| |_ ___ | _ \ ___ ___| | _____ _ __
|
||||
# | '_ \| '__/ _ \_ / __/ _ \ _____| | | |/ _ \ / __| |/ / _ \ '__|
|
||||
# | |_) | | | __// /| || (_) |_____| |_| | (_) | (__| < __/ |
|
||||
# | .__/|_| \___/___|\__\___/ |____/ \___/ \___|_|\_\___|_|
|
||||
# |_|
|
||||
# h@h-lo.me 20191025 004745 -0700 PDT 1571989665 d(-_- )b...
|
||||
# This makefile automates image building and container management
|
||||
# for easy development of prezto and prezto-plugins without messing
|
||||
# up your current configuration. Prezto is installed fresh on an
|
||||
# alpine container, where you may add your edits
|
||||
#
|
||||
#######################################################################
|
||||
# REPO and IMG define the TAG for our image. this is how it gets named
|
||||
# when pushed to dockerhum. REPO should be your dockerhub username
|
||||
# IMG would be nice if its related to the project.
|
||||
REPO = hlecuanda
|
||||
IMG = prezto-dev
|
||||
TAG = $(REPO)/$(IMG)
|
||||
# ALLCODE recirds all code files so we can have the docker image
|
||||
# depend on all of them. if any file changes, the image gets rebuilt
|
||||
ALLCODE != find . -type f | grep -vEe '^\./\.+|*.md'
|
||||
RUNCOMS != ls runcoms
|
||||
# The context is the current directory. this is important if you have
|
||||
# a buildserver, v.gr on gitlab or google cloud. its still needed for
|
||||
# local builds. so don't touch this, unless you know what you're doing
|
||||
CONTEXT = .
|
||||
# All reciipes on this makefile are zsh scripts, not bash or sh
|
||||
# scripts, so we don't have to be context-switching
|
||||
SHELL = zsh
|
||||
# This removes the default build rules for gmake's built in suffixes
|
||||
# when debugging the Makefile, output is a lot more readable, plus
|
||||
# if you're not making C programs, it just makes sense to avoid
|
||||
# mistery bugs
|
||||
.SUFFIXES =
|
||||
|
||||
# We don't want to fail recipies on error for the targets if .IGNORE
|
||||
.IGNORE: clean realclean ;
|
||||
|
||||
# These targets don't create files and are defined for convenience.
|
||||
# note that other targets do create real files which are used to
|
||||
# determine the state of the build
|
||||
.PHONY: default run clean realclean ;
|
||||
|
||||
# an empty recipe, to avoid expensive operations if we "make" by
|
||||
# mistake. it can be made to depend on another target and it will
|
||||
# become the target of a "make" call with no arguments, vg.r:
|
||||
# default: image; results in "make" and "make image" doing the same
|
||||
default: ;
|
||||
|
||||
# a user callable target, depends on .container/image whiech records
|
||||
# the timestamp of the last successfuly built image
|
||||
image: .container/image ;
|
||||
|
||||
# we declare .container/image to depend on $(ALLCODE) which contains
|
||||
# all files in the distribution. thus, if ANY file changes, it makes
|
||||
# our image obsolete and will be re-made on next make command
|
||||
.container/image: $(ALLCODE)
|
||||
docker build -t $(TAG) $(CONTEXT)
|
||||
[[ ! -d .container ]] && mkdir .container || :
|
||||
touch $@
|
||||
|
||||
# NOTE: The following targets ( .homercs clone and .clone ) are
|
||||
# run inside the container while building a container image. They are
|
||||
# called from the Dockerfile when you "make image". .homercs creates
|
||||
# the dotfiles on our home directory and depends on .clone, so .clone
|
||||
# should be made before .homercs. We're spelling these out explicitly
|
||||
# for clarity instead of using Makefile enchantments that would make
|
||||
# this a 2 line recipe
|
||||
.homercs: .clone
|
||||
ln -s .zprezto/runcoms/zshenv /home/prezto/.zshenv
|
||||
ln -s .zprezto/runcoms/zprofile /home/prezto/.zprofile
|
||||
ln -s .zprezto/runcoms/zshrc /home/prezto/.zshrc
|
||||
ln -s .zprezto/runcoms/zlogin /home/prezto/.zlogin
|
||||
ln -s .zprezto/runcoms/zlogout /home/prezto/.zlogout
|
||||
touch $@
|
||||
|
||||
# clones the prezto repository we have copied from the build context
|
||||
# into the container, into a .zprezto directory, as the installation
|
||||
# instructions recommend.
|
||||
.clone:
|
||||
git clone --recursive src .zprezto
|
||||
touch $@
|
||||
|
||||
# This runs an interactive (-it) ephemeral (--rm) container named
|
||||
# $(IMG) created from the image stored at $(TAG) it is made to depend
|
||||
# on container/image so that it checks whether image is up to # date.
|
||||
# Given that image depends on $(ALLCODE), calling "make run" will use
|
||||
# the latest image, unless any code file hasa changed in which case,
|
||||
# the image is rebuilt and then run.
|
||||
run: .container/image
|
||||
docker run -it --rm -h $(IMG) --name $(IMG) $(TAG)
|
||||
|
||||
# Removes the current container and image, so we can build a new one
|
||||
# from scratch. If you want a real clean slate, then "make realclean"
|
||||
clean:
|
||||
docker container rm $(TAG):
|
||||
docker image rm $(TAG):
|
||||
|
||||
# Deep cleaning, will remove dangling (intermediate build) images
|
||||
# and containers for which a final image or container cannot be found
|
||||
# (i.e has been deleted by clean or removed after usage for ephemeral
|
||||
# containers. Run every once in a while.
|
||||
realclean:
|
||||
$(MAKE) clean
|
||||
docker container prune
|
||||
docker image prune
|
||||
|
||||
# vim: set ft=make sw=2 tw=7 fdm=manual noet :
|
Loading…
Reference in new issue