handsome_fencer-circle_c_i 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +27 -0
  5. data/lib/generators/handsome_fencer.rb +3 -0
  6. data/lib/generators/handsome_fencer/circle_c_i/deploy_key_generator.rb +18 -0
  7. data/lib/generators/handsome_fencer/circle_c_i/exposed_env_files_generator.rb +15 -0
  8. data/lib/generators/handsome_fencer/circle_c_i/install_generator.rb +28 -0
  9. data/lib/generators/handsome_fencer/circle_c_i/obfuscated_env_files_generator.rb +15 -0
  10. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/circle.env +9 -0
  11. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/config.yml +62 -0
  12. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/app/Dockerfile +11 -0
  13. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/app/development.env +9 -0
  14. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/app/production.env +9 -0
  15. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/database/development.env +2 -0
  16. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/web/production.env +9 -0
  17. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/expose_env.rb +3 -0
  18. data/lib/generators/handsome_fencer/circle_c_i/templates/circleci/obfuscate_env.rb +3 -0
  19. data/lib/generators/handsome_fencer/circle_c_i/templates/docker-compose.yml +77 -0
  20. data/lib/generators/handsome_fencer/circle_c_i/templates/lib/tasks/deploy.rake +99 -0
  21. data/lib/handsome_fencer/circle_c_i.rb +8 -0
  22. data/lib/handsome_fencer/circle_c_i/crypto.rb +93 -0
  23. data/lib/handsome_fencer/circle_c_i/railtie.rb +9 -0
  24. data/lib/handsome_fencer/circle_c_i/version.rb +5 -0
  25. data/lib/tasks/handsome_fencer/circle_c_i_tasks.rake +17 -0
  26. metadata +139 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7f1b79823feff3fab032cdd6fd7d10e0638454b4adb5d872427061e774dd804b
4
+ data.tar.gz: f119c0cec97a44590213de00d00f731a2104f9113fa4fb709ae3d061fa707c57
5
+ SHA512:
6
+ metadata.gz: d25c45549f31e162fa7e3ed44b054afb6dfeb74787128b8031857ad2e237191ec7256c3a840e6db1e356b352ccef3653571404b57e540188fbbd30e59a12161c
7
+ data.tar.gz: 970a3754ef7d647b9bbc3d693dcc78c58f39b13ec5e2698877514388c31a9cd72f8b4f84bb4ea3387c9927f89c5653ae0cde8f4697d67f3dbc61d4f4af694d6b
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2018 schadenfred
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # HandsomeFencer::CircleCI
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'handsome_fencer-circle_c_i'
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install handsome_fencer-circle_c_i
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'HandsomeFencer::CircleCI'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ require 'bundler/gem_tasks'
18
+
19
+ require 'rake/testtask'
20
+
21
+ Rake::TestTask.new(:test) do |t|
22
+ t.libs << 'test'
23
+ t.pattern = 'test/**/*_test.rb'
24
+ t.verbose = false
25
+ end
26
+
27
+ task default: :test
@@ -0,0 +1,3 @@
1
+ require_relative 'handsome_fencer/circle_c_i/install_generator.rb'
2
+ require_relative 'handsome_fencer/circle_c_i/deploy_key_generator.rb'
3
+ require_relative 'handsome_fencer/circle_c_i/obfuscated_env_files_generator.rb'
@@ -0,0 +1,18 @@
1
+ require 'handsome_fencer/circle_c_i/crypto'
2
+ module HandsomeFencer
3
+ module CircleCI
4
+
5
+ class DeployKeyGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('templates', __dir__)
7
+ desc "generate deploy key"
8
+
9
+ def generate_deploy_key
10
+ @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
11
+ @salt = '8 octets'
12
+ @new_key = @cipher.random_key
13
+
14
+ create_file ".circleci/deploy.key", Base64.encode64(@new_key)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ require 'handsome_fencer/circle_c_i/crypto'
2
+ module HandsomeFencer
3
+ module CircleCI
4
+
5
+ class ExposedEnvFilesGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('templates', __dir__)
7
+ desc "expose .env files inside .circleci directory"
8
+
9
+ def expose_env_files
10
+ @cipher = HandsomeFencer::CircleCI::Crypto.new
11
+ @cipher.expose
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,28 @@
1
+ require 'handsome_fencer/circle_c_i/crypto'
2
+ module HandsomeFencer
3
+ module CircleCI
4
+
5
+ class InstallGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('templates', __dir__)
7
+ desc "Sets up some necessary files for continuous deployments using docker and CircleCI"
8
+
9
+ def copy_circle_templates
10
+ directory "circleci", ".circleci", recursive: true
11
+ end
12
+
13
+ def copy_deploy_task
14
+ directory 'lib/', 'lib', recursive: true
15
+ end
16
+
17
+ def copy_docker_compose
18
+ copy_file "docker-compose.yml", "docker-compose.yml"
19
+ end
20
+
21
+ def insert_gitignores
22
+ create_file '.gitignore' if File.exist? '.gitignore'
23
+ append_to_file '.gitignore', "\n.circleci/**/*.env"
24
+ append_to_file '.gitignore', "\n.circleci/**/*.key"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ require 'handsome_fencer/circle_c_i/crypto'
2
+ module HandsomeFencer
3
+ module CircleCI
4
+
5
+ class ObfuscatedEnvFilesGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('templates', __dir__)
7
+ desc "obfuscate .env files inside .circleci directory"
8
+
9
+ def obfuscate_env_files
10
+ @cipher = HandsomeFencer::CircleCI::Crypto.new
11
+ @cipher.obfuscate
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ export DOCKERHUB_PASS="set me"
2
+ export DOCKERHUB_EMAIL="set me"
3
+ export DOCKERHUB_USER="set me"
4
+ export PUSH_DEPLOY_TAG=${CIRCLE_PREVIOUS_BUILD_NUM}_${CIRCLE_SHA1:0:7}
5
+ export DEPLOY_TAG=${CIRCLE_BUILD_NUM}_${CIRCLE_SHA1:0:7}
6
+ export DEPLOY_PATH="name of our app"
7
+ export SERVER_HOST="server ip address"
8
+ export SERVER_USER="probably root"
9
+ export SERVER_PORT="probably 22"
@@ -0,0 +1,62 @@
1
+ defaults: &defaults
2
+ working_directory: /tmp
3
+
4
+ version: 2
5
+
6
+ jobs:
7
+
8
+ build:
9
+ machine: true
10
+ steps:
11
+ - checkout
12
+ - run: gem install handsomefencer-environment
13
+ - run: ruby expose_env.rb
14
+ - run: docker-compose build dev_app database
15
+ - run: docker-compose run dev_app bin/rails db:create db:migrate test
16
+
17
+ push:
18
+ docker:
19
+ - image: circleci/ruby:2.5.1-node-browsers
20
+ environment:
21
+ BASH_ENV: .env/circle/deploy.env
22
+ steps:
23
+ - checkout
24
+ - setup_remote_docker
25
+ - run: gem install handsomefencer-environment
26
+ - run: ruby expose_env.rb
27
+ - run: docker-compose up -d --build
28
+ - run:
29
+ name: Tag web image
30
+ command: docker tag $(docker images | grep project_web | awk '{ print $3 }') rennmappe/bacchanal_web:$DEPLOY_TAG
31
+ - run: docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS
32
+ - run: docker push rennmappe/bacchanal_web:$DEPLOY_TAG
33
+
34
+ deploy:
35
+ docker:
36
+ - image: circleci/ruby:2.5.1-node-browsers
37
+ environment:
38
+ BASH_ENV: .env/circle/deploy.env
39
+ steps:
40
+ - checkout
41
+ - add_ssh_keys
42
+ - run: bundle install --without production
43
+ - run: ruby expose_env.rb
44
+ - run: bin/rails docker:deploy
45
+
46
+ workflows:
47
+ version: 2
48
+ build-and-deploy:
49
+ jobs:
50
+ - build
51
+ - push:
52
+ requires:
53
+ - build
54
+ filters:
55
+ branches:
56
+ only: master
57
+ - deploy:
58
+ requires:
59
+ - push
60
+ filters:
61
+ branches:
62
+ only: master
@@ -0,0 +1,11 @@
1
+ FROM ruby:2.5-alpine
2
+
3
+ LABEL maintainer="your-email-here@gmail.com"
4
+
5
+ RUN apk add --no-cache --update build-base linux-headers \
6
+ postgresql-dev nodejs tzdata libxml2-dev libxslt-dev
7
+
8
+ COPY Gemfile* /usr/src/app/
9
+ WORKDIR /usr/src/app
10
+ RUN bundle install
11
+ COPY . /usr/src/app/
@@ -0,0 +1,9 @@
1
+ export DOCKERHUB_PASS="set me"
2
+ export DOCKERHUB_EMAIL="set me"
3
+ export DOCKERHUB_USER="set me"
4
+ export PUSH_DEPLOY_TAG=${CIRCLE_PREVIOUS_BUILD_NUM}_${CIRCLE_SHA1:0:7}
5
+ export DEPLOY_TAG=${CIRCLE_BUILD_NUM}_${CIRCLE_SHA1:0:7}
6
+ export DEPLOY_PATH="name of our app"
7
+ export SERVER_HOST="server ip address"
8
+ export SERVER_USER="probably root"
9
+ export SERVER_PORT="probably 22"
@@ -0,0 +1,9 @@
1
+ export DOCKERHUB_PASS="set me"
2
+ export DOCKERHUB_EMAIL="set me"
3
+ export DOCKERHUB_USER="set me"
4
+ export PUSH_DEPLOY_TAG=${CIRCLE_PREVIOUS_BUILD_NUM}_${CIRCLE_SHA1:0:7}
5
+ export DEPLOY_TAG=${CIRCLE_BUILD_NUM}_${CIRCLE_SHA1:0:7}
6
+ export DEPLOY_PATH="name of our app"
7
+ export SERVER_HOST="server ip address"
8
+ export SERVER_USER="probably root"
9
+ export SERVER_PORT="probably 22"
@@ -0,0 +1,2 @@
1
+ POSTGRES_USER="postgres"
2
+ POSTGRES_PASSWORD="some-long-secure-password"
@@ -0,0 +1,9 @@
1
+ export DOCKERHUB_PASS="set me"
2
+ export DOCKERHUB_EMAIL="set me"
3
+ export DOCKERHUB_USER="set me"
4
+ export PUSH_DEPLOY_TAG=${CIRCLE_PREVIOUS_BUILD_NUM}_${CIRCLE_SHA1:0:7}
5
+ export DEPLOY_TAG=${CIRCLE_BUILD_NUM}_${CIRCLE_SHA1:0:7}
6
+ export DEPLOY_PATH="name of our app"
7
+ export SERVER_HOST="server ip address"
8
+ export SERVER_USER="probably root"
9
+ export SERVER_PORT="probably 22"
@@ -0,0 +1,3 @@
1
+ require 'handsomefencer/environment'
2
+ cipher = Handsomefencer::Environment::Crypto.new
3
+ cipher.expose
@@ -0,0 +1,3 @@
1
+ require 'handsomefencer/environment'
2
+ cipher = Handsomefencer::Environment::Crypto.new
3
+ cipher.obfuscate
@@ -0,0 +1,77 @@
1
+ version: '3.1'
2
+
3
+ services:
4
+
5
+ dev_app:
6
+ build:
7
+ context: .
8
+ dockerfile: ./docker/app/Dockerfile
9
+
10
+ depends_on:
11
+ - database
12
+ ports:
13
+ - "35729:35729"
14
+ - "3000:3000"
15
+ volumes:
16
+ - .:/usr/src/app
17
+ - gem_cache:/gems
18
+ env_file:
19
+ - .env/development/database.env
20
+ - .env/development/app.env
21
+ command: [ "bin/rails", "s" ]
22
+
23
+ stdin_open: true
24
+ tty: true
25
+ secrets:
26
+ - host_ssh_key
27
+
28
+ app:
29
+
30
+ build:
31
+ context: .
32
+ dockerfile: ./docker/app/Dockerfile
33
+
34
+ depends_on:
35
+ - database
36
+ ports:
37
+ - "3000:3000"
38
+ volumes:
39
+ - .:/usr/src/app
40
+ - gem_cache:/gems
41
+ environment:
42
+ - RAILS_ENV=production
43
+ env_file:
44
+ - .env/development/database.env
45
+ - .env/development/app.env
46
+
47
+ command: [ "bundle", "exec", "puma", "-C", "config/puma.rb" ]
48
+
49
+ secrets:
50
+ - host_ssh_key
51
+
52
+ web:
53
+ build:
54
+ context: .
55
+ dockerfile: ./docker/web/Dockerfile
56
+ command: [ "nginx", "-g", "daemon off;" ]
57
+
58
+ depends_on:
59
+ - app
60
+ expose:
61
+ - 80
62
+
63
+ database:
64
+ image: postgres
65
+ env_file:
66
+ - .env/development/database.env
67
+
68
+ volumes:
69
+ - db-data:/var/lib/postgresql/data
70
+
71
+ volumes:
72
+ db-data:
73
+ gem_cache:
74
+
75
+ secrets:
76
+ host_ssh_key:
77
+ file: ~/.ssh/id_rsa
@@ -0,0 +1,99 @@
1
+ # use SSHKit directly instead of Capistrano
2
+ require 'sshkit'
3
+ require 'sshkit/dsl'
4
+ include SSHKit::DSL
5
+
6
+ deploy_tag = ENV['DEPLOY_TAG']
7
+ hostname = ENV['SERVER_HOST']
8
+ user = ENV['SERVER_USER']
9
+ dockerhub_user = ENV['DOCKERHUB_USER']
10
+ dockerhub_pass = ENV['DOCKERHUB_PASS']
11
+ port = ENV['SERVER_PORT']
12
+ deploy_env = ENV['DEPLOY_ENV'] || :production
13
+ deploy_path = ENV['DEPLOY_PATH']
14
+
15
+ server = SSHKit::Host.new(hostname: hostname, port: port, user: user)
16
+
17
+ namespace :deploy do
18
+
19
+ desc 'copy to server files needed to run and manage Docker containers'
20
+
21
+ task :configs do
22
+
23
+ on server do
24
+ within deploy_path do
25
+ upload! File.expand_path('../../config/containers/docker-compose.yml', __dir__), '.'
26
+ upload! File.expand_path('../../.env', __dir__), '.', recursive: true
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+
33
+ namespace :docker do
34
+
35
+ desc 'logs into Docker Hub for pushing and pulling'
36
+
37
+ task :login do
38
+ on server do
39
+ execute "mkdir -p #{deploy_path}"
40
+ within deploy_path do
41
+ execute 'docker', 'login', '-u', dockerhub_user, '-p', dockerhub_pass
42
+ end
43
+ end
44
+ end
45
+
46
+ desc 'stops all Docker containers via Docker Compose'
47
+
48
+ task stop: 'deploy:configs' do
49
+ on server do
50
+ within deploy_path do
51
+ with rails_env: deploy_env, deploy_tag: deploy_tag do
52
+ execute 'docker-compose', 'stop'
53
+
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ desc 'starts all Docker containers via Docker Compose'
60
+
61
+ task start: 'deploy:configs' do
62
+ on server do
63
+ within deploy_path do
64
+ with rails_env: deploy_env, deploy_tag: deploy_tag do
65
+ execute 'docker-compose', 'up', '-d'
66
+ execute 'echo', deploy_tag , '>', 'deploy.tag'
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ desc 'pulls images from Docker Hub'
73
+
74
+ task pull: 'docker:login' do
75
+ on server do
76
+ within deploy_path do
77
+ ["#{deploy_path}_app", "#{deploy_path}_web"].each do |image_name|
78
+ execute 'docker', 'pull', "rennmappe/#{image_name}:#{deploy_tag}"
79
+ end
80
+ execute 'docker', 'pull', 'postgres:9.4.5'
81
+ end
82
+ end
83
+ end
84
+
85
+
86
+ desc 'runs database migrations in application container via Docker Compose'
87
+ task migrate: 'deploy:configs' do
88
+ on server do
89
+ within deploy_path do
90
+ with rails_env: deploy_env, deploy_tag: deploy_tag do
91
+ execute 'docker-compose', 'run', 'app', "bin/rails", 'db:create', 'db:migrate'
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ desc 'pulls images, stops old containers, updates the database, and starts new containers'
98
+ task deploy: %w{docker:pull docker:stop docker:migrate docker:start }
99
+ end
@@ -0,0 +1,8 @@
1
+ require "handsome_fencer/circle_c_i/railtie"
2
+ require "handsome_fencer/circle_c_i/crypto"
3
+
4
+ module HandsomeFencer
5
+ module CircleCI
6
+ # Your code goes here...
7
+ end
8
+ end
@@ -0,0 +1,93 @@
1
+ require 'openssl'
2
+ require 'base64'
3
+ require 'byebug'
4
+
5
+ module HandsomeFencer
6
+ module CircleCI
7
+ class Crypto
8
+
9
+ DeployKeyError = Class.new(StandardError)
10
+
11
+ def initialize
12
+ @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
13
+ @salt = '8 octets'
14
+ @pass_phrase = get_deploy_key
15
+ end
16
+
17
+ def get_deploy_key
18
+ case
19
+ when ENV['DEPLOY_KEY'].nil? && !File.exist?(dkfile)
20
+ raise DeployKeyError, "No deploy key set. Please generate a deploy key using '$ bin/rails generate handsome_fencer:circle_c_i:deploy_key' or set it using '$ export ENV['DEPLOY_KEY'] = some-complicated-key'"
21
+ when ENV['DEPLOY_KEY'].present?
22
+ Base64.decode64(ENV['DEPLOY_KEY'])
23
+ when File.exist?(dkfile)
24
+ Base64.decode64(File.read(dkfile))
25
+ end
26
+ end
27
+
28
+ def read_deploy_key
29
+ File.exist?(dkfile) ? File.read(dkfile) : save_deploy_key
30
+ end
31
+
32
+ def save_deploy_key
33
+
34
+ @new_key = @cipher.random_key
35
+
36
+ write_to_file Base64.encode64(@new_key), dkfile
37
+ # ignore_sensitive_files
38
+ read_deploy_key
39
+ end
40
+
41
+ def ignore_sensitive_files
42
+ if File.exist? '.gitignore'
43
+ ["/#{dkfile}", "/.env/*"].each do |pattern|
44
+ unless File.read('.gitignore').match pattern
45
+ open('.gitignore', 'a') { |f| f << pattern }
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ def encrypt(file)
52
+ file = Rails.root.join(file).to_s
53
+ @cipher.encrypt.pkcs5_keyivgen @pass_phrase, @salt
54
+ encrypted = @cipher.update(File.read file) + @cipher.final
55
+ write_to_file(Base64.encode64(encrypted), file + '.enc')
56
+ end
57
+
58
+ def decrypt(file)
59
+ encrypted = Base64.decode64 File.read(file.to_s)
60
+ @cipher.decrypt.pkcs5_keyivgen @pass_phrase, @salt
61
+ decrypted = @cipher.update(encrypted) + @cipher.final
62
+ decrypted_file = file.split('.enc').first
63
+ write_to_file decrypted, decrypted_file
64
+ end
65
+
66
+ def source_files(directory=nil, extension=nil)
67
+ Dir.glob(directory + "/**/*#{extension}")
68
+ end
69
+
70
+ def obfuscate(directory=nil, extension=nil)
71
+ extension = extension || '.env'
72
+ directory = directory || '.circleci'
73
+ source_files(directory, extension).each { |file| encrypt file }
74
+ end
75
+
76
+ def expose(directory=nil, extension=nil)
77
+ extension = extension || '.env.enc'
78
+ directory = directory || '.circleci'
79
+ source_files(directory, extension).each { |file| decrypt(file) }
80
+ end
81
+
82
+ private
83
+
84
+ def dkfile
85
+ ".circleci/deploy.key"
86
+ end
87
+
88
+ def write_to_file(data, filename)
89
+ File.open(filename, "w") { |io| io.write data }
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,9 @@
1
+ module HandsomeFencer
2
+ module CircleCI
3
+ class Railtie < ::Rails::Railtie
4
+ rake_tasks do
5
+ load 'tasks/handsome_fencer/circle_c_i_tasks.rake'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ module HandsomeFencer
2
+ module CircleCI
3
+ VERSION = '0.1.5'
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ namespace "handsome_fencer" do
2
+
3
+ # namespace "circleci" do
4
+ #
5
+ # @cipher = HandsomeFencer::CircleCI::Crypto.new
6
+ #
7
+ # desc "obfuscate .circleci variables"
8
+ # task :obfuscate do
9
+ # @cipher.obfuscate
10
+ # end
11
+ #
12
+ # desc "expose .circleci variables"
13
+ # task :expose do
14
+ # @cipher.expose
15
+ # end
16
+ # end
17
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: handsome_fencer-circle_c_i
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ platform: ruby
6
+ authors:
7
+ - schadenfred
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sshkit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-given
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Obfuscate sensitive data in source control, expose it again for circle
84
+ and then deploy
85
+ email:
86
+ - fred.schoeneman@gmail.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - MIT-LICENSE
92
+ - README.md
93
+ - Rakefile
94
+ - lib/generators/handsome_fencer.rb
95
+ - lib/generators/handsome_fencer/circle_c_i/deploy_key_generator.rb
96
+ - lib/generators/handsome_fencer/circle_c_i/exposed_env_files_generator.rb
97
+ - lib/generators/handsome_fencer/circle_c_i/install_generator.rb
98
+ - lib/generators/handsome_fencer/circle_c_i/obfuscated_env_files_generator.rb
99
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/circle.env
100
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/config.yml
101
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/app/Dockerfile
102
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/app/development.env
103
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/app/production.env
104
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/database/development.env
105
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/containers/web/production.env
106
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/expose_env.rb
107
+ - lib/generators/handsome_fencer/circle_c_i/templates/circleci/obfuscate_env.rb
108
+ - lib/generators/handsome_fencer/circle_c_i/templates/docker-compose.yml
109
+ - lib/generators/handsome_fencer/circle_c_i/templates/lib/tasks/deploy.rake
110
+ - lib/handsome_fencer/circle_c_i.rb
111
+ - lib/handsome_fencer/circle_c_i/crypto.rb
112
+ - lib/handsome_fencer/circle_c_i/railtie.rb
113
+ - lib/handsome_fencer/circle_c_i/version.rb
114
+ - lib/tasks/handsome_fencer/circle_c_i_tasks.rake
115
+ homepage: https://github.com/schadenfred/handsomefencer-environment
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.7.7
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: Handsome deployment of Rails apps using Circle and Docker
139
+ test_files: []