rops 1.0.3 → 1.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cba9a816bbbd95902a7ceae4ef3f8d8d15f11f85161feb5a4440b9d07bbb4fdd
4
- data.tar.gz: 725ebdc57f82b4149a2355270c744d2407de307b65884edf78977ec1dff6763e
3
+ metadata.gz: 78cb1cdfa255b9f24c33cce2dafaaad811526e980fb28df95939024e04ec8324
4
+ data.tar.gz: c20c8891b751fa8d7a75103d3ed4516920fbbb7ac91e52020f8a35cdb3fddbe7
5
5
  SHA512:
6
- metadata.gz: ce727f9be89ea5138ad03c7692fab3776e6d3a0217e4a9ee355e45b24ad813a6def6472e7866adbc9ec4664fc1b3b09d41c3aafa964bd77c98f82576e86d14f9
7
- data.tar.gz: ee365fa57fd2fe145ac5d5d38385f2c2cdb5300280768e7c049fc386431369d171150954010104f8acf20d39a92969668cde10e1ed0c14e65fb5f90de4d9977b
6
+ metadata.gz: 2add816686a5d4a0e2a94ca1d342af659ba0963e8df4fb2b7e167a4d774ce3696697bfd9467793bb65c14b7c58285516ba6c717891c9a5c58257bc23bf85d7c7
7
+ data.tar.gz: 1697452d48bbd3cd5ed1501380ba5cb7956474b0aca3b4c2c0a15b2d86d28fa592a2f7a5baf3958e1411d2d5cf81ad30886fe3da21baf6735fb61692b6832049
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rops (1.0.2)
4
+ rops (1.0.7)
5
5
  activesupport (~> 6.1.4)
6
6
  dry-cli (~> 0.7.0)
7
7
  git (~> 1.9.1)
data/README.md CHANGED
@@ -2,26 +2,23 @@
2
2
 
3
3
  The Record360 Operations tool - checkout, build, deploy
4
4
 
5
- ## Usage
5
+ ## Description
6
6
 
7
7
  This tool implements the Record360 Best Practices for building and deploying projects. It interfaces with Git (for source control), Docker/Podman (for container images), and Kubernetes (cluster deployments).
8
8
 
9
- ### Installation
9
+ ## Installation
10
10
 
11
- Add `rops` to your Gemfile and then run `bundle install`.
11
+ Download and install with:
12
12
 
13
- ```ruby
14
- # Gemfile
15
- group :development do
16
- gem 'rops', github: 'Record360/rops'
17
- end
13
+ ```shell
14
+ gem install rops
18
15
  ```
19
16
 
20
- ### Configuration
17
+ ## Configuration
21
18
 
22
19
  `rops` has several opinionated defaults, which can be overridden by command line options or a configuration file.
23
20
 
24
- #### Project Root Directory
21
+ ### Project Root Directory
25
22
  By default, the current working directory when `rops` runs. It can be overridden with the `--root=<DIR>` option.
26
23
 
27
24
  The project root directory must contain:
@@ -34,7 +31,7 @@ end
34
31
  * `./platform/rops.yaml`
35
32
  * `./config/rops.yaml`
36
33
 
37
- #### Docker Container Images
34
+ ### Docker Container Images
38
35
  By default, a single image named from the the Project root directory and built from `./Dockerfile`. May be overridden by setting the `images` array in the configuration file, e.g.:
39
36
 
40
37
  ```yaml
@@ -45,23 +42,22 @@ images:
45
42
  dockerfile: dockerfiles/second.Dockerfile
46
43
  ```
47
44
 
48
- #### Git Default Branch
45
+ ### Git Default Branch
49
46
  The Git branch to build, by default `master`. Overridden with the `default_branch` field in the configuration file.
50
47
 
51
- #### Docker Registry
48
+ ### Docker Registry
52
49
  The Docker registry to push container images. By default, `r360`, which is probably not what you want and should be overridden by setting the `registry` field in the configuration file.
53
50
 
54
- #### Kubernetes Context
51
+ ### Kubernetes Context
55
52
  The name of the Kubernetes context to deploy to (as listed in `~/.kube/config`). Defaults to `staging` and overridden with the `default_context` field in the configuration file.
56
53
 
57
54
  There are extra safety features when deploying to the production context, which defaults to `production` and may be overridden with the `production_context` field in the configuration file.
58
55
 
59
56
  Kubernetes configuration is organized by Kubernetes context name, under the `./platform` directory. For example, the Kubernetes configuration for the default contexts (`staging` and `production`) is stored under `./platform/staging` and `./platform/production` respectively.
60
57
 
61
- ### Operations
58
+ ## Operations
62
59
 
63
60
  ### Status
64
-
65
61
  Arguments:
66
62
  * `context`: Kubernetes context (default `staging`, or the value of `staging_context`)
67
63
 
@@ -80,7 +76,6 @@ Currently running (staging):
80
76
  ```
81
77
 
82
78
  ### Build
83
-
84
79
  Arguments:
85
80
  * `branch`: Git branch/commit (default `master`, or the value of `default_branch`)
86
81
 
@@ -105,7 +100,6 @@ Successfully tagged localhost/web:gfc50028b-feature
105
100
  ```
106
101
 
107
102
  ### Push
108
-
109
103
  Arguments:
110
104
  * `branch`: Git branch/commit (default `master`, or the value of `default_branch`)
111
105
 
@@ -120,7 +114,6 @@ Storing signatures
120
114
  ```
121
115
 
122
116
  ### Deploy
123
-
124
117
  Arguments:
125
118
  * `branch`: Git branch/commit (default `master`, or the value of `default_branch`)
126
119
  * `context`: Kubernetes context (default `staging`, or the value of `default_context`)
data/bin/rops CHANGED
@@ -150,8 +150,8 @@ module Record360
150
150
  end
151
151
 
152
152
  class BuildImage < Dry::CLI::Command
153
- desc "Build the docker image" #" (COMMIT=#{DEFAULT_COMMIT})"
154
- argument :branch, desc: "Branch (or commit) to build" #, default: DEFAULT_COMMIT
153
+ desc "Build the docker image"
154
+ argument :branch, desc: "Branch (or commit) to build"
155
155
  include Common
156
156
 
157
157
  def call(**)
@@ -222,10 +222,10 @@ module Record360
222
222
  end
223
223
 
224
224
  if $stdout.tty?
225
- print "Deploy #{branch} (#{image_tag}) to #{context}? (y/N): "
225
+ print "Deploy #{deployer.branch} (#{image_tag}) to #{context}? (y/N): "
226
226
  exit(-1) unless $stdin.gets&.chomp == 'y'
227
227
  else
228
- puts "Deploying #{branch} (#{image_tag}) to #{context}"
228
+ puts "Deploying #{deployer.branch} (#{image_tag}) to #{context}"
229
229
  end
230
230
 
231
231
  deployer.deploy!(context)
data/lib/deployer.rb CHANGED
@@ -44,8 +44,8 @@ class Deployer
44
44
 
45
45
  short_id = @commit[0, 8]
46
46
  @image_tag = "g#{short_id}"
47
- if branch.present? && (branch != default_branch) && !branch.start_with?(short_id)
48
- @image_tag += "-#{branch}"
47
+ if (@branch != default_branch) && !@branch.start_with?(short_id)
48
+ @image_tag += "-#{@branch}"
49
49
  end
50
50
  images.each do |image|
51
51
  image.commit = commit
@@ -68,7 +68,7 @@ class Deployer
68
68
  end
69
69
 
70
70
  statuses, stderr, success = kubectl(context, cmd)
71
- unless success || stderr.match(/not found/)
71
+ unless (success || stderr.match(/not found/)) && statuses.present?
72
72
  puts stderr if stderr.present?
73
73
  return nil
74
74
  end
@@ -135,7 +135,7 @@ class Deployer
135
135
  cmd = "kubectl --context #{context} #{cmd}"
136
136
 
137
137
  if ssh_host.blank?
138
- stdout, stderr, cmd_status = Open3.capture3(cmd)
138
+ stdout, stderr, cmd_status = Open3.capture3(cmd, stdin_data: data)
139
139
  [ stdout, stderr, cmd_status.success? ]
140
140
  else
141
141
  require 'net/ssh'
data/lib/image.rb CHANGED
@@ -54,7 +54,9 @@ class Image
54
54
  end
55
55
 
56
56
  def local_exists?
57
- system("#{Deployer.docker} image exists #{local_image}")
57
+ if @local_exists.nil?
58
+ @local_exists = system("#{Deployer.docker} image exists #{local_image}")
59
+ end
58
60
  end
59
61
 
60
62
  def remote_image
@@ -68,7 +70,7 @@ class Image
68
70
  if status.success? || stderr.include?('error parsing manifest blob')
69
71
  @remote_exists = true
70
72
  else
71
- puts stderr if stderr.present? && !stderr.include?('manifest unknown')
73
+ puts stderr if stderr.present? && !stderr.include?('manifest unknown') && !stderr.include?('no such manifest')
72
74
  @remote_exists = false
73
75
  end
74
76
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rops
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Sloan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-27 00:00:00.000000000 Z
11
+ date: 2021-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-cli