From 05d77287e61f9aead1ae515a44054342c92d4ef3 Mon Sep 17 00:00:00 2001 From: Sebastian <sebastian.mihalache@thinslices.com> Date: Mon, 19 Mar 2018 11:06:08 +0200 Subject: [PATCH] feat(move-to-postgresql): add docker --- Dockerfile-development | 12 ++ packages/xpub-faraday/Dockerfile-development | 12 ++ packages/xpub-faraday/docker-compose.yml | 32 ++++ packages/xpub-faraday/package.json | 9 +- packages/xpub-faraday/scripts/wait-for-it.sh | 178 +++++++++++++++++++ scripts/.DS_Store | Bin 0 -> 6148 bytes scripts/test.sql | 2 + yarn.lock | 133 +++++++++++++- 8 files changed, 370 insertions(+), 8 deletions(-) create mode 100644 Dockerfile-development create mode 100644 packages/xpub-faraday/Dockerfile-development create mode 100644 packages/xpub-faraday/docker-compose.yml create mode 100644 packages/xpub-faraday/scripts/wait-for-it.sh create mode 100644 scripts/.DS_Store create mode 100644 scripts/test.sql diff --git a/Dockerfile-development b/Dockerfile-development new file mode 100644 index 000000000..b93603388 --- /dev/null +++ b/Dockerfile-development @@ -0,0 +1,12 @@ +FROM xpub/xpub:base + +WORKDIR ${HOME} + +COPY package.json yarn.lock ./ +COPY lerna.json .babelrc .eslintignore .eslintrc .prettierrc .stylelintignore .stylelintrc ./ +COPY packages packages +COPY now now + +EXPOSE 3000 + +CMD [] diff --git a/packages/xpub-faraday/Dockerfile-development b/packages/xpub-faraday/Dockerfile-development new file mode 100644 index 000000000..d9300f6d7 --- /dev/null +++ b/packages/xpub-faraday/Dockerfile-development @@ -0,0 +1,12 @@ +FROM xpub/xpub:base + +WORKDIR ../../ + +COPY package.json yarn.lock ./ +COPY lerna.json .babelrc .eslintignore .eslintrc .prettierrc .stylelintignore .stylelintrc ./ +COPY packages packages +COPY now now + +EXPOSE 3000 + +CMD [] diff --git a/packages/xpub-faraday/docker-compose.yml b/packages/xpub-faraday/docker-compose.yml new file mode 100644 index 000000000..4efaf1775 --- /dev/null +++ b/packages/xpub-faraday/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3' + +services: + app: + build: + context: . + dockerfile: ./Dockerfile-development + command: sh -c "yarn install --frozen-lockfile && ./scripts/wait-for-it.sh postgres:5432 -s -t 40 -- npx pubsweet server" + ports: + - ${PORT:-3000}:3000 + volumes: + - ./:/home/xpub + depends_on: + - postgres + environment: + NODE_ENV: development + PGHOST: postgres + PGUSER: $USER + + postgres: + image: postgres:10 + ports: + - 5432:5432 + environment: + POSTGRES_USER: $USER + volumes: + - postgres-volume:/var/lib/postgresql/data + - ./scripts/test.sql:/docker-entrypoint-initdb.d/test.sql + +volumes: + postgres-volume: + diff --git a/packages/xpub-faraday/package.json b/packages/xpub-faraday/package.json index 7a7955bd8..1be108716 100644 --- a/packages/xpub-faraday/package.json +++ b/packages/xpub-faraday/package.json @@ -12,7 +12,6 @@ "@pubsweet/ui": "^3.0.0", "aws-sdk": "^2.197.0", "babel-core": "^6.26.0", - "component-aws-download": "0.0.1", "config": "^1.26.2", "dotenv": "^5.0.0", "flavors": "^3.3.1", @@ -26,10 +25,9 @@ "prop-types": "^15.5.10", "pubsweet": "^1.1.1", "pubsweet-client": "^2.2.2", - "pubsweet-component-invite": "^0.0.1", "pubsweet-component-login": "^1.1.0", "pubsweet-component-signup": "^1.0.0", - "pubsweet-server": "^1.0.1", + "pubsweet-server": "^2.0.1", "react": "^16.2.0", "react-dnd": "^2.5.4", "react-dnd-html5-backend": "^2.5.4", @@ -45,7 +43,6 @@ "winston": "^2.4.0", "xpub-connect": "^0.0.3", "xpub-edit": "^0.0.3", - "xpub-faraday-server": "^0.0.1", "xpub-journal": "^0.0.3", "xpub-selectors": "^0.0.3", "xpub-styleguide": "^0.0.3", @@ -76,7 +73,9 @@ "scripts": { "setupdb": "pubsweet setupdb ./", "reset": "pubsweet setupdb --clobber ./", - "start": "pubsweet start", + "start": "docker-compose up", + "start:services": "docker-compose up postgres", + "server": "pubsweet server", "setupdb-now": "pubsweet setupdb --username admin --email admin@mailinator.com --password admin123 --clobber ./", "start-now": "echo $secret > config/local-development.json && npm run setupdb-now && npm run start", "build": "NODE_ENV=production pubsweet build" diff --git a/packages/xpub-faraday/scripts/wait-for-it.sh b/packages/xpub-faraday/scripts/wait-for-it.sh new file mode 100644 index 000000000..ea896a848 --- /dev/null +++ b/packages/xpub-faraday/scripts/wait-for-it.sh @@ -0,0 +1,178 @@ +#!/usr/bin/env bash +# Use this script to test if a given TCP host/port are available + +cmdname=$(basename $0) + +echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } + +usage() +{ + cat << USAGE >&2 +Usage: + $cmdname host:port [-s] [-t timeout] [-- command args] + -h HOST | --host=HOST Host or IP under test + -p PORT | --port=PORT TCP port under test + Alternatively, you specify the host and port as host:port + -s | --strict Only execute subcommand if the test succeeds + -q | --quiet Don't output any status messages + -t TIMEOUT | --timeout=TIMEOUT + Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit 1 +} + +wait_for() +{ + if [[ $TIMEOUT -gt 0 ]]; then + echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT" + else + echoerr "$cmdname: waiting for $HOST:$PORT without a timeout" + fi + start_ts=$(date +%s) + while : + do + if [[ $ISBUSY -eq 1 ]]; then + nc -z $HOST $PORT + result=$? + else + (echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1 + result=$? + fi + if [[ $result -eq 0 ]]; then + end_ts=$(date +%s) + echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds" + break + fi + sleep 1 + done + return $result +} + +wait_for_wrapper() +{ + # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 + if [[ $QUIET -eq 1 ]]; then + timeout $BUSYTIMEFLAG $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & + else + timeout $BUSYTIMEFLAG $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & + fi + PID=$! + trap "kill -INT -$PID" INT + wait $PID + RESULT=$? + if [[ $RESULT -ne 0 ]]; then + echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT" + fi + return $RESULT +} + +# process arguments +while [[ $# -gt 0 ]] +do + case "$1" in + *:* ) + hostport=(${1//:/ }) + HOST=${hostport[0]} + PORT=${hostport[1]} + shift 1 + ;; + --child) + CHILD=1 + shift 1 + ;; + -q | --quiet) + QUIET=1 + shift 1 + ;; + -s | --strict) + STRICT=1 + shift 1 + ;; + -h) + HOST="$2" + if [[ $HOST == "" ]]; then break; fi + shift 2 + ;; + --host=*) + HOST="${1#*=}" + shift 1 + ;; + -p) + PORT="$2" + if [[ $PORT == "" ]]; then break; fi + shift 2 + ;; + --port=*) + PORT="${1#*=}" + shift 1 + ;; + -t) + TIMEOUT="$2" + if [[ $TIMEOUT == "" ]]; then break; fi + shift 2 + ;; + --timeout=*) + TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + CLI=("$@") + break + ;; + --help) + usage + ;; + *) + echoerr "Unknown argument: $1" + usage + ;; + esac +done + +if [[ "$HOST" == "" || "$PORT" == "" ]]; then + echoerr "Error: you need to provide a host and port to test." + usage +fi + +TIMEOUT=${TIMEOUT:-15} +STRICT=${STRICT:-0} +CHILD=${CHILD:-0} +QUIET=${QUIET:-0} + +# check to see if timeout is from busybox? +# check to see if timeout is from busybox? +TIMEOUT_PATH=$(realpath $(which timeout)) +if [[ $TIMEOUT_PATH =~ "busybox" ]]; then + ISBUSY=1 + BUSYTIMEFLAG="-t" +else + ISBUSY=0 + BUSYTIMEFLAG="" +fi + +if [[ $CHILD -gt 0 ]]; then + wait_for + RESULT=$? + exit $RESULT +else + if [[ $TIMEOUT -gt 0 ]]; then + wait_for_wrapper + RESULT=$? + else + wait_for + RESULT=$? + fi +fi + +if [[ $CLI != "" ]]; then + if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then + echoerr "$cmdname: strict mode, refusing to execute subprocess" + exit $RESULT + fi + exec "${CLI[@]}" +else + exit $RESULT +fi + diff --git a/scripts/.DS_Store b/scripts/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1d1dda64db23f69cb6cd32c1bef2096743e0457a GIT binary patch literal 6148 zcmeHK%}(1u5S|SI>_$RH;y@)1mU`fVs#HL7wF2~n)T&11K-*x;7O`a6U~kAFie&Ks zJOEswyhq_7`Xbz!+1(&e$`J(Bj5Pa=XJ=;ZZ>{|S0MY43p8y;HuuutWHa7nd>L;C$ zn(+_{RpTR+a0F>MC=Vy1+3^|~pt-X^LX0yf;lcccX&z$VZFra_rEE6;irQ3tdS=$L z-!<&UT*Ln9_ws=+1KBS-LD6-V{3MFQpx8|!+1rV;tu#K4voFPVAmd_>f_L&f#Q<#w z;rApSbe)BbJd;6^#f7S;Yy8+vvM3*P@_rVTD&7=V_SZo6u#WY?+piR-wq<vn#o=(h zy}shEwOXSUci3(>(OzwhMz&?WU;g~<SO4Vn?EK>L_tl?kl?4KSS|#%a$8dwj1S!XU zk)?TdfPLe<aXce4zzi@0Z;S!6j9HC0_TK!u%m6d+{0z|g;Gz<G1}lwf>A;4LkJMi$ zBte_*5`?Zn&tRnydr*W<MbxRnTrq@BN55<0JcE@+oen~cjCIV&!rV}V8Xf(v3J2k7 z<dzv=1|Bmor5_#I|F@pL|36ORCuV>d_^%ic^-X`XgP&yf)`^d!z1BtDM<t=SO5=SB j8fq)XSlWsgQI(+IB?HkjSZPEL3LgX%4cssTFUr6j#}Q)y literal 0 HcmV?d00001 diff --git a/scripts/test.sql b/scripts/test.sql new file mode 100644 index 000000000..4fba30b77 --- /dev/null +++ b/scripts/test.sql @@ -0,0 +1,2 @@ +CREATE DATABASE test; + diff --git a/yarn.lock b/yarn.lock index a20d4b3bb..a77b0205c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,6 +40,13 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/runtime@^7.0.0-beta.38": + version "7.0.0-beta.41" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.41.tgz#776ce13391b8154ccfdea71018a47b63e4d97e74" + dependencies: + core-js "^2.5.3" + regenerator-runtime "^0.11.1" + "@babel/template@7.0.0-beta.40": version "7.0.0-beta.40" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.40.tgz#034988c6424eb5c3268fe6a608626de1f4410fc8" @@ -400,6 +407,14 @@ apollo-tracing@^0.1.0: dependencies: graphql-extensions "^0.0.x" +apollo-upload-server@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-4.0.2.tgz#1a042e413d09d4bd5529738f9e0af45ba553cc2d" + dependencies: + "@babel/runtime" "^7.0.0-beta.38" + busboy "^0.2.14" + object-path "^0.11.4" + apollo-utilities@^1.0.0, apollo-utilities@^1.0.1: version "1.0.8" resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.8.tgz#74d797d38953d2ba35e16f880326e2abcbc8b016" @@ -1649,6 +1664,10 @@ buffer-from@0.1.1: dependencies: is-array-buffer-x "^1.0.13" +buffer-writer@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-1.0.1.tgz#22a936901e3029afcd7547eb4487ceb697a3bf08" + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1676,7 +1695,7 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -busboy@^0.2.11: +busboy@^0.2.11, busboy@^0.2.14: version "0.2.14" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" dependencies: @@ -5463,6 +5482,10 @@ js-base64@^2.1.9: version "2.4.3" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" +js-string-escape@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -6784,6 +6807,10 @@ object-keys@^1.0.11, object-keys@^1.0.6, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-path@^0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" + object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" @@ -6963,6 +6990,10 @@ package-json@^4.0.1: registry-url "^3.0.3" semver "^5.1.0" +packet-reader@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-0.3.1.tgz#cd62e60af8d7fea8a705ec4ff990871c46871f27" + pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -7172,6 +7203,42 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" +pg-connection-string@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7" + +pg-pool@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.3.tgz#c022032c8949f312a4f91fb6409ce04076be3257" + +pg-types@~1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.12.1.tgz#d64087e3903b58ffaad279e7595c52208a14c3d2" + dependencies: + postgres-array "~1.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.0" + postgres-interval "^1.1.0" + +pg@^7.4.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/pg/-/pg-7.4.1.tgz#f3411c8ddf9f692322fe05e7017a1888e47f78f1" + dependencies: + buffer-writer "1.0.1" + js-string-escape "1.0.1" + packet-reader "0.3.1" + pg-connection-string "0.1.3" + pg-pool "~2.0.3" + pg-types "~1.12.1" + pgpass "1.x" + semver "4.3.2" + +pgpass@1.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306" + dependencies: + split "^1.0.0" + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -7542,6 +7609,24 @@ postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.13, postcss@^6.0.14, postcss@^6.0. source-map "^0.6.1" supports-color "^5.2.0" +postgres-array@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.2.tgz#8e0b32eb03bf77a5c0a7851e0441c169a256a238" + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + +postgres-date@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz#e2d89702efdb258ff9d9cee0fe91bd06975257a8" + +postgres-interval@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.1.tgz#acdb0f897b4b1c6e496d9d4e0a853e1c428f06f0" + dependencies: + xtend "^4.0.0" + pouchdb-abstract-mapreduce@6.4.3: version "6.4.3" resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-6.4.3.tgz#0310053812d16ff9545a3db43f5e38a67a0133d7" @@ -8083,7 +8168,7 @@ pubsweet-component-signup@^1.0.0: react-router "^4.2.0" redux "^3.7.2" -pubsweet-server@^1.0.1, pubsweet-server@^1.1.1: +pubsweet-server@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pubsweet-server/-/pubsweet-server-1.1.1.tgz#89f16393bd947cec8cb5131b770101f21ef35911" dependencies: @@ -8126,6 +8211,44 @@ pubsweet-server@^1.0.1, pubsweet-server@^1.1.1: uuid "^3.0.1" winston "^2.2.0" +pubsweet-server@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pubsweet-server/-/pubsweet-server-2.0.1.tgz#28ee42eb457fac67add6593d1278c832807cee22" + dependencies: + "@pubsweet/logger" "^0.2.2" + apollo-server-express "^1.3.2" + apollo-upload-server "^4.0.2" + authsome "0.0.9" + bcrypt "^1.0.2" + bluebird "^3.5.1" + body-parser "^1.15.2" + colors "^1.1.2" + config "^1.26.2" + cookie-parser "^1.4.3" + dotenv "^4.0.0" + express "^4.16.1" + graphql "^0.12.3" + graphql-tools "^2.18.0" + helmet "^3.8.1" + http-status-codes "^1.0.6" + joi "^13.1.0" + jsonwebtoken "^7.1.7" + lodash "^4.0.0" + minimist "^1.2.0" + morgan "^1.8.2" + multer "^1.1.0" + passport "^0.3.2" + passport-anonymous "^1.0.1" + passport-http-bearer "^1.0.1" + passport-local "^1.0.0" + pg "^7.4.1" + promise-queue "^2.2.3" + prompt "^1.0.0" + pubsweet-sse "^0.1.4" + require-relative "^0.8.7" + uuid "^3.0.1" + winston "^2.2.0" + pubsweet-sse@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/pubsweet-sse/-/pubsweet-sse-0.1.4.tgz#1ff38a230143cbd487a8d44afb28a6c4746ee464" @@ -8674,7 +8797,7 @@ regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" -regenerator-runtime@^0.11.0: +regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -9109,6 +9232,10 @@ schema-utils@^0.4.2, schema-utils@^0.4.5: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +semver@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" + semver@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -- GitLab