From 674f608c4793f753f0cf9ab0d2c787d2b9c773cc Mon Sep 17 00:00:00 2001 From: Jamil Bou Kheir Date: Thu, 23 Apr 2020 21:46:47 -0700 Subject: [PATCH] docker-compose for functional testing --- .github/workflows/build.yml | 19 ---------- .github/workflows/deploy.yml | 8 ---- .github/workflows/main.yml | 67 +++++++++++++++++++++++++++++++++ .github/workflows/unit-test.yml | 41 -------------------- Dockerfile | 5 ++- docker-compose.dev.yml | 5 +++ docker-compose.test.yml | 5 +++ docker-compose.yml | 44 ++++++++++++++++++++++ mix.exs | 10 ++--- 9 files changed, 129 insertions(+), 75 deletions(-) delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/main.yml delete mode 100644 .github/workflows/unit-test.yml create mode 100644 docker-compose.dev.yml create mode 100644 docker-compose.test.yml create mode 100644 docker-compose.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index bfcc69caf..000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Build -description: 'Build and push docker images.' - -on: - push: - branches: - - master - -jobs: - build-app-image: - runs-on: ubuntu:18.04 - steps: - - uses: actions/checkout@v2 - - name: Build Docker Image - run: | - docker build -t cloudfirellc/cloudfire:${GITHUB_SHA::8} . - - name: Push Docker Image - run: | - docker push cloudfirellc/cloudfire:latest diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 04864f95e..000000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,8 +0,0 @@ -name: Deploy -description: "Deploy images" - -on: - release: created - -jobs: - diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..b216ac527 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,67 @@ +# Steps: +# 1. Unit/Integration Tests +# 2. Build and Push App Image +# 3. Functional Test +name: Test +description: "Unit, Integration, and Functional tests." +on: + - push +jobs: + # 1. Unit/Integration Test + unit-integration-test: + runs-on: ubuntu-18.04 + env: + MIX_ENV: test + POSTGRES_HOST: localhost + services: + postgres: + image: postgres:12 + ports: + - 5432:5432 + env: + POSTGRES_PASSWORD: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - uses: actions/checkout@v2 + - name: Run Static Tests + uses: actions/setup-elixir@v1 + with: + elixir-version: 1.10.2 + otp-version: 22.3.2 + - name: Install Dependencies + run: mix deps.get --only test + - name: Setup Database + run: | + mix ecto.create + mix ecto.migrate + - name: Run Tests + run: mix test + + # 2. Build and Push App Image + build-app-image: + env: + TEST_IMAGE: docker.pkg.github.com/CloudFire-LLC/cloudfire-ce/cloudfire:${GITHUB_SHA::8} + runs-on: ubuntu:18.04 + steps: + - uses: actions/checkout@v2 + - name: Build Docker Image + run: docker build -t $TEST_IMAGE -f Dockerfile . + - name: Push Docker Image + run: docker push $TEST_IMAGE + + # 3. Functional Test + docker-compose-up: + env: + TEST_IMAGE: docker.pkg.github.com/CloudFire-LLC/cloudfire-ce/cloudfire:${GITHUB_SHA::8} + runs-on: ubuntu:18.04 + steps: + - uses: actions/checkout@v2 + - name: Functional Test + run: | + docker-compose up -d -f docker-compose.yml -f docker-compose.test.yml + echo 'Tests completed!' diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml deleted file mode 100644 index e5a954013..000000000 --- a/.github/workflows/unit-test.yml +++ /dev/null @@ -1,41 +0,0 @@ -# Unit test -name: CI - -on: - - push - - pull_request - -jobs: - unit-test: - runs-on: ubuntu-18.04 - env: - MIX_ENV: test - POSTGRES_HOST: localhost - services: - postgres: - image: postgres:12 - ports: - - 5432:5432 - env: - POSTGRES_PASSWORD: postgres - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - uses: actions/checkout@v2 - - name: Run Static Tests - uses: actions/setup-elixir@v1 - with: - elixir-version: 1.10.2 - otp-version: 22.3.2 - - name: Install Dependencies - run: mix deps.get --only test - - name: Setup Database - run: | - mix ecto.create - mix ecto.migrate - - name: Run Tests - run: mix test diff --git a/Dockerfile b/Dockerfile index 53945e644..db056986c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,8 +40,9 @@ COPY $PHOENIX_DIR/lib $PHOENIX_DIR/lib COPY apps/system_engine/lib ./apps/system_engine/ RUN mix compile -# Build release -RUN mix release bundled +# Build releases +RUN mix release cf_phx +RUN mix release system_engine # The built application is now contained in _build/ diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 000000000..cacf23b6e --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,5 @@ +services: + cf-phx: + build: ./ + system-engine: + build: ./ diff --git a/docker-compose.test.yml b/docker-compose.test.yml new file mode 100644 index 000000000..ce711a70d --- /dev/null +++ b/docker-compose.test.yml @@ -0,0 +1,5 @@ +services: + cf-phx: + image: ${TEST_IMAGE} + system-engine: + image: ${TEST_IMAGE} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..d5db62811 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,44 @@ +# The base docker-compose +version: "3.8" +services: + cf-phx: + command: /app/bin/cf_phx start + image: cloudfirellc/cloudfire:latest + environment: + DATABASE_URL: ecto://postgres:postgres@db/cloudfire + + # !! WARNING !! + # Change this for production systems! + # !!!!!!!!!!!!! + SECRET_KEY_BASE: vw5YEoG6Pb7mCQEC41DjJXIB6v1/tOxO+3YLN+5k+PILkcFMN54g22KXZr6o65Bn + ports: + - 4000:4000 + networks: + - cloudfire + + system-engine: + command: /app/bin/system_engine start + image: cloudfirellc/cloudfire:latest + networks: + - cloudfire + + db: + networks: + - cloudfire + image: postgres:12 + volumes: + - pg-data:/var/lib/postgresql/data + environment: + # !! WARNING !! + # Change this for production systems! + # !!!!!!!!!!!!! + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + +volumes: + pg-data: + +networks: + cloudfire: diff --git a/mix.exs b/mix.exs index a3854a355..aa4601c09 100644 --- a/mix.exs +++ b/mix.exs @@ -8,11 +8,11 @@ defmodule CloudfireUmbrella.MixProject do start_permanent: Mix.env() == :prod, deps: deps(), releases: [ - bundled: [ - applications: [ - cf_phx: :permanent, - system_engine: :permanent - ] + cf_phx: [ + applications: [cf_phx: :permanent] + ], + system_engine: [ + applications: [system_engine: :permanent] ] ] ]