From 5542621de7a84b69f6166c4aa7aa4d588dc60335 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 9 Nov 2019 20:47:00 +0300 Subject: [PATCH] Add build config --- .circleci/config.yml | 58 ++++++++++++++++++--- .dockerignore | 2 + Makefile | 8 +-- docker/Dockerfile.dev | 6 +++ docker/Dockerfile.prod | 14 +++++ Dockerfile => docker/provide-crystal-alpine | 4 +- 6 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 docker/Dockerfile.dev create mode 100644 docker/Dockerfile.prod rename Dockerfile => docker/provide-crystal-alpine (72%) mode change 100644 => 100755 diff --git a/.circleci/config.yml b/.circleci/config.yml index e5a5681..f0c817b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,55 @@ version: 2.1 + jobs: - build: + build_server: docker: - - image: docker:19.03.4 + - image: alpine:3.10.3 steps: - - setup_remote_docker - checkout - - run: apk add -u make zip git curl - - run: pwd; ls -la; make install - - run: pwd; ls -la; tools/shards install - - run: pwd; ls -la; make spec - - run: pwd; ls -la; make build + - run: ./docker/provide-crystal-alpine + - run: shards install + - run: make spec STAGE=prod + - run: make build STAGE=prod + - persist_to_workspace: + root: build + paths: ['*'] + + build_assets: + docker: + - image: circleci/node:12.13 + steps: + - checkout + - run: npm ci + - run: npm run-script build-prod + - run: ls -la ./public/assets + - persist_to_workspace: + root: public/assets + paths: ['*'] + + build_docker_image: + docker: + - image: docker:19.03 + steps: + - attach_workspace: + at: /tmp/data + - run: ls -la /tmp/data + - checkout + - run: mkdir -p ./build/ + - run: cp /tmp/data/dayoff ./build/dayoff + - run: mkdir -p ./public/assets/ + - run: cp /tmp/data/main.css /tmp/data/main.js ./public/assets/ + - setup_remote_docker + - run: docker build --file ./docker/Dockerfile.prod --tag anwinged/dayoff . + - run: docker login --username "$DOCKER_REG_USERNAME" --password "$DOCKER_REG_PASSWORD" + - run: docker push anwinged/dayoff + +workflows: + version: 2 + test_and_build: + jobs: + - build_server + - build_assets + - build_docker_image: + requires: + - build_server + - build_assets diff --git a/.dockerignore b/.dockerignore index a3607bc..6087e4e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,5 @@ /.crystal/ /.shards/ /coverage/ +/node_modules/ +/var/ \ No newline at end of file diff --git a/Makefile b/Makefile index ceca938..e7bef56 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,13 @@ -PATH := tools:$(PATH) +ifneq ($(STAGE), prod) + PATH := tools:$(PATH) +endif + APP_NAME := dayoff ENTRY_POINT = ./src/$(APP_NAME).cr .PHONY: build-docker build-docker: - docker pull alpine:edge - docker build -t $(APP_NAME)-crystal . + docker build --file docker/Dockerfile.dev --tag $(APP_NAME)-crystal --tag anwinged/$(APP_NAME)-crystal . install-shards: shards install diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev new file mode 100644 index 0000000..9756736 --- /dev/null +++ b/docker/Dockerfile.dev @@ -0,0 +1,6 @@ +FROM alpine:3.10.3 as builder + +COPY ./docker/provide-crystal-alpine /opt/provision/provide-crystal-alpine + +# Install crystal and dev libs +RUN /opt/provision/provide-crystal-alpine diff --git a/docker/Dockerfile.prod b/docker/Dockerfile.prod new file mode 100644 index 0000000..d419fbe --- /dev/null +++ b/docker/Dockerfile.prod @@ -0,0 +1,14 @@ +FROM alpine:3.10.3 + +ENV BASE_PATH /opt/dayoff + +RUN apk add -u tzdata + +COPY ./build/dayoff /app/ +COPY ./public /app/public/ + +WORKDIR /app + +EXPOSE 3000 + +CMD ["/app/dayoff"] diff --git a/Dockerfile b/docker/provide-crystal-alpine old mode 100644 new mode 100755 similarity index 72% rename from Dockerfile rename to docker/provide-crystal-alpine index ce83b24..8b6d920 --- a/Dockerfile +++ b/docker/provide-crystal-alpine @@ -1,7 +1,7 @@ -FROM alpine:3.10.3 as builder +#!/usr/bin/env sh # Install crystal and dev libs -RUN apk add -u \ +apk add -u \ make \ crystal \ shards \