From 8ea103162e783fa33fcefb7c827fb1d7fc1f901c Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Sat, 6 Oct 2018 21:58:00 -0600 Subject: [PATCH] initial --- do.sh | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100755 do.sh diff --git a/do.sh b/do.sh new file mode 100755 index 0000000..d25efff --- /dev/null +++ b/do.sh @@ -0,0 +1,184 @@ +# /bin/bash + +function main() { + set -e + set -u + thispkg="${PWD##*$GOPATH/}" + function cleanup() { + rm "$compile" + rm "$dockfile" + } + trap cleanup EXIT + + if [ "$(uname -s)" == "Darwin" ]; then + compile="$(mktemp -t . tmpXXXXX | tail -n 1)" + dockfile="$(mktemp -t . tmpXXXX | tail -n 1)" + echo ,"$compile", ."$dockfile". + else + compile="$(mktemp -p . tmpXXXXX)" + dockfile="$(mktemp -p . tmpXXXX)" + fi + + if [ "$(ls ./*.go 2>/dev/null )" != "" ]; then + echo "PACKING GO..." + go_dockerfiles + elif [ "$(ls ./*.py 2>/dev/null )" != "" ]; then + if [ "$(ls ./main.py 2>/dev/null )" != "" ] && [[ "$(head -n 1 ./main.py)" == *python2* ]]; then + echo "PACKING PYTHON2..." + py2_dockerfiles + else + echo "PACKING PYTHON3..." + py3_dockerfiles + fi + fi + + if [ "$#" -lt 1 ]; then + args="-t ${thispkg##*/}:latest" + else + args="$*" + fi + + docker build $args -f "$dockfile" . +} + +function py3_dockerfiles() { + echo "PY3" + + img="${1:-python}" + + if [[ "$(ls ./*req*.txt 2>/dev/null)" == "" ]]; then + echo "NEED requirements.txt" + exit 1 + fi + reqFile="$(ls ./*req*.txt | head -n 1)" + + if [[ "$img" == "python" ]]; then + from="python:3.7.0-alpine3.8" + elif [[ "$img" == "pypy" ]]; then + from="pypy:3-6.0.0-slim-jessie" + else + echo "ERR py3_dockerfile can be '', 'python', or 'pypy', not ${img}" + fi + + if [ "$(uname -s)" == "Darwin" ]; then + from="${from}" + fi + + f=() + f+=('') + f+=('FROM alpine as certs') + f+=('RUN apk update && apk add ca-certificates') + f+=('') + f+=('#========================') + f+=('') + f+=('FROM '"${from}"'') + f+=('WORKDIR /main/') + f+=('COPY --from=certs /etc/ssl/certs /etc/ssl/certs') + f+=('') + if [[ "$img" == "python" ]]; then + echo "" + #f+=('RUN apk add linux-headers') + #f+=('RUN apk add g++ gcc make') + else + echo "" + #f+=('RUN apt-get update') + #f+=('RUN apt-get install -y linux-headers') + #f+=('RUN apt-get install -y g++ gcc make') + fi + f+=('') + f+=('COPY ./'"$(basename ${reqFile})"' /main/req.txt') + f+=('RUN pip install -r /main/req.txt') + f+=('') + f+=('COPY . .') + if [[ "$img" == "python" ]]; then + f+=('ENTRYPOINT ["python3", "/main/main.py"]') + else + f+=('ENTRYPOINT ["pypy3", "/main/main.py"]') + fi + f+=('') + DOCKERFILE="" + for i in "${f[@]}"; do + DOCKERFILE+="${i}"$'\n' + done + echo "$DOCKERFILE" > "$dockfile" +} + +function py2_dockerfiles() { + echo "PY2" + + if [[ "$(ls ./*req*.txt 2>/dev/null)" == "" ]]; then + echo "NEED requirements.txt" + exit 1 + fi + reqFile="$(ls ./*req*.txt | head -n 1)" + + from="python:2.7.15-alpine3.8" + if [ "$(uname -s)" == "Darwin" ]; then + from="${from}" + fi + + echo "$DOCKERFILE" > "$dockfile" + f=() + f+=('') + f+=('FROM alpine as certs') + f+=('RUN apk update && apk add ca-certificates') + f+=('') + f+=('#========================') + f+=('') + f+=('FROM '"${from}"'') + f+=('WORKDIR /main/') + f+=('COPY --from=certs /etc/ssl/certs /etc/ssl/certs') + f+=('COPY . .') + f+=('COPY ./'"$(basename ${reqFile})"' /main/req.txt') + f+=('RUN pip2.7 install -r /main/req.txt') + f+=('ENTRYPOINT ["python2.7", "/main/main.py"]') + f+=('') + DOCKERFILE="" + for i in "${f[@]}"; do + DOCKERFILE+="${i}"$'\n' + done +} + +function go_dockerfiles() { +echo ' +#! /bin/sh + +set -e +set -u + +CGO_ENABLED=0 go build -o /go/bin/exec -a -installsuffix cgo +' > "$compile" + +from="golang:1.10-alpine" +if [ "$(uname -s)" == "Darwin" ]; then + from="registry-app.eng.qops.net:5001/imported/alpine/golang:1.10-alpine" +fi + +DOCKERFILE=' +FROM '"$from"' as builder +MAINTAINER breel@qualtrics.com + +WORKDIR /go/'"$thispkg"' +COPY . . +RUN /bin/sh '"$compile"' + +FROM alpine as certs +RUN apk update && apk add ca-certificates + +#======================== + +FROM busybox:glibc +COPY --from=builder /go/bin /main +COPY --from=builder /go/'"$thispkg"' /main +RUN mkdir -p /var/log +WORKDIR /main +ENV GOPATH="" +ENV MNT="/mnt/" +#COPY /etc/ssl/certs /etc/ssl +COPY --from=certs /etc/ssl/certs /etc/ssl/certs +ENTRYPOINT ["/main/exec"] +' +echo "$DOCKERFILE" > "$dockfile" +} + +main