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.
- checksums.yaml +4 -4
- data/README.md +69 -116
- data/config/uffizzi.rb +2 -1
- data/exe/uffizzi +1 -1
- data/lib/uffizzi/auth_helper.rb +3 -8
- data/lib/uffizzi/cli/common.rb +2 -2
- data/lib/uffizzi/cli/config.rb +38 -12
- data/lib/uffizzi/cli/connect.rb +82 -35
- data/lib/uffizzi/cli/disconnect.rb +2 -2
- data/lib/uffizzi/cli/login.rb +30 -11
- data/lib/uffizzi/cli/logout.rb +3 -3
- data/lib/uffizzi/cli/preview/service.rb +12 -11
- data/lib/uffizzi/cli/preview.rb +70 -127
- data/lib/uffizzi/cli/project/compose.rb +22 -26
- data/lib/uffizzi/cli/project/secret.rb +25 -14
- data/lib/uffizzi/cli/project.rb +33 -9
- data/lib/uffizzi/cli.rb +19 -22
- data/lib/uffizzi/clients/api/api_client.rb +109 -64
- data/lib/uffizzi/clients/api/api_routes.rb +38 -30
- data/lib/uffizzi/clients/api/http_client.rb +47 -45
- data/lib/uffizzi/config_file.rb +36 -20
- data/lib/uffizzi/date_helper.rb +45 -0
- data/lib/uffizzi/response_helper.rb +11 -7
- data/lib/uffizzi/services/command_service.rb +9 -0
- data/lib/uffizzi/services/compose_file_service.rb +3 -0
- data/lib/uffizzi/services/preview_service.rb +109 -0
- data/lib/uffizzi/shell.rb +7 -4
- data/lib/uffizzi/version.rb +1 -1
- data/man/uffizzi-config +65 -0
- data/man/uffizzi-config.html +144 -0
- data/man/uffizzi-config.ronn +55 -0
- data/man/uffizzi-connect +37 -0
- data/man/uffizzi-connect-acr +35 -0
- data/man/uffizzi-connect-acr.ronn +28 -0
- data/man/uffizzi-connect-docker-hub +34 -0
- data/man/uffizzi-connect-docker-hub.ronn +27 -0
- data/man/uffizzi-connect-ecr +35 -0
- data/man/uffizzi-connect-ecr.ronn +28 -0
- data/man/uffizzi-connect-gcr +40 -0
- data/man/uffizzi-connect-gcr.ronn +32 -0
- data/man/uffizzi-connect-ghcr +35 -0
- data/man/uffizzi-connect-ghcr.ronn +28 -0
- data/man/uffizzi-connect.ronn +31 -0
- data/man/uffizzi-disconnect +37 -0
- data/man/uffizzi-disconnect.ronn +31 -0
- data/man/uffizzi-login +2 -2
- data/man/uffizzi-login.ronn +2 -2
- data/man/uffizzi-preview-update +34 -0
- data/man/uffizzi-preview-update.ronn +33 -0
- data/man/uffizzi-project-set-default +34 -0
- data/man/uffizzi-project-set-default.html +111 -0
- data/man/uffizzi-project-set-default.ronn +26 -0
- metadata +26 -2
data/lib/uffizzi/config_file.rb
CHANGED
@@ -5,11 +5,11 @@ require 'fileutils'
|
|
5
5
|
|
6
6
|
module Uffizzi
|
7
7
|
class ConfigFile
|
8
|
-
CONFIG_PATH = "#{Dir.home}/.uffizzi/
|
8
|
+
CONFIG_PATH = "#{Dir.home}/.config/uffizzi/config_default.json"
|
9
9
|
|
10
10
|
class << self
|
11
|
-
def create(account_id, cookie,
|
12
|
-
data = prepare_config_data(account_id, cookie,
|
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
|
31
|
+
def option_has_value?(option)
|
32
32
|
data = read
|
33
|
-
return false
|
33
|
+
return false if !data.is_a?(Hash) || !option_exists?(option)
|
34
34
|
|
35
|
-
data.
|
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
|
43
|
+
write(data)
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
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
|
-
|
51
|
-
write(
|
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}
|
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
|
-
|
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
|
-
|
94
|
+
prepared_data = prepare_data(data)
|
95
|
+
file.write(prepared_data)
|
87
96
|
file.close
|
88
97
|
end
|
89
98
|
|
90
|
-
def
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
41
|
-
errors.
|
42
|
-
if
|
43
|
-
|
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
|
-
|
47
|
+
acc = "#{acc}#{error_messages}\n"
|
46
48
|
end
|
49
|
+
|
50
|
+
acc
|
47
51
|
end
|
48
52
|
end
|
49
53
|
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
|
data/lib/uffizzi/version.rb
CHANGED
data/man/uffizzi-config
ADDED
@@ -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
|
data/man/uffizzi-connect
ADDED
@@ -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\.
|