renuo-cli 4.8.0 → 4.10.0

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: 90d3b8e87a9471eda0e8c3562f8f9d0be7163f94bcf4e90eb3f05fe4618b0d87
4
- data.tar.gz: a512b8151eb5a140cb35c15f7ec85744c9e3f8f3bc01ba81e0bc75afa3a98a48
3
+ metadata.gz: '04291b4eb0fc68e50a9f32892ffb919a09e3882392c5e19d59142ddfad4bab70'
4
+ data.tar.gz: 79daac8a6706f7a4b6b35cb99ee557957a46e90372e74209bf3f981703caea5d
5
5
  SHA512:
6
- metadata.gz: cab9dc3ae7914973a79137af6372e4ca94e5a725f57329da4cdd06babbd437e0024ff263b586c0dbe2394fa191d92ccdb6093c9d9ccca86cc5fc3af339f7ce65
7
- data.tar.gz: e6dc36d8a6dbae546175f29a372c27ad85d30bccc23350c387f5c57dd487a548323dab6cc8be04748ed3ade3ffe37e93eccb01e9c07054345a3a22a50c3636a3
6
+ metadata.gz: 255b29d9038800e6a3a617ca7008bd02bfbf674fbfad0e7e25d2af37cb4201d5dd7f7832762d8e257ac592f0a052c64204fa45e5be0782ed301edcba1f06f7c8
7
+ data.tar.gz: 07f1ed5bac3218021d690754ec444496bee612b2f7e09f0ad7ab170d340901cdfc707fce50666f23a5c217669562315cc6ade29837c248d9989e9eb6055cb745
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+ require "psych"
5
+
6
+ # :nocov:
7
+ class CheckDeploioStatus
8
+ TIMEOUT_IN_SECONDS = 600
9
+ INTERVAL_IN_SECONDS = 30
10
+
11
+ APP_NAME = ENV.fetch "DEPLOIO_APP_NAME", nil
12
+ PROJECT = ENV.fetch "DEPLOIO_PROJECT", nil
13
+ REVISION = `git rev-parse HEAD`.strip
14
+
15
+ def run
16
+ puts "(1/2) Checking build status for revision #{REVISION}..."
17
+ poll "build"
18
+ abort "build check timed out after #{TIMEOUT_IN_SECONDS} seconds" if build.nil?
19
+
20
+ puts "(2/2) Checking release status for build #{build_name}..."
21
+ poll "release"
22
+ abort "release check timed out after #{TIMEOUT_IN_SECONDS} seconds" if release.nil?
23
+ end
24
+
25
+ private
26
+
27
+ def system!(cmd)
28
+ abort unless system cmd
29
+ end
30
+
31
+ def fetch(type)
32
+ command = "nctl get #{type} -a #{APP_NAME} -p #{PROJECT} -o yaml"
33
+ stdout, stderr, status = Open3.capture3 command
34
+
35
+ abort "error fetching #{type} information: #{stderr}" unless status.success?
36
+ Psych.load_stream stdout
37
+ end
38
+
39
+ def build
40
+ @build ||= fetch("builds").find do |build|
41
+ build.dig "spec", "forProvider", "sourceConfig", "git", "revision" == REVISION
42
+ end
43
+ end
44
+
45
+ def build_name
46
+ @build_name ||= build.dig "metadata", "name"
47
+ end
48
+
49
+ def build_status
50
+ build.dig "status", "atProvider", "buildStatus"
51
+ end
52
+
53
+ def release
54
+ @release ||= fetch("releases").find do |release|
55
+ release.dig "spec", "forProvider", "build", build_name == "name"
56
+ end
57
+ end
58
+
59
+ def release_status
60
+ release.dig "status", "atProvider", "releaseStatus"
61
+ end
62
+
63
+ def succeeded?(status, type)
64
+ case status
65
+ when "available", "success"
66
+ puts "#{type} succeeded"
67
+ true
68
+ when "error", "failed"
69
+ abort "#{type} failed"
70
+ else
71
+ puts "#{type} status is #{status}, waiting..."
72
+ instance_variable_set :"@#{type}", nil
73
+ end
74
+ end
75
+
76
+ def poll(type)
77
+ elapsed = 0
78
+
79
+ while elapsed < TIMEOUT_IN_SECONDS
80
+ if send type
81
+ break if succeeded? send :"#{type}_status", type
82
+ else
83
+ puts "no matching #{type} found, waiting..."
84
+ end
85
+
86
+ sleep INTERVAL_IN_SECONDS
87
+ elapsed += INTERVAL_IN_SECONDS
88
+ end
89
+ end
90
+ end
91
+ # :nocov:
@@ -13,6 +13,7 @@ class GithubPullRequestCreator
13
13
  "--assignee @me",
14
14
  pr_title(opts),
15
15
  "--body \"#{pr_body(opts)}\"",
16
+ "--web",
16
17
  ("--draft" if opts.draft)
17
18
  ].compact.join(" ")
18
19
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+ require "json"
6
+
7
+ class SecretsInitializer
8
+ def self.run(private_vault_link)
9
+ abort("Config file #{SecretsFetcher::CONFIG_FILE} already exists.") if File.exist?(SecretsFetcher::CONFIG_FILE)
10
+
11
+ File.write(SecretsFetcher::CONFIG_FILE, generate_config_file(private_vault_link))
12
+ end
13
+
14
+ def self.generate_config_file(private_vault_link)
15
+ { "items" => [{ "private_link" => private_vault_link, "files" => [], "env_variables" => [] }] }.to_yaml
16
+ end
17
+ end
@@ -9,14 +9,20 @@ blocks:
9
9
  - name: <%= environment %>-deploy
10
10
  task:
11
11
  secrets:
12
- - name: heroku-http
12
+ - name: <%= project_name %>
13
13
  env_vars:
14
- - name: HEROKU_APP_NAME
15
- value: <%= project_name %>-<%= environment %>
14
+ - name: DEPLOIO_PROJECT
15
+ value: renuo-<%= project_name %>
16
+ - name: DEPLOIO_APP_NAME
17
+ value: <%= environment %>
16
18
  jobs:
17
19
  - name: <%= environment %>-deploy
18
20
  commands:
19
21
  - checkout --use-cache
20
- - heroku git:remote -a $HEROKU_APP_NAME
21
- - git push heroku -f $SEMAPHORE_GIT_BRANCH:main
22
- - if heroku run -x rails db:migrate; then heroku dyno:restart; else heroku rollback; exit 1; fi
22
+ - echo 'deb [trusted=yes] https://repo.nine.ch/deb/ /' | sudo tee /etc/apt/sources.list.d/repo.nine.ch.list
23
+ - sudo apt-get -qq update
24
+ - sudo apt-get -qq install -y nctl
25
+ - nctl auth login --api-token=$API_TOKEN --organization=renuo
26
+ - nctl update app $DEPLOIO_APP_NAME -p $DEPLOIO_PROJECT --build-env="RUBY_VERSION=$(cat .ruby-version)" --git-revision=$(git rev-parse HEAD) --skip-repo-access-check
27
+ - gem i renuo-cli
28
+ - renuo check-deploio-status
@@ -3,7 +3,7 @@
3
3
  # :nocov:
4
4
  module Renuo
5
5
  module Cli
6
- VERSION = "4.8.0"
6
+ VERSION = "4.10.0"
7
7
  NAME = "renuo-cli"
8
8
  end
9
9
  end
data/lib/renuo/cli.rb CHANGED
@@ -29,7 +29,9 @@ require "renuo/cli/app/commit_leaderboard_stage"
29
29
  require "renuo/cli/app/commit_leaderboard_sync"
30
30
  require "renuo/cli/app/github_replace"
31
31
  require "renuo/cli/app/github_pull_request_creator"
32
+ require "renuo/cli/app/secrets_initializer"
32
33
  require "renuo/cli/app/secrets_fetcher"
34
+ require "renuo/cli/app/check_deploio_status"
33
35
  require "highline"
34
36
 
35
37
  def agree(question)
@@ -298,12 +300,25 @@ module Renuo
298
300
  command "fetch-secrets" do |c|
299
301
  c.syntax = "renuo fetch-secrets"
300
302
  c.summary = "Fetches the needed secrets in a project from the renuo secrets store"
303
+ c.option "--init <private_vault_link>", String, "Initializes the renuo secrets store"
301
304
  c.description = <<~DESCRIPTION
302
305
  Run the command within a project folder to fetch the secrets from the renuo secrets store.
303
306
  The bin/setup of the project might run this command for you.
304
307
  DESCRIPTION
308
+ c.action do |_, opts|
309
+ if opts.init
310
+ SecretsInitializer.run(opts.init)
311
+ else
312
+ SecretsFetcher.new.run
313
+ end
314
+ end
315
+ end
316
+
317
+ command "check-deploio-status" do |c|
318
+ c.syntax = "renuo check-deploio-status"
319
+ c.summary = "Checks the build and release status of the deployment."
305
320
  c.action do
306
- SecretsFetcher.new.run
321
+ CheckDeploioStatus.new.run
307
322
  end
308
323
  end
309
324
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: renuo-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.0
4
+ version: 4.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Renuo AG
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-15 00:00:00.000000000 Z
10
+ date: 2025-01-30 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport
@@ -319,6 +319,7 @@ files:
319
319
  - bin/setup
320
320
  - config/1password-secrets.yml
321
321
  - lib/renuo/cli.rb
322
+ - lib/renuo/cli/app/check_deploio_status.rb
322
323
  - lib/renuo/cli/app/command_helper.rb
323
324
  - lib/renuo/cli/app/commit_leaderboard_stage.rb
324
325
  - lib/renuo/cli/app/commit_leaderboard_sync.rb
@@ -342,6 +343,7 @@ files:
342
343
  - lib/renuo/cli/app/release_project.rb
343
344
  - lib/renuo/cli/app/renuo_version.rb
344
345
  - lib/renuo/cli/app/secrets_fetcher.rb
346
+ - lib/renuo/cli/app/secrets_initializer.rb
345
347
  - lib/renuo/cli/app/services/cloudfront_config_service.rb
346
348
  - lib/renuo/cli/app/services/markdown_parser_service.rb
347
349
  - lib/renuo/cli/app/services/renuo_cli_config.rb