feat: add the ability to log into a registry on a per-app basis

Closes #5324
This commit is contained in:
Jose Diaz-Gonzalez
2026-01-09 00:12:16 -05:00
parent 2093db6e74
commit 6a83fd053c
23 changed files with 398 additions and 29 deletions

View File

@@ -18,9 +18,10 @@ Manage registry settings for an app
Additional commands:`
helpContent = `
registry:login [--password-stdin] <server> <username> [<password>], Login to a docker registry
registry:login [--global|--password-stdin] [<app>] <server> <username> [<password>], Login to a docker registry
registry:logout [--global] [<app>] <server>, Logout from a docker registry
registry:report [<app>] [<flag>], Displays a registry report for one or more apps
registry:set <app> <property> (<value>), Set or clear a registry property for an app`
registry:set <app>|--global <property> (<value>), Set or clear a registry property for an app`
)
func main() {

View File

@@ -21,11 +21,66 @@ func main() {
case "login":
args := flag.NewFlagSet("registry:login", flag.ExitOnError)
passwordStdin := args.Bool("password-stdin", false, "--password-stdin: read password from stdin")
global := args.Bool("global", false, "--global: login globally instead of per-app")
args.Parse(os.Args[2:])
server := args.Arg(0)
username := args.Arg(1)
password := args.Arg(2)
err = registry.CommandLogin(server, username, password, *passwordStdin)
argCount := args.NArg()
var appName, server, username, password string
// When --password-stdin is used, password is not in args
// Global login: 2 args (server, username) with --password-stdin, 3 args without
// Per-app login: 3 args (app, server, username) with --password-stdin, 4 args without
globalArgCount := 3
perAppArgCount := 4
if *passwordStdin {
globalArgCount = 2
perAppArgCount = 3
}
if *global {
// --global: server, username, [password]
server = args.Arg(0)
username = args.Arg(1)
if !*passwordStdin {
password = args.Arg(2)
}
} else if argCount == globalArgCount {
// global login without --global flag: warn and treat as global
common.LogWarn("Deprecated: please use --global flag for global registry login")
server = args.Arg(0)
username = args.Arg(1)
if !*passwordStdin {
password = args.Arg(2)
}
} else if argCount >= perAppArgCount {
// per-app login: app, server, username, [password]
appName = args.Arg(0)
server = args.Arg(1)
username = args.Arg(2)
if !*passwordStdin {
password = args.Arg(3)
}
}
err = registry.CommandLogin(appName, server, username, password, *passwordStdin)
case "logout":
args := flag.NewFlagSet("registry:logout", flag.ExitOnError)
global := args.Bool("global", false, "--global: logout globally instead of per-app")
args.Parse(os.Args[2:])
var appName, server string
if *global {
server = args.Arg(0)
} else if args.NArg() == 1 {
// 1 arg: global logout (backwards compatible)
server = args.Arg(0)
} else {
// 2 args: app, server
appName = args.Arg(0)
server = args.Arg(1)
}
err = registry.CommandLogout(appName, server)
case "report":
args := flag.NewFlagSet("registry:report", flag.ExitOnError)
format := args.String("format", "stdout", "format: [ stdout | json ]")

View File

@@ -29,6 +29,9 @@ func main() {
err = registry.TriggerDeployedAppRepository(appName)
case "install":
err = registry.TriggerInstall()
case "post-create":
appName := flag.Arg(0)
err = registry.TriggerPostCreate(appName)
case "post-app-clone-setup":
oldAppName := flag.Arg(0)
newAppName := flag.Arg(1)