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.
- 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 +3 -3
- 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 +108 -63
- 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/lib/uffizzi.rb +4 -0
- 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/lib/uffizzi.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\.
|