From 3ee982d27a83db71f6ad8a9ffa5c62fb94e9aba2 Mon Sep 17 00:00:00 2001 From: "Andrew N. Shalaev" Date: Thu, 20 Oct 2016 17:11:40 +0500 Subject: [PATCH] chore: add droneio support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit paperclip v5.0 требует rails >= v4.2 и aws-sdk > v2 --- .drone.yml | 33 ++++++++++++ Appraisals | 2 +- Gemfile | 6 ++- Makefile | 32 ------------ README.md | 4 +- .../amazon_assets/amazon_assets_helper.rb | 5 +- apress-amazon_assets.gemspec | 2 +- dip.yml | 50 +++++++++++++++++++ docker-compose.development.yml | 18 +++++++ docker-compose.drone.yml | 13 +++++ docker-compose.yml | 19 +++++++ .../amazon_assets_helper_spec.rb | 17 +++++++ spec/internal/config/.gitignore | 1 - spec/internal/config/database.yml | 5 ++ 14 files changed, 167 insertions(+), 40 deletions(-) create mode 100644 .drone.yml delete mode 100644 Makefile create mode 100644 dip.yml create mode 100644 docker-compose.development.yml create mode 100644 docker-compose.drone.yml create mode 100644 docker-compose.yml create mode 100644 spec/helpers/apress/amazon_assets/amazon_assets_helper_spec.rb delete mode 100644 spec/internal/config/.gitignore create mode 100644 spec/internal/config/database.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..0021794 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,33 @@ +matrix: + include: + - DOCKER_RUBY_VERSION: "2.2" + RUBY_IMAGE_TAG: "2.2-1" + + - DOCKER_RUBY_VERSION: "1.9.3" + RUBY_IMAGE_TAG: "1.9.3-2" + +build: + image: abakpress/dind:1 + privileged: true + volumes: + - /home/data/drone/images:/images + - /home/data/drone/gems:/bundle + - /home/data/drone/key_cache:/ssh_keys + environment: + - COMPOSE_FILE_EXT=drone + - RAILS_ENV=test + - POSTGRES_IMAGE_TAG=9.3 + commands: + - wrapdocker docker -v + + - if [ ! -e /images/ssh-agent.tar ]; then docker pull whilp/ssh-agent; docker save whilp/ssh-agent > /images/ssh-agent.tar; fi + - if [ ! -e /images/ruby_$RUBY_IMAGE_TAG.tar ]; then docker pull abakpress/ruby:$RUBY_IMAGE_TAG; docker save abakpress/ruby:$RUBY_IMAGE_TAG > /images/ruby_$RUBY_IMAGE_TAG.tar; fi + - if [ ! -e /images/postgres_$POSTGRES_IMAGE_TAG.tar ]; then docker pull abakpress/postgres:$POSTGRES_IMAGE_TAG; docker save abakpress/postgres:$POSTGRES_IMAGE_TAG > /images/postgres_$POSTGRES_IMAGE_TAG.tar; fi + + - docker load -i /images/ssh-agent.tar + - docker load -i /images/ruby_$RUBY_IMAGE_TAG.tar + - docker load -i /images/postgres_$POSTGRES_IMAGE_TAG.tar + + - dip ssh add -T -v /ssh_keys -k /ssh_keys/id_rsa + - dip provision + - dip rspec diff --git a/Appraisals b/Appraisals index 157ddcd..5539a9a 100644 --- a/Appraisals +++ b/Appraisals @@ -3,7 +3,7 @@ appraise 'rails3.1' do gem 'test_after_commit', '~> 0.2.3', require: false gem "active_support-lazy_load_patch", require: false gem 'strong_parameters', '>= 0.2' -end +end if RUBY_VERSION < '2' appraise 'rails3.2' do gem 'rails', '~> 3.2.0' diff --git a/Gemfile b/Gemfile index 8dd80bd..eeaa9f6 100644 --- a/Gemfile +++ b/Gemfile @@ -2,5 +2,9 @@ source 'https://gems.railsc.ru' source 'https://rubygems.org' # Specify your gem's dependencies in apress-amazon_assets.gemspec -gem 'mime-types', '< 3.0' if RUBY_VERSION < '2' +if RUBY_VERSION < '2' + gem 'mime-types', '< 3.0' + gem 'pg', '< 0.19' +end + gemspec diff --git a/Makefile b/Makefile deleted file mode 100644 index f994ecd..0000000 --- a/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -RAILS_ENV = test -BUNDLE = RAILS_ENV=${RAILS_ENV} bundle -BUNDLE_OPTIONS = -j 2 -RSPEC = rspec -APPRAISAL = appraisal - -all: test - -test: config/database bundler/install appraisal/install - ${BUNDLE} exec ${APPRAISAL} ${RSPEC} spec 2>&1 - -config/database: - touch spec/internal/config/database.yml - echo 'test:' > spec/internal/config/database.yml - echo ' adapter: postgresql' >> spec/internal/config/database.yml - echo ' database: docker' >> spec/internal/config/database.yml - echo ' username: docker' >> spec/internal/config/database.yml - echo ' host: localhost' >> spec/internal/config/database.yml - echo ' min_messages: warning' >> spec/internal/config/database.yml - -bundler/install: - if ! gem list bundler -i > /dev/null; then \ - gem install bundler; \ - fi - ${BUNDLE} install ${BUNDLE_OPTIONS} - -appraisal/install: - ${BUNDLE} exec ${APPRAISAL} install - -clean: - -rm -rf gemfiles - -rm -rf Gemfile.lock diff --git a/README.md b/README.md index 2704efb..755ca56 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Apress::AmazonAssets -[![Dolly](http://dolly.railsc.ru/badges/abak-press/apress-amazon_assets/master)](http://dolly.railsc.ru/projects/30/builds/latest/?ref=master) +[![Build Status](https://drone.railsc.ru/api/badges/abak-press/apress-amazon_assets/status.svg)](https://drone.railsc.ru/abak-press/apress-amazon_assets) [![Code Climate](https://codeclimate.com/repos/543e65e6e30ba041d401e98d/badges/fd82abeaab68a66be573/gpa.svg)](https://codeclimate.com/repos/543e65e6e30ba041d401e98d/feed) Гем позволяет хранить файлы на Amazon S3. @@ -44,7 +44,7 @@ end Вначале файлы загружаются локально на сервер и потом через resque загружаются на амазон. Очередь resque называется `upload`. -В проектном crontab необходимо вызывать автоочистку через rake задачу +В проектном crontab необходимо вызывать автоочистку через rake задачу ``` rake amazon:private_assets:autoclean diff --git a/app/helpers/apress/amazon_assets/amazon_assets_helper.rb b/app/helpers/apress/amazon_assets/amazon_assets_helper.rb index 84215ea..0aecd03 100644 --- a/app/helpers/apress/amazon_assets/amazon_assets_helper.rb +++ b/app/helpers/apress/amazon_assets/amazon_assets_helper.rb @@ -1,7 +1,8 @@ module Apress module AmazonAssets module AmazonAssetsHelper - # Виджет прикрепления/удаления файлов + DEFAULT_ATTACHMENT_FIELDS_PATH = 'apress/amazon_assets/attachments_fields'.freeze + # Public: виджет прикрепления/удаления файлов # # form - ActionView::Helpers::FormBuilder # options - Hash @@ -14,7 +15,7 @@ module AmazonAssetsHelper # # Returns String def attachments_fields(form, options = {}) - options[:path] ||= 'apress/amazon_assets/attachments_fields' + options[:path] ||= DEFAULT_ATTACHMENT_FIELDS_PATH if options[:attach_to] file_field_index = options[:attachments] ? options[:attachments].size : 0 diff --git a/apress-amazon_assets.gemspec b/apress-amazon_assets.gemspec index 2db8500..ab9ee20 100644 --- a/apress-amazon_assets.gemspec +++ b/apress-amazon_assets.gemspec @@ -22,7 +22,7 @@ Gem::Specification.new do |spec| spec.add_runtime_dependency 'rails', '>= 3.1.12', '< 5.0' spec.add_runtime_dependency 'pg' - spec.add_runtime_dependency 'paperclip', '>= 4.2' + spec.add_runtime_dependency 'paperclip', '>= 4.2', '< 5' spec.add_runtime_dependency 'resque-integration' spec.add_runtime_dependency 'stringex' spec.add_runtime_dependency 'aws-sdk', '>= 1.6', '< 2.0' diff --git a/dip.yml b/dip.yml new file mode 100644 index 0000000..c1b8efc --- /dev/null +++ b/dip.yml @@ -0,0 +1,50 @@ +version: '1' + +environment: + DOCKER_RUBY_VERSION: 1.9.3 + RUBY_IMAGE_TAG: 1.9.3-2 + POSTGRES_IMAGE_TAG: 9.3 + COMPOSE_FILE_EXT: development + RAILS_ENV: test + APRESS_GEMS_CREDENTIALS: "" + +compose: + files: + - docker-compose.yml + - docker-compose.${COMPOSE_FILE_EXT}.yml + +interaction: + sh: + service: app + + irb: + service: app + command: irb + + bundle: + service: app + command: bundle + + rake: + service: app + command: bundle exec rake + + appraisal: + service: app + command: bundle exec appraisal + + rspec: + service: app + command: bundle exec appraisal bundle exec rspec + + clean: + service: app + command: rm -f Gemfile.lock gemfiles/*.gemfile.* + +provision: + - docker volume create --name bundler_data + - dip bundle config --local https://gems.railsc.ru/ ${APRESS_GEMS_CREDENTIALS} + - dip bundle install + - dip sh mkdir -p gemfiles/.bundle + - dip sh ln -sf ../../.bundle/config /app/gemfiles/.bundle/config + - dip appraisal install diff --git a/docker-compose.development.yml b/docker-compose.development.yml new file mode 100644 index 0000000..94f5fb5 --- /dev/null +++ b/docker-compose.development.yml @@ -0,0 +1,18 @@ +version: '2' + +services: + app: + volumes: + - .:/app + - ../:/localgems + - ssh-data:/ssh:ro + - bundler-data:/bundle + +volumes: + ssh-data: + external: + name: ssh_data + + bundler-data: + external: + name: bundler_data diff --git a/docker-compose.drone.yml b/docker-compose.drone.yml new file mode 100644 index 0000000..81b4446 --- /dev/null +++ b/docker-compose.drone.yml @@ -0,0 +1,13 @@ +version: '2' + +services: + app: + volumes: + - .:/app + - /bundle:/bundle + - ssh-data:/ssh:ro + +volumes: + ssh-data: + external: + name: ssh_data diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b5abf17 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +version: '2' + +services: + app: + image: abakpress/ruby:$RUBY_IMAGE_TAG + environment: + - BUNDLE_PATH=/bundle/$DOCKER_RUBY_VERSION + - SSH_AUTH_SOCK=/ssh/auth/sock + - TEST_DB_HOST=db + - TEST_DB_NAME=docker + - TEST_DB_USERNAME=postgres + command: bash + depends_on: + - db + + db: + image: abakpress/postgres:$POSTGRES_IMAGE_TAG + environment: + - POSTGRES_DB=docker diff --git a/spec/helpers/apress/amazon_assets/amazon_assets_helper_spec.rb b/spec/helpers/apress/amazon_assets/amazon_assets_helper_spec.rb new file mode 100644 index 0000000..4b03361 --- /dev/null +++ b/spec/helpers/apress/amazon_assets/amazon_assets_helper_spec.rb @@ -0,0 +1,17 @@ +# coding: utf-8 +require 'spec_helper' + +RSpec.describe Apress::AmazonAssets::AmazonAssetsHelper, type: :helper do + describe '#attachments_fields' do + let(:form) { double(ActionView::Helpers::FormBuilder) } + + let(:options) { {attachments: [], max_size: 0, max_count: 0, attach_to: nil, permitted_type: []} } + + it do + expect(helper).to receive(:render).with( + described_class::DEFAULT_ATTACHMENT_FIELDS_PATH, form: form, options: options + ) + helper.attachments_fields(form, options) + end + end +end diff --git a/spec/internal/config/.gitignore b/spec/internal/config/.gitignore deleted file mode 100644 index 01bb46d..0000000 --- a/spec/internal/config/.gitignore +++ /dev/null @@ -1 +0,0 @@ -database.yml \ No newline at end of file diff --git a/spec/internal/config/database.yml b/spec/internal/config/database.yml new file mode 100644 index 0000000..c2fc41f --- /dev/null +++ b/spec/internal/config/database.yml @@ -0,0 +1,5 @@ +test: + adapter: postgresql + host: <%= ENV.fetch("TEST_DB_HOST", "localhost") %> + database: <%= ENV.fetch("TEST_DB_NAME", "docker") %> + username: <%= ENV.fetch("TEST_DB_USERNAME", "docker") %>