From 796982cb362a8af060286a0997aa1b4a9d83e026 Mon Sep 17 00:00:00 2001 From: Cyril Rohr Date: Thu, 21 May 2020 18:36:09 +0000 Subject: [PATCH 1/5] Enable PullPreview action (pullpreview.com) --- .env.pullpreview | 16 ++++++ .github/workflows/pullpreview.yml | 24 +++++++++ .gitignore | 2 +- docker-compose.pullpreview.yml | 89 +++++++++++++++++++++++++++++++ lib/tasks/admin_generator.rake | 12 +++-- 5 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 .env.pullpreview create mode 100644 .github/workflows/pullpreview.yml create mode 100644 docker-compose.pullpreview.yml diff --git a/.env.pullpreview b/.env.pullpreview new file mode 100644 index 000000000..983db55c9 --- /dev/null +++ b/.env.pullpreview @@ -0,0 +1,16 @@ +SNS_CONFIGURATION_SET=metrics + +SES_ADDRESS=email-smtp.us-east-1.amazonaws.com +SES_USER_NAME= +SES_PASSWORD= + +AWS_ACCESS_KEY_ID=abcd +AWS_SECRET_ACCESS_KEY=efgh + +AWS_S3_BUCKET=bucket +AWS_S3_REGION=us-east-1 + +FULLCONTACT_TOKEN= + +ADMIN_EMAIL=admin@example.com +ADMIN_PASSWORD=password diff --git a/.github/workflows/pullpreview.yml b/.github/workflows/pullpreview.yml new file mode 100644 index 000000000..25067287b --- /dev/null +++ b/.github/workflows/pullpreview.yml @@ -0,0 +1,24 @@ +name: PullPreview +on: + push: + pull_request: + types: [labeled, unlabeled, closed] + +jobs: + deploy: + name: Deploy + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v2 + - uses: pullpreview/action@v3 + with: + admins: crohr,michelson + always_on: master + default_port: 443 + instance_type: medium_2_0 + compose_files: docker-compose.pullpreview.yml + env: + AWS_ACCESS_KEY_ID: "${{ secrets.AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.AWS_SECRET_ACCESS_KEY }}" + AWS_REGION: "us-east-1" diff --git a/.gitignore b/.gitignore index 02a95c722..2b018e89a 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,4 @@ stats.json .DS_Store app/javascript/old-src .envrc - +*.swp diff --git a/docker-compose.pullpreview.yml b/docker-compose.pullpreview.yml new file mode 100644 index 000000000..81b3f97b0 --- /dev/null +++ b/docker-compose.pullpreview.yml @@ -0,0 +1,89 @@ +version: '2.4' + +x-app: &app + build: + context: . + dockerfile: ./Dockerfile + args: + APP_ENV: production + RUBY_VERSION: '2.6.5' + PG_MAJOR: '11' + NODE_MAJOR: '10' + YARN_VERSION: '1.13.0' + BUNDLER_VERSION: '2.0.2' + environment: &env + NODE_ENV: production + RAILS_ENV: ${RAILS_ENV:-production} + SECRET_KEY_BASE: mysecretchangeme + HOST: "${PULLPREVIEW_URL:-http://localhost:3000}" + ASSET_HOST: "${PULLPREVIEW_URL:-http://localhost:3000}" + RAILS_SERVE_STATIC_FILES: "true" + RAILS_LOG_TO_STDOUT: "true" + +x-backend: &backend + <<: *app + env_file: .env.pullpreview + environment: + <<: *env + REDIS_URL: redis://redis:6379/ + DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres + WEB_CONCURRENCY: 2 + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + +services: + seeder: + <<: *backend + command: bundle exec rake db:migrate db:seed admin_generator + restart: on-failure + + rails: + <<: *backend + command: bundle exec rails server -b 0.0.0.0 + ports: + - '3000' + + sidekiq: + <<: *backend + command: bundle exec sidekiq -C config/sidekiq.yml + + postgres: + image: postgres:11.1 + volumes: + - postgres:/var/lib/postgresql/data + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432 + healthcheck: + test: pg_isready -U postgres -h 127.0.0.1 + interval: 5s + + redis: + image: redis:3.2-alpine + volumes: + - redis:/data + ports: + - 6379 + healthcheck: + test: redis-cli ping + interval: 1s + timeout: 3s + retries: 30 + + proxy: + image: caddy:2-alpine + command: "caddy reverse-proxy --from '${PULLPREVIEW_URL}' --to rails:3000" + restart: unless-stopped + depends_on: + - rails + ports: + - "443:443" + +volumes: + postgres: + redis: diff --git a/lib/tasks/admin_generator.rake b/lib/tasks/admin_generator.rake index 1f27adeb5..240cb3126 100644 --- a/lib/tasks/admin_generator.rake +++ b/lib/tasks/admin_generator.rake @@ -1,8 +1,10 @@ # desc "Explaining what the task does" task admin_generator: :environment do app = App.first - app.add_admin(Agent.create( - email: ENV['ADMIN_EMAIL'], - password: ENV['ADMIN_PASSWORD'] - )) -end \ No newline at end of file + if app.app_users.find_by(email: ENV['ADMIN_EMAIL']).nil? + app.add_admin(Agent.create( + email: ENV['ADMIN_EMAIL'], + password: ENV['ADMIN_PASSWORD'] + )) + end +end From f3bd4c3d23b474d877f182464e793c293c21f2eb Mon Sep 17 00:00:00 2001 From: Cyril Rohr Date: Thu, 21 May 2020 19:34:21 +0000 Subject: [PATCH 2/5] Make seeding idempotent --- db/seeds.rb | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index c57fb25c8..a2ebcdb56 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -11,14 +11,16 @@ domain = ENV['HOST'] || 'http://localhost:3000' -app = App.create( - name: 'test app', - domain_url: domain -) +if App.none? + app = App.create( + name: 'test app', + domain_url: domain + ) -Doorkeeper::Application.create( - name: "authapp", - #redirect_uri: "#{domain}/callback" -) + Doorkeeper::Application.create( + name: "authapp", + #redirect_uri: "#{domain}/callback" + ) -AppPackagesCatalog.import unless Rails.env.test? + AppPackagesCatalog.import unless Rails.env.test? +end From 4889705fefccbad64e32ca13dc5f12219489ede4 Mon Sep 17 00:00:00 2001 From: Cyril Rohr Date: Thu, 21 May 2020 20:22:48 +0000 Subject: [PATCH 3/5] Allow to skip subdomain check --- docker-compose.pullpreview.yml | 4 ++++ lib/subdomain_routes.rb | 1 + 2 files changed, 5 insertions(+) diff --git a/docker-compose.pullpreview.yml b/docker-compose.pullpreview.yml index 81b3f97b0..5941ea85f 100644 --- a/docker-compose.pullpreview.yml +++ b/docker-compose.pullpreview.yml @@ -19,6 +19,7 @@ x-app: &app ASSET_HOST: "${PULLPREVIEW_URL:-http://localhost:3000}" RAILS_SERVE_STATIC_FILES: "true" RAILS_LOG_TO_STDOUT: "true" + SKIP_SUBDOMAIN_CHECK: "true" x-backend: &backend <<: *app @@ -79,6 +80,8 @@ services: image: caddy:2-alpine command: "caddy reverse-proxy --from '${PULLPREVIEW_URL}' --to rails:3000" restart: unless-stopped + volumes: + - proxy:/data/caddy depends_on: - rails ports: @@ -87,3 +90,4 @@ services: volumes: postgres: redis: + proxy: diff --git a/lib/subdomain_routes.rb b/lib/subdomain_routes.rb index 6348c434a..b492cce73 100644 --- a/lib/subdomain_routes.rb +++ b/lib/subdomain_routes.rb @@ -17,6 +17,7 @@ def self.matches?(request) class SubdomainOrDomain def self.matches?(request) + return false if ENV.fetch("SKIP_SUBDOMAIN_CHECK", "false") == "true" if request.subdomain.present? && !APP_SUBDOMAINS.include?(request.subdomain) true # elsif request.host != 'www.#{DOMAIN}' From 499cce1b043cbca6327fa63f07ceca9f84d874ef Mon Sep 17 00:00:00 2001 From: Cyril Rohr Date: Tue, 26 May 2020 14:25:28 +0200 Subject: [PATCH 4/5] Remove crohr from pullpreview.yml --- .github/workflows/pullpreview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pullpreview.yml b/.github/workflows/pullpreview.yml index 25067287b..4d74411d8 100644 --- a/.github/workflows/pullpreview.yml +++ b/.github/workflows/pullpreview.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v2 - uses: pullpreview/action@v3 with: - admins: crohr,michelson + admins: michelson always_on: master default_port: 443 instance_type: medium_2_0 From ecb0ac7a9895a7040fb20481723b8fec1fd15c2b Mon Sep 17 00:00:00 2001 From: Cyril Rohr Date: Tue, 26 May 2020 14:26:13 +0200 Subject: [PATCH 5/5] Remove useless seed Co-authored-by: Miguel Michelson Martinez --- db/seeds.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index a2ebcdb56..ee6784383 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -17,10 +17,6 @@ domain_url: domain ) - Doorkeeper::Application.create( - name: "authapp", - #redirect_uri: "#{domain}/callback" - ) AppPackagesCatalog.import unless Rails.env.test? end