瀏覽代碼

Create docker-compose file for CI

Andrew Swistak 6 年之前
父節點
當前提交
132c71dbaa
共有 2 個文件被更改,包括 60 次插入0 次删除
  1. 36 0
      docker-compose.ci.yml
  2. 24 0
      lib/tasks/db/wait_for_init.rake

+ 36 - 0
docker-compose.ci.yml

@@ -0,0 +1,36 @@
+version: "3.7"
+
+services:
+  test_web:
+    build:
+      context: .
+      target: dev
+    depends_on:
+      - db
+      - selenium_firefox
+      - selenium_chrome
+    environment:
+      - RAILS_ENV=test
+      - DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}_test
+      - SELENIUM_CHROME_HOST=selenium_chrome
+      - SELENIUM_FIREFOX_HOST=selenium_firefox
+      - SELENIUM_PORT=4444
+      - APP_HOST_PORT=3000
+    working_dir: /app
+
+  db:
+    image: postgres:11.2-alpine
+    environment:
+      - POSTGRES_DB
+      - POSTGRES_PASSWORD
+      - POSTGRES_USER
+
+  selenium_firefox:
+    image: selenium/standalone-firefox-debug:latest
+    logging:
+      driver: none
+
+  selenium_chrome:
+    image: selenium/standalone-chrome-debug:latest
+    logging:
+      driver: none

+ 24 - 0
lib/tasks/db/wait_for_init.rake

@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+require 'English'
+
+namespace :db do
+  desc 'Waits for database to be available'
+  task :wait_for_init do
+    require 'socket'
+
+    20.times do
+      # postgres://postgres:postgres@db:5432/postgres
+      # we want:                     ^^ ^^^^
+      db_host = ENV['DATABASE_URL'].split(/:|@/)[3]
+      db_port = ENV['DATABASE_URL'].split(/:|@/)[4].to_i
+
+      sock = TCPSocket.new db_host, db_port
+      sock.close
+      break
+    rescue StandardError
+      $stderr.puts "db:wait_for_init: #{$ERROR_INFO}"
+      sleep 6
+    end
+  end
+end