calevipoeg-zeus 0.1.3 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4f7faca906fbdbdb332cf5177b35c9f36c4bd76307b33fd2e872d5fb5d0ac1d
4
- data.tar.gz: b3ccabf7e8976d9873018fda8eee44bdab17957d86acc7f94c742a425cbda595
3
+ metadata.gz: 06de19880926c2b7c1790df9642cd54bdb714763945faaefde1b46d9d365ffbe
4
+ data.tar.gz: e302ac90287f2af764eb43528c72a37a1bb7d833b1a0f836e686d0229f15077e
5
5
  SHA512:
6
- metadata.gz: f72d23d28600540b4167cb4a9597e5b2fb9cf5dd14f094d9b528511f886f4647df37980c49d98aa4e0ba6620dd01bb86534ee8fb51c0796936a267daaa8cd321
7
- data.tar.gz: 83d20597c19cb340d6249363ea05f28177bd966165aaaa47019a852c6b17e6a1d1bbc40d962df56f4d5db922d53da4957fe4979fe4f18674bb5740aacee2e7e4
6
+ metadata.gz: 42db57f833293e96ee1a893bd0d7ce13de8cbb37014b4405cb25db27c2e00ff044d247797c6c71ee03365a6a5278f6b6db68db3ce3e7ba10f4fc9c4b98efd6b3
7
+ data.tar.gz: e899c96427cfad3cbfa369154220de0f023040f9df10167cadbab1a2b71f5addf9c41f6aa9eca1136f983eb4cc0011b7940064175f5d52711e99de48cd1885f6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zeus (0.1.0)
4
+ calevipoeg-zeus (0.1.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -26,9 +26,9 @@ PLATFORMS
26
26
  ruby
27
27
 
28
28
  DEPENDENCIES
29
+ calevipoeg-zeus!
29
30
  rake
30
31
  rspec
31
- zeus!
32
32
 
33
33
  BUNDLED WITH
34
34
  2.1.4
data/README.md CHANGED
@@ -66,3 +66,36 @@ ensure
66
66
  pg.unlink
67
67
  end
68
68
  ```
69
+
70
+ ## Mina tasks
71
+
72
+ ```ruby
73
+ require 'zeus'
74
+ require 'zeus/mina/make'
75
+
76
+ invoke :make, 'docker:push'
77
+ ```
78
+
79
+ ```ruby
80
+ require 'zeus'
81
+ require 'zeus/mina/docker_service'
82
+
83
+ invoke :make, 'docker:push'
84
+ invoke :'docker_service:update', 'app', '--force --with-registry-auth --image http://example.com'
85
+ ```
86
+
87
+ ```ruby
88
+ require 'zeus'
89
+ require 'zeus/mina/s3'
90
+
91
+ set :s3_client, -> do
92
+ Aws::S3::Client.new
93
+ end
94
+
95
+ set :s3_bucket, -> do
96
+ 'hole'
97
+ end
98
+
99
+ invoke :'s3:upload', ["public/static"], "cdn/production/static"
100
+ invoke :'s3:clean', 'cdn/production/static', 14.days.ago
101
+ ```
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :docker_service do
4
+ desc 'Update a service'
5
+ task :update, %i[application arguments] do |_t, argv|
6
+ command "docker service update #{argv.application} #{argv.arguments}"
7
+ end
8
+
9
+ desc 'Create docker container'
10
+ task :create, %i[arguments] do |_t, argv|
11
+ command "docker service create #{argv.arguments.tr("\n", ' ')}"
12
+ end
13
+
14
+ # The <command> should have:
15
+ # 1) "--restart-condition none" and "--detach" arguments for docker-create
16
+ # 2) "--name $SHOT_NAME"
17
+ desc 'Execute one-time container task'
18
+ task :shot, %i[name command] do |_t, argv|
19
+ command <<~CMD
20
+ bash << "EOF"
21
+ export SHOT_NAME=#{argv.name}
22
+
23
+ docker service rm $SHOT_NAME 2>/dev/null
24
+
25
+ TASK_ID=$(#{argv.command})
26
+
27
+ echo "Waiting ${SHOT_NAME} with ID <${TASK_ID}> for being finished"
28
+
29
+ while : ; do
30
+ STOPPED_TASK=$(docker service ps --filter 'desired-state=shutdown' ${TASK_ID} -q)
31
+ [[ ${STOPPED_TASK} != "" ]] && break
32
+ echo "not finished yet $(date)"
33
+ sleep 1
34
+ done
35
+
36
+ docker service logs --raw ${TASK_ID}
37
+ docker service rm ${TASK_ID} > /dev/null
38
+ EOF
39
+ CMD
40
+ end
41
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @example invoke :make, 'docker:push'
4
+ # @example invoke :make, 'docker:push', 'APP_ENV=staging'
5
+ desc 'Execute a Make file command'
6
+ task :make, %i[command env] do |_t, argv|
7
+ system "#{argv.env} make #{argv.command}", exception: true
8
+ end
@@ -0,0 +1,30 @@
1
+ require 'aws-sdk-s3'
2
+
3
+ set :s3_client, -> { raise }
4
+ set :s3_bucket, -> { raise }
5
+
6
+ namespace :s3 do
7
+ task :upload, %i[dirs destination] do |_t, argv|
8
+ Array(argv.dirs).each do |dir|
9
+ Dir.glob(Pathname.new(dir).join('**/**')).each do |file|
10
+ next if File.directory?(file)
11
+
12
+ path = Pathname.new(file).relative_path_from(dir)
13
+ key = Pathname.new(argv.destination).join(path)
14
+ io = Zeus::S3Io.new(File.open(file))
15
+
16
+ io.upload(fetch(:s3_client), bucket: fetch(:s3_bucket), acl: 'public-read', key: String(key)) do |progress|
17
+ puts "[#{progress}%] Uploading #{file} -> #{key}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ task :clean, %i[prefix last_mod] do |_t, argv|
24
+ Zeus::S3Iterate.new(fetch(:s3_client)).delete_if(bucket: fetch(:s3_bucket), prefix: argv.prefix) do |file|
25
+ break(false) unless argv.last_mod >= file.last_modified
26
+
27
+ puts "[-] removing (last mod #{file.last_modified}) #{file.key}"
28
+ end
29
+ end
30
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zeus
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.8'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calevipoeg-zeus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aliaksandr Shylau
@@ -30,6 +30,9 @@ files:
30
30
  - bin/setup
31
31
  - exe/zeus:copy
32
32
  - lib/zeus.rb
33
+ - lib/zeus/mina/docker_service.rb
34
+ - lib/zeus/mina/make.rb
35
+ - lib/zeus/mina/s3.rb
33
36
  - lib/zeus/pg_base_backup.rb
34
37
  - lib/zeus/s3_io.rb
35
38
  - lib/zeus/s3_iterate.rb