uffizzi-cli 0.5.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +69 -116
  3. data/config/uffizzi.rb +2 -1
  4. data/exe/uffizzi +1 -1
  5. data/lib/uffizzi/auth_helper.rb +3 -8
  6. data/lib/uffizzi/cli/common.rb +3 -3
  7. data/lib/uffizzi/cli/config.rb +38 -12
  8. data/lib/uffizzi/cli/connect.rb +82 -35
  9. data/lib/uffizzi/cli/disconnect.rb +2 -2
  10. data/lib/uffizzi/cli/login.rb +30 -11
  11. data/lib/uffizzi/cli/logout.rb +3 -3
  12. data/lib/uffizzi/cli/preview/service.rb +12 -11
  13. data/lib/uffizzi/cli/preview.rb +70 -127
  14. data/lib/uffizzi/cli/project/compose.rb +22 -26
  15. data/lib/uffizzi/cli/project/secret.rb +25 -14
  16. data/lib/uffizzi/cli/project.rb +33 -9
  17. data/lib/uffizzi/cli.rb +19 -22
  18. data/lib/uffizzi/clients/api/api_client.rb +108 -63
  19. data/lib/uffizzi/clients/api/api_routes.rb +38 -30
  20. data/lib/uffizzi/clients/api/http_client.rb +47 -45
  21. data/lib/uffizzi/config_file.rb +36 -20
  22. data/lib/uffizzi/date_helper.rb +45 -0
  23. data/lib/uffizzi/response_helper.rb +11 -7
  24. data/lib/uffizzi/services/command_service.rb +9 -0
  25. data/lib/uffizzi/services/compose_file_service.rb +3 -0
  26. data/lib/uffizzi/services/preview_service.rb +109 -0
  27. data/lib/uffizzi/shell.rb +7 -4
  28. data/lib/uffizzi/version.rb +1 -1
  29. data/lib/uffizzi.rb +4 -0
  30. data/man/uffizzi-config +65 -0
  31. data/man/uffizzi-config.html +144 -0
  32. data/man/uffizzi-config.ronn +55 -0
  33. data/man/uffizzi-connect +37 -0
  34. data/man/uffizzi-connect-acr +35 -0
  35. data/man/uffizzi-connect-acr.ronn +28 -0
  36. data/man/uffizzi-connect-docker-hub +34 -0
  37. data/man/uffizzi-connect-docker-hub.ronn +27 -0
  38. data/man/uffizzi-connect-ecr +35 -0
  39. data/man/uffizzi-connect-ecr.ronn +28 -0
  40. data/man/uffizzi-connect-gcr +40 -0
  41. data/man/uffizzi-connect-gcr.ronn +32 -0
  42. data/man/uffizzi-connect-ghcr +35 -0
  43. data/man/uffizzi-connect-ghcr.ronn +28 -0
  44. data/man/uffizzi-connect.ronn +31 -0
  45. data/man/uffizzi-disconnect +37 -0
  46. data/man/uffizzi-disconnect.ronn +31 -0
  47. data/man/uffizzi-login +2 -2
  48. data/man/uffizzi-login.ronn +2 -2
  49. data/man/uffizzi-preview-update +34 -0
  50. data/man/uffizzi-preview-update.ronn +33 -0
  51. data/man/uffizzi-project-set-default +34 -0
  52. data/man/uffizzi-project-set-default.html +111 -0
  53. data/man/uffizzi-project-set-default.ronn +26 -0
  54. metadata +26 -2
@@ -5,11 +5,11 @@ require 'fileutils'
5
5
 
6
6
  module Uffizzi
7
7
  class ConfigFile
8
- CONFIG_PATH = "#{Dir.home}/.uffizzi/config.json"
8
+ CONFIG_PATH = "#{Dir.home}/.config/uffizzi/config_default.json"
9
9
 
10
10
  class << self
11
- def create(account_id, cookie, hostname)
12
- data = prepare_config_data(account_id, cookie, hostname)
11
+ def create(account_id, cookie, server)
12
+ data = prepare_config_data(account_id, cookie, server)
13
13
  data.each_pair { |key, value| write_option(key, value) }
14
14
  end
15
15
 
@@ -28,11 +28,11 @@ module Uffizzi
28
28
  data[option]
29
29
  end
30
30
 
31
- def option_exists?(option)
31
+ def option_has_value?(option)
32
32
  data = read
33
- return false unless data.is_a?(Hash)
33
+ return false if !data.is_a?(Hash) || !option_exists?(option)
34
34
 
35
- data.key?(option)
35
+ !data[option].empty?
36
36
  end
37
37
 
38
38
  def write_option(key, value)
@@ -40,15 +40,15 @@ module Uffizzi
40
40
  return nil unless data.is_a?(Hash)
41
41
 
42
42
  data[key] = value
43
- write(data.to_json)
43
+ write(data)
44
44
  end
45
45
 
46
- def delete_option(key)
46
+ def unset_option(key)
47
47
  data = read
48
- return nil unless data.is_a?(Hash)
48
+ return nil unless data.is_a?(Hash) || !option_exists?(key)
49
49
 
50
- new_data = data.except(key)
51
- write(new_data.to_json)
50
+ data[key] = ''
51
+ write(data)
52
52
  end
53
53
 
54
54
  def rewrite_cookie(cookie)
@@ -61,7 +61,7 @@ module Uffizzi
61
61
 
62
62
  content = data.reduce('') do |acc, pair|
63
63
  property, value = pair
64
- "#{acc}#{property} - #{value}\n"
64
+ "#{acc}#{property} = #{value}\n"
65
65
  end
66
66
 
67
67
  Uffizzi.ui.say(content)
@@ -71,26 +71,42 @@ module Uffizzi
71
71
 
72
72
  private
73
73
 
74
+ def option_exists?(option)
75
+ data = read
76
+ return false unless data.is_a?(Hash)
77
+
78
+ data.key?(option)
79
+ end
80
+
74
81
  def read
75
- JSON.parse(File.read(CONFIG_PATH), symbolize_names: true)
82
+ data = File.read(CONFIG_PATH)
83
+ options = data.split("\n")
84
+ options.reduce({}) do |acc, option|
85
+ key, value = option.split('=', 2)
86
+ acc.merge({ key.strip.to_sym => value.strip })
87
+ end
76
88
  rescue Errno::ENOENT => e
77
89
  Uffizzi.ui.say(e)
78
- nil
79
- rescue JSON::ParserError
80
- Uffizzi.ui.say('Config file is in incorrect format')
81
- nil
82
90
  end
83
91
 
84
92
  def write(data)
85
93
  file = create_file
86
- file.write(data)
94
+ prepared_data = prepare_data(data)
95
+ file.write(prepared_data)
87
96
  file.close
88
97
  end
89
98
 
90
- def prepare_config_data(account_id, cookie, hostname)
99
+ def prepare_data(data)
100
+ data.reduce('') do |acc, option|
101
+ key, value = option
102
+ "#{acc}#{key} = #{value}\n"
103
+ end
104
+ end
105
+
106
+ def prepare_config_data(account_id, cookie, server)
91
107
  {
92
108
  account_id: account_id,
93
- hostname: hostname,
109
+ server: server,
94
110
  cookie: cookie,
95
111
  }
96
112
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+
5
+ module Uffizzi
6
+ module DateHelper
7
+ TWO_MINUTES = 120
8
+ TWO_HOURS = 120
9
+ TWO_DAYS = 48
10
+ TWO_WEEKS = 14
11
+ TWO_MONTHS = (365 / 12 * 2)
12
+ TWO_YEARS = 730
13
+
14
+ class << self
15
+ def count_distanse(now, previous_date)
16
+ seconds = (now - previous_date).round
17
+ return convert_to_words(seconds, 'seconds') if seconds < TWO_MINUTES
18
+
19
+ minutes = seconds / 60
20
+ return convert_to_words(minutes, 'minutes') if minutes < TWO_HOURS
21
+
22
+ hours = minutes / 60
23
+ return convert_to_words(hours, 'hours') if hours < TWO_DAYS
24
+
25
+ days = hours / 24
26
+ return convert_to_words(days, 'days') if days < TWO_WEEKS
27
+
28
+ weeks = days / 7
29
+ return convert_to_words(weeks, 'weeks') if days < TWO_MONTHS
30
+
31
+ months = (days / (365 / 12)).round
32
+ return convert_to_words(months, 'months') if days < TWO_YEARS
33
+
34
+ years = days / 365
35
+ convert_to_words(years, 'years')
36
+ end
37
+
38
+ private
39
+
40
+ def convert_to_words(value, unit)
41
+ "#{value} #{unit} ago"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -28,22 +28,26 @@ module Uffizzi
28
28
  end
29
29
 
30
30
  def handle_failed_response(response)
31
- print_errors(response[:body][:errors])
31
+ prepared_errors = prepare_errors(response[:body][:errors])
32
+ raise Uffizzi::Error.new(prepared_errors)
32
33
  end
33
34
 
34
35
  def handle_invalid_compose_response(response)
35
- print_errors(response[:body][:compose_file][:payload][:errors])
36
+ prepared_errors = prepare_errors(response[:body][:compose_file][:payload][:errors])
37
+ raise Uffizzi::Error.new(prepared_errors)
36
38
  end
37
39
 
38
40
  private
39
41
 
40
- def print_errors(errors)
41
- errors.each_key do |key|
42
- if errors[key].is_a?(Array)
43
- errors[key].each { |error_message| Uffizzi.ui.say(error_message) }
42
+ def prepare_errors(errors)
43
+ errors.values.reduce('') do |acc, error_messages|
44
+ if error_messages.is_a?(Array)
45
+ error_messages.each { |error_message| acc = "#{acc}#{error_message}\n" }
44
46
  else
45
- Uffizzi.ui.say(errors[key])
47
+ acc = "#{acc}#{error_messages}\n"
46
48
  end
49
+
50
+ acc
47
51
  end
48
52
  end
49
53
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CommandService
4
+ class << self
5
+ def project_set?(options)
6
+ !options[:project].nil? || (Uffizzi::ConfigFile.exists? && Uffizzi::ConfigFile.option_has_value?(:project))
7
+ end
8
+ end
9
+ end
@@ -29,6 +29,9 @@ class ComposeFileService
29
29
  content: Base64.encode64(dependency_file_data),
30
30
  }
31
31
  end
32
+ rescue Errno::ENOENT => e
33
+ dependency_path = e.message.split('- ').last
34
+ raise Uffizzi::Error.new("The config file #{dependency_path} does not exist")
32
35
  end
33
36
 
34
37
  def fetch_configs(configs_data)
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'uffizzi/clients/api/api_client'
4
+
3
5
  class PreviewService
4
6
  class << self
7
+ include ApiClient
5
8
  def read_deployment_id(deployment_name)
6
9
  return nil unless deployment_name.start_with?('deployment-')
7
10
  return nil unless deployment_name.split('-').size == 2
@@ -11,5 +14,111 @@ class PreviewService
11
14
 
12
15
  deployment_id
13
16
  end
17
+
18
+ def start_deploy_containers(project_slug, deployment, success_message)
19
+ deployment_id = deployment[:id]
20
+ params = { id: deployment_id }
21
+
22
+ response = deploy_containers(Uffizzi::ConfigFile.read_option(:server), project_slug, deployment_id, params)
23
+
24
+ if Uffizzi::ResponseHelper.no_content?(response)
25
+ Uffizzi.ui.say(success_message)
26
+ create_deployment(deployment, project_slug)
27
+ else
28
+ Uffizzi::ResponseHelper.handle_failed_response(response)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def create_deployment(deployment, project_slug)
35
+ spinner = TTY::Spinner.new('[:spinner] Creating containers...', format: :dots)
36
+ spinner.auto_spin
37
+
38
+ activity_items = []
39
+ loop do
40
+ response = get_activity_items(Uffizzi::ConfigFile.read_option(:server), project_slug, deployment[:id])
41
+ handle_activity_items_response(response, spinner)
42
+ activity_items = response[:body][:activity_items]
43
+ break if activity_items.count == deployment[:containers].count
44
+
45
+ sleep(5)
46
+ end
47
+
48
+ spinner.success
49
+
50
+ Uffizzi.ui.say('Done')
51
+
52
+ display_containers_deploying_status(deployment, project_slug, activity_items)
53
+ end
54
+
55
+ def display_containers_deploying_status(deployment, project_slug, activity_items)
56
+ spinner = TTY::Spinner::Multi.new('[:spinner] Deploying preview...', format: :dots, style: {
57
+ middle: ' ',
58
+ bottom: ' ',
59
+ })
60
+
61
+ containers_spinners = create_containers_spinners(activity_items, spinner)
62
+
63
+ loop do
64
+ response = get_activity_items(Uffizzi::ConfigFile.read_option(:server), project_slug, deployment[:id])
65
+ handle_activity_items_response(response, spinner)
66
+ activity_items = response[:body][:activity_items]
67
+ check_activity_items_state(activity_items, containers_spinners)
68
+ break if activity_items.all? { |activity_item| activity_item[:state] == 'deployed' || activity_item[:state] == 'failed' }
69
+
70
+ sleep(5)
71
+ end
72
+
73
+ if Uffizzi.ui.output_format.nil?
74
+ Uffizzi.ui.say('Done')
75
+ preview_url = "https://#{deployment[:preview_url]}"
76
+ Uffizzi.ui.say(preview_url) if spinner.success?
77
+ else
78
+ output_data = build_output_data(deployment)
79
+ Uffizzi.ui.output(output_data)
80
+ end
81
+ end
82
+
83
+ def create_containers_spinners(activity_items, spinner)
84
+ activity_items.map do |activity_item|
85
+ container_spinner = spinner.register("[:spinner] #{activity_item[:name]}")
86
+ container_spinner.auto_spin
87
+ {
88
+ name: activity_item[:name],
89
+ spinner: container_spinner,
90
+ }
91
+ end
92
+ end
93
+
94
+ def check_activity_items_state(activity_items, containers_spinners)
95
+ finished_activity_items = activity_items.filter do |activity_item|
96
+ activity_item[:state] == 'deployed' || activity_item[:state] == 'failed'
97
+ end
98
+ finished_activity_items.each do |activity_item|
99
+ container_spinner = containers_spinners.detect { |spinner| spinner[:name] == activity_item[:name] }
100
+ spinner = container_spinner[:spinner]
101
+ case activity_item[:state]
102
+ when 'deployed'
103
+ spinner.success
104
+ when 'failed'
105
+ spinner.error
106
+ end
107
+ end
108
+ end
109
+
110
+ def handle_activity_items_response(response, spinner)
111
+ unless Uffizzi::ResponseHelper.ok?(response)
112
+ spinner.error
113
+ Uffizzi::ResponseHelper.handle_failed_response(response)
114
+ end
115
+ end
116
+
117
+ def build_output_data(output_data)
118
+ {
119
+ id: "deployment-#{output_data[:id]}",
120
+ url: "https://#{output_data[:preview_url]}",
121
+ }
122
+ end
14
123
  end
15
124
  end
data/lib/uffizzi/shell.rb CHANGED
@@ -15,10 +15,6 @@ module Uffizzi
15
15
  @shell.say(message)
16
16
  end
17
17
 
18
- def ask(msg, *args)
19
- @shell.ask(msg, *args)
20
- end
21
-
22
18
  def print_in_columns(messages)
23
19
  @shell.print_in_columns(messages)
24
20
  end
@@ -27,6 +23,13 @@ module Uffizzi
27
23
  @shell.print_table(table_data)
28
24
  end
29
25
 
26
+ def ask(message, *args)
27
+ answer = @shell.ask(message, *args)
28
+ options = args.last.is_a?(Hash) ? args.pop : {}
29
+ say("\n") unless options.fetch(:echo, true)
30
+ answer
31
+ end
32
+
30
33
  def last_message
31
34
  @shell.send(:stdout).string.strip
32
35
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uffizzi
4
- VERSION = '0.5.1'
4
+ VERSION = '0.7.2'
5
5
  end
data/lib/uffizzi.rb CHANGED
@@ -17,5 +17,9 @@ module Uffizzi
17
17
  def ui
18
18
  @ui ||= Uffizzi::UI::Shell.new
19
19
  end
20
+
21
+ def root
22
+ @root ||= Pathname.new(File.expand_path('..', __dir__))
23
+ end
20
24
  end
21
25
  end
@@ -0,0 +1,65 @@
1
+ .\" generated with Ronn-NG/v0.9.1
2
+ .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
3
+ .TH "CONFIG" "" "April 2022" ""
4
+ .SH "NAME"
5
+ \fBconfig\fR \- configure the Uffizzi command\-line interface (CLI)
6
+ .SH "SYNOPSIS"
7
+ .nf
8
+ uffizzi config COMMAND [UFFIZZI_WIDE_FLAG \|\.\|\.\|\.]
9
+ .fi
10
+ .SH "DESCRIPTION"
11
+ .nf
12
+ The uffizzi config command lets you configure this command\-line application\.
13
+ If COMMAND is not specified, uffizzi config launches an interactive set up
14
+ guide\.
15
+
16
+ For more information on configuration options, see:
17
+ https://docs\.uffizzi\.com/references/cli
18
+ .fi
19
+ .SH "UFFIZZI WIDE FLAGS"
20
+ .nf
21
+ These flags are available to all commands: \-\-project\. Run $ uffizzi
22
+ help for details\.
23
+ .fi
24
+ .SH "COMMANDS"
25
+ .nf
26
+ COMMAND is one of the following:
27
+
28
+ get\-value OPTION
29
+ Displays the value of the specified option\.
30
+
31
+ list
32
+ Lists all options and their values from the config file\.
33
+
34
+ set OPTION VALUE
35
+ Sets the value of the specified option\.
36
+
37
+ unset OPTION
38
+ Deletes the value of the specified option\.
39
+ .fi
40
+ .SH "OPTIONS"
41
+ .nf
42
+ OPTION is one of the following:
43
+
44
+ server
45
+ The server of the Uffizzi API service you want to access\. Defaults to
46
+ app\.uffizzi\.com\.
47
+
48
+ name
49
+ Your name\.
50
+
51
+ project
52
+ The current active project\. This project is used as the default unless
53
+ \-\-project is pass as an argument\.
54
+ .fi
55
+ .SH "EXAMPLES"
56
+ .nf
57
+ To list the uffizzi configuration options, run:
58
+
59
+ $ uffizzi config list
60
+
61
+ To set a new current active project for uffizzi, run:
62
+
63
+ $ uffizzi config set project my\-project
64
+ .fi
65
+
@@ -0,0 +1,144 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv='content-type' content='text/html;charset=utf8'>
5
+ <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
6
+ <title>configure the Uffizzi command-line interface (CLI)</title>
7
+ <style type='text/css' media='all'>
8
+ /* style: man */
9
+ body#manpage {margin:0}
10
+ .mp {max-width:100ex;padding:0 9ex 1ex 4ex}
11
+ .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
12
+ .mp h2 {margin:10px 0 0 0}
13
+ .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
14
+ .mp h3 {margin:0 0 0 4ex}
15
+ .mp dt {margin:0;clear:left}
16
+ .mp dt.flush {float:left;width:8ex}
17
+ .mp dd {margin:0 0 0 9ex}
18
+ .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
19
+ .mp pre {margin-bottom:20px}
20
+ .mp pre+h2,.mp pre+h3 {margin-top:22px}
21
+ .mp h2+pre,.mp h3+pre {margin-top:5px}
22
+ .mp img {display:block;margin:auto}
23
+ .mp h1.man-title {display:none}
24
+ .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
25
+ .mp h2 {font-size:16px;line-height:1.25}
26
+ .mp h1 {font-size:20px;line-height:2}
27
+ .mp {text-align:justify;background:#fff}
28
+ .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
29
+ .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
30
+ .mp u {text-decoration:underline}
31
+ .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
32
+ .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
33
+ .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
34
+ .mp b.man-ref {font-weight:normal;color:#434241}
35
+ .mp pre {padding:0 4ex}
36
+ .mp pre code {font-weight:normal;color:#434241}
37
+ .mp h2+pre,h3+pre {padding-left:0}
38
+ ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
39
+ ol.man-decor {width:100%}
40
+ ol.man-decor li.tl {text-align:left}
41
+ ol.man-decor li.tc {text-align:center;letter-spacing:4px}
42
+ ol.man-decor li.tr {text-align:right;float:right}
43
+ </style>
44
+ </head>
45
+ <!--
46
+ The following styles are deprecated and will be removed at some point:
47
+ div#man, div#man ol.man, div#man ol.head, div#man ol.man.
48
+
49
+ The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
50
+ .man-navigation should be used instead.
51
+ -->
52
+ <body id='manpage'>
53
+ <div class='mp' id='man'>
54
+
55
+ <div class='man-navigation' style='display:none'>
56
+ <a href="#NAME">NAME</a>
57
+ <a href="#SYNOPSIS">SYNOPSIS</a>
58
+ <a href="#DESCRIPTION">DESCRIPTION</a>
59
+ <a href="#UFFIZZI-WIDE-FLAGS">UFFIZZI WIDE FLAGS</a>
60
+ <a href="#COMMANDS">COMMANDS</a>
61
+ <a href="#OPTIONS">OPTIONS</a>
62
+ <a href="#EXAMPLES">EXAMPLES</a>
63
+ </div>
64
+
65
+ <ol class='man-decor man-head man head'>
66
+ <li class='tl'>config</li>
67
+ <li class='tc'></li>
68
+ <li class='tr'>config</li>
69
+ </ol>
70
+
71
+
72
+
73
+ <h2 id="NAME">NAME</h2>
74
+ <p class="man-name">
75
+ <code>config</code> - <span class="man-whatis">configure the Uffizzi command-line interface (CLI)</span>
76
+ </p>
77
+ <h2 id="SYNOPSIS">SYNOPSIS</h2>
78
+ <pre><code>uffizzi config COMMAND [UFFIZZI_WIDE_FLAG ...]
79
+ </code></pre>
80
+
81
+ <h2 id="DESCRIPTION">DESCRIPTION</h2>
82
+ <pre><code>The uffizzi config command lets you configure this command-line application.
83
+ If COMMAND is not specified, uffizzi config launches an interactive set up
84
+ guide.
85
+
86
+ For more information on configuration options, see:
87
+ https://docs.uffizzi.com/references/cli
88
+ </code></pre>
89
+
90
+ <h2 id="UFFIZZI-WIDE-FLAGS">UFFIZZI WIDE FLAGS</h2>
91
+ <pre><code>These flags are available to all commands: --project. Run $ uffizzi
92
+ help for details.
93
+ </code></pre>
94
+
95
+ <h2 id="COMMANDS">COMMANDS</h2>
96
+ <pre><code>COMMAND is one of the following:
97
+
98
+ get-value OPTION
99
+ Displays the value of the specified option.
100
+
101
+ list
102
+ Lists all options and their values from the config file.
103
+
104
+ set OPTION VALUE
105
+ Sets the value of the specified option.
106
+
107
+ unset OPTION
108
+ Deletes the value of the specified option.
109
+ </code></pre>
110
+
111
+ <h2 id="OPTIONS">OPTIONS</h2>
112
+ <pre><code> OPTION is one of the following:
113
+
114
+ server
115
+ The server of the Uffizzi API service you want to access. Defaults to
116
+ app.uffizzi.com.
117
+
118
+ name
119
+ Your name.
120
+
121
+ project
122
+ The current active project. This project is used as the default unless
123
+ --project is pass as an argument.
124
+ </code></pre>
125
+
126
+ <h2 id="EXAMPLES">EXAMPLES</h2>
127
+ <pre><code>To list the uffizzi configuration options, run:
128
+
129
+ $ uffizzi config list
130
+
131
+ To set a new current active project for uffizzi, run:
132
+
133
+ $ uffizzi config set project my-project
134
+ </code></pre>
135
+
136
+ <ol class='man-decor man-foot man foot'>
137
+ <li class='tl'></li>
138
+ <li class='tc'>April 2022</li>
139
+ <li class='tr'>config</li>
140
+ </ol>
141
+
142
+ </div>
143
+ </body>
144
+ </html>
@@ -0,0 +1,55 @@
1
+ uffizzi config - configure the Uffizzi command-line interface (CLI)
2
+ ================================================================
3
+
4
+ ## SYNOPSIS
5
+ uffizzi config COMMAND [UFFIZZI_WIDE_FLAG ...]
6
+
7
+ ## DESCRIPTION
8
+ The uffizzi config command lets you configure this command-line application.
9
+ If COMMAND is not specified, uffizzi config launches an interactive set up
10
+ guide.
11
+
12
+ For more information on configuration options, see:
13
+ https://docs.uffizzi.com/references/cli
14
+
15
+ ## UFFIZZI WIDE FLAGS
16
+ These flags are available to all commands: --project. Run $ uffizzi
17
+ help for details.
18
+
19
+ ## COMMANDS
20
+ COMMAND is one of the following:
21
+
22
+ get-value OPTION
23
+ Displays the value of the specified option.
24
+
25
+ list
26
+ Lists all options and their values from the config file.
27
+
28
+ set OPTION VALUE
29
+ Sets the value of the specified option.
30
+
31
+ unset OPTION
32
+ Deletes the value of the specified option.
33
+
34
+ ## OPTIONS
35
+ OPTION is one of the following:
36
+
37
+ server
38
+ The server of the Uffizzi API service you want to access. Defaults to
39
+ app.uffizzi.com.
40
+
41
+ name
42
+ Your name.
43
+
44
+ project
45
+ The current active project. This project is used as the default unless
46
+ --project is pass as an argument.
47
+
48
+ ## EXAMPLES
49
+ To list the uffizzi configuration options, run:
50
+
51
+ $ uffizzi config list
52
+
53
+ To set a new current active project for uffizzi, run:
54
+
55
+ $ uffizzi config set project my-project
@@ -0,0 +1,37 @@
1
+ .\" generated with Ronn-NG/v0.9.1
2
+ .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
3
+ .TH "UFFIZZI\-CONNECT" "" "April 2022" ""
4
+ .SH "NAME"
5
+ \fBuffizzi\-connect\fR \- grant a Uffizzi user account access to external services
6
+ .SH "SYNOPSIS"
7
+ .nf
8
+ uffizzi connect COMMAND
9
+ .fi
10
+ .SH "DESCRIPTION"
11
+ .nf
12
+ Grants a Uffizzi user account access to external services
13
+
14
+ For more information on connecting to external services, see:
15
+ https://docs\.uffizzi\.com/cli
16
+ .fi
17
+ .SH "COMMANDS"
18
+ .nf
19
+ COMMAND is one of the following:
20
+
21
+ acr
22
+ Connect to Azure Container Registry (azurecr\.io)\.
23
+
24
+ docker\-hub
25
+ Connect to Docker Hub (hub\.docker\.com)\.
26
+
27
+ ecr
28
+ Connect to Amazon Elastic Container Registry (amazonaws\.com)\.
29
+
30
+ gcr
31
+ Connect to Google Container Registry (gcr\.io)\.
32
+
33
+ gchr
34
+ Connect to GitHub Container Registry (ghcr\.io)\.
35
+ .fi
36
+ .P
37
+ Run \'uffizzi connect COMMAND \-\-help\' for more information on a command\.