uffizzi-cli 0.5.2 → 0.7.3

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.
Files changed (53) 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 +2 -2
  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 +109 -64
  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/man/uffizzi-config +65 -0
  30. data/man/uffizzi-config.html +144 -0
  31. data/man/uffizzi-config.ronn +55 -0
  32. data/man/uffizzi-connect +37 -0
  33. data/man/uffizzi-connect-acr +35 -0
  34. data/man/uffizzi-connect-acr.ronn +28 -0
  35. data/man/uffizzi-connect-docker-hub +34 -0
  36. data/man/uffizzi-connect-docker-hub.ronn +27 -0
  37. data/man/uffizzi-connect-ecr +35 -0
  38. data/man/uffizzi-connect-ecr.ronn +28 -0
  39. data/man/uffizzi-connect-gcr +40 -0
  40. data/man/uffizzi-connect-gcr.ronn +32 -0
  41. data/man/uffizzi-connect-ghcr +35 -0
  42. data/man/uffizzi-connect-ghcr.ronn +28 -0
  43. data/man/uffizzi-connect.ronn +31 -0
  44. data/man/uffizzi-disconnect +37 -0
  45. data/man/uffizzi-disconnect.ronn +31 -0
  46. data/man/uffizzi-login +2 -2
  47. data/man/uffizzi-login.ronn +2 -2
  48. data/man/uffizzi-preview-update +34 -0
  49. data/man/uffizzi-preview-update.ronn +33 -0
  50. data/man/uffizzi-project-set-default +34 -0
  51. data/man/uffizzi-project-set-default.html +111 -0
  52. data/man/uffizzi-project-set-default.ronn +26 -0
  53. 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.2'
4
+ VERSION = '0.7.3'
5
5
  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\.