diff --git a/scripts/Dockerfile b/scripts/Dockerfile index f2e750710b69b3441a649fb02567a4a6ce271e86..6d00d5ead35eef20f5ca945605c002445e4e047d 100644 --- a/scripts/Dockerfile +++ b/scripts/Dockerfile @@ -2,8 +2,32 @@ # applications for cozy-stack. It installs couchdb 2 and the cozy-stack. # It should not be used for hosting your cozy cloud in production. + +# Multi-stage image: this step builds cozy-stack +FROM golang:1.11 as build +WORKDIR /go/src/github.com/cozy/cozy-stack + +# MailHog +ENV MAILHOG_VERSION 1.0.0 +ENV MAILHOG_SRC_URL https://github.com/mailhog/MailHog/releases/download/v$MAILHOG_VERSION/MailHog_linux_amd64 +ENV MAILHOG_SRC_SHA256 ba921e04438e176c474d533447ae64707ffcdd1230f0153f86cb188d348f25c0 +RUN set -eu; curl -fsSL "$MAILHOG_SRC_URL" -o MailHog \ + && echo "$MAILHOG_SRC_SHA256 MailHog" | sha256sum -c - \ + && chmod +x MailHog + +# Build cozy-stack +COPY . . +RUN go get -d -v ./... +RUN ./scripts/build.sh dev + + +# Multi-stage image: the main image FROM debian:stretch-slim +# cozy-stack +ENV COZY_STACK_HOST cozy.tools +ENV COZY_STACK_PORT 8080 +ENV COZY_STACK_PATH cozy-stack # CouchDB ENV COUCHDB_VERSION 2.3.0 @@ -12,7 +36,8 @@ ENV COUCHDB_SRC_SHA256 0b3868d042b158d9fd2f504804abd93cd22681c033952f832ce846672 ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y --no-install-recommends \ +RUN set -eux; apt-get update \ + && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ curl \ @@ -48,31 +73,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ && printf "[chttpd]\\nbind_address = 0.0.0.0\\n" \ > /usr/local/couchdb/etc/local.ini \ && apt-get autoremove -y && apt-get clean \ - && apt-get install -y libicu57 --no-install-recommends + && mkdir -p /data/cozy-app && mkdir -p /data/cozy-storage ENV PATH $PATH:/usr/local/couchdb/bin -# MailHog -ENV MAILHOG_VERSION 1.0.0 -ENV MAILHOG_SRC_URL https://github.com/mailhog/MailHog/releases/download/v$MAILHOG_VERSION/MailHog_linux_amd64 -ENV MAILHOG_SRC_SHA256 ba921e04438e176c474d533447ae64707ffcdd1230f0153f86cb188d348f25c0 - -RUN curl -fsSL "$MAILHOG_SRC_URL" -o /usr/bin/MailHog \ - && echo "$MAILHOG_SRC_SHA256 /usr/bin/MailHog" | sha256sum -c - - -# cozy-stack -ENV COZY_STACK_HOST cozy.tools -ENV COZY_STACK_PORT 8080 -ENV COZY_STACK_PATH cozy-stack - -COPY ./docker-entrypoint.sh / -COPY ./cozy-app-dev.sh ./cozy-stack /usr/bin/ - -RUN chmod +x /docker-entrypoint.sh \ - /usr/bin/cozy-app-dev.sh \ - /usr/bin/cozy-stack \ - /usr/bin/MailHog \ - && mkdir -p /data/cozy-app && mkdir -p /data/cozy-storage +COPY --from=build \ + /go/src/github.com/cozy/cozy-stack/cozy-stack \ + /go/src/github.com/cozy/cozy-stack/scripts/docker-entrypoint.sh \ + /go/src/github.com/cozy/cozy-stack/scripts/cozy-app-dev.sh \ + /go/src/github.com/cozy/cozy-stack/MailHog \ + /usr/bin/ -EXPOSE 8080 8025 5984 -ENTRYPOINT ["/docker-entrypoint.sh"] +EXPOSE 8080 6060 8025 5984 +ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] diff --git a/scripts/build.sh b/scripts/build.sh index d642564e1216cb6aeeadae6b07fcdf8b85d92c5b..0f17f7de234a948e42ff1a4fbacc55de043f46e1 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -38,36 +38,6 @@ usage() { echo -e " can be \"production\" or \"development\". default: \"${COZY_ENV_DFL}\"" } -do_prepare_ldflags() { - eval "$(go env)" - - VERSION_OS_ARCH="${GOOS}-${GOARCH}" - if [ -z "${VERSION_STRING}" ]; then - VERSION_STRING=$(git -C "${WORK_DIR}" --work-tree="${WORK_DIR}" \ - describe --tags --dirty 2> /dev/null) - - if [ -z "${VERSION_STRING}" ]; then - VERSION_STRING="v0-$(git -C "${WORK_DIR}" rev-parse --short HEAD)" - echo_wrn "No tag has been found to version the stack, using \"${VERSION_STRING}\" as version number" - fi - - if ! git -C "${WORK_DIR}" diff --exit-code HEAD &>/dev/null; then - if [ "${COZY_ENV}" == "production" ]; then - echo_err "Can not build a production release in a dirty work-tree" - exit 1 - fi - VERSION_STRING="${VERSION_STRING}-dirty" - fi - - if [ "${COZY_ENV}" == "development" ]; then - VERSION_STRING="${VERSION_STRING}-dev" - fi - fi - - BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - BUILD_MODE="${COZY_ENV}" -} - # The version string is deterministic and reflects entirely the state # of the working-directory from which the release is built from. It is # generated using the following format: @@ -90,18 +60,16 @@ do_prepare_ldflags() { # SHA256 checksum of the binary is also generated in a file named # "cozy-stack-${VERSION_STRING}.sha256". do_release() { - check_env - + do_assets do_build - openssl dgst -sha256 -hex "${BINARY}" > "${BINARY}.sha256" + openssl dgst -sha256 -hex "${BINARY}" > "${BINARY}.sha256" printf "%s\t" "${BINARY}" sed -E 's/SHA256\((.*)\)= ([a-f0-9]+)$/\2/g' < "${BINARY}.sha256" } do_install() { check_env - do_prepare_ldflags printf "installing cozy-stack in %s... " "$(go env GOPATH)" @@ -114,9 +82,7 @@ do_install() { do_build() { check_env - do_prepare_ldflags - do_assets if [ -z "${1}" ]; then BINARY="$(pwd)/cozy-stack-${VERSION_OS_ARCH}-${VERSION_STRING}" @@ -136,10 +102,40 @@ do_build() { echo "ok" } +do_prepare_ldflags() { + eval "$(go env)" + + VERSION_OS_ARCH="${GOOS}-${GOARCH}" + if [ -z "${VERSION_STRING}" ]; then + VERSION_STRING=$(git -C "${WORK_DIR}" --work-tree="${WORK_DIR}" \ + describe --tags --dirty 2> /dev/null) + + if [ -z "${VERSION_STRING}" ]; then + VERSION_STRING="v0-$(git -C "${WORK_DIR}" rev-parse --short HEAD)" + echo_wrn "No tag has been found to version the stack, using \"${VERSION_STRING}\" as version number" + fi + + if ! git -C "${WORK_DIR}" diff --exit-code HEAD &>/dev/null; then + if [ "${COZY_ENV}" == "production" ]; then + echo_err "Can not build a production release in a dirty work-tree" + exit 1 + fi + VERSION_STRING="${VERSION_STRING}-dirty" + fi + + if [ "${COZY_ENV}" == "development" ]; then + VERSION_STRING="${VERSION_STRING}-dev" + fi + fi + + BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + BUILD_MODE="${COZY_ENV}" +} + do_assets() { tx --root "${WORK_DIR}" pull -a || echo "Do you have configured transifex?" printf "executing go generate...\n" - go get -u github.com/cozy/cozy-stack/pkg/statik + go get github.com/cozy/cozy-stack/pkg/statik pushd "${WORK_DIR}" > /dev/null go generate ./web popd > /dev/null @@ -238,7 +234,7 @@ case "${1}" in ;; dev) - COZY_ENV=development do_build scripts/cozy-stack + COZY_ENV=development do_build cozy-stack ;; *) diff --git a/scripts/cozy-app-dev.sh b/scripts/cozy-app-dev.sh index 5a605d8c375aa6b649ea1908cd6b0f14641ccd53..eb231a80599f8a66cbcd839447c271a1344876f6 100755 --- a/scripts/cozy-app-dev.sh +++ b/scripts/cozy-app-dev.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -eu +set -e set -m [ -z "${COZY_STACK_HOST}" ] && COZY_STACK_HOST="cozy.tools" diff --git a/scripts/release.sh b/scripts/release.sh index 792c67cd738841bb8b2c29c2badef541fecfb8d3..acabc8b8b67af7a46f082f69a4f7acb3ae6ae8c9 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -5,8 +5,7 @@ RELEASE="$(git describe --tags)" go get -u -v ./... -GOOS=linux GOARCH=amd64 ./scripts/build.sh dev -docker build -t "cozy/cozy-app-dev:${RELEASE}" scripts +docker build -t "cozy/cozy-app-dev:${RELEASE}" -f scripts/Dockerfile . docker push "cozy/cozy-app-dev:${RELEASE}" docker tag "cozy/cozy-app-dev:${RELEASE}" cozy/cozy-app-dev docker push cozy/cozy-app-dev