dockerize/gitea.sh

180 lines
4.1 KiB
Bash
Executable File

# /bin/bash
function main() {
set -e
set -u
thispkg="${PWD##*$GOPATH/}"
thisexec="$(basename "$thispkg")"
function cleanup() {
rm "$dockfile"
}
trap cleanup EXIT
if [ "$(uname -s)" == "Darwin" ]; then
dockfile="$(mktemp -t . tmpXXXX | tail -n 1)"
echo "$dockfile"
else
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() {
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
RUN apk add --no-cache git
WORKDIR /go/'"$thispkg"'
COPY . .
RUN /bin/sh -c "CGO_ENABLED=0 go build -o /go/bin/'"$thisexec"' -a -installsuffix cgo -tags bindata -ldflags '"' -s -w -X \"main.Version=dev\" -X \"main.Tags=bindata\"'"'"
FROM alpine as certs
RUN apk update && apk add ca-certificates
#========================
FROM '"$from"'
RUN apk add --no-cache git
COPY --from=builder /go/'"$thispkg"' /main
COPY --from=builder /go/bin /main
RUN rm -rf /main/vendor /main/modules
RUN mkdir -p /var/log
WORKDIR /main
ENV GOPATH=""
ENV MNT="/mnt/"
COPY --from=certs /etc/ssl/certs /etc/ssl/certs
ENTRYPOINT ["/main/'"$thisexec"'"]
CMD []
'
echo "$DOCKERFILE" > "$dockfile"
}
main $@