renuo-cli 4.8.0 → 4.10.0

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: 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