UNPKG

1.52 kBJavaScriptView Raw
1const cli = require('heroku-cli-util')
2const log = require('../lib/log')
3const Sanbashi = require('../lib/sanbashi')
4
5module.exports = function (topic) {
6 return {
7 topic: topic,
8 command: 'login',
9 flags: [{name: 'verbose', char: 'v', hasValue: false}],
10 description: 'log in to Heroku Container Registry',
11 help: `Usage:
12 heroku container:login`,
13 needsApp: false,
14 needsAuth: true,
15 run: cli.command(login)
16 }
17}
18
19async function login (context, heroku) {
20 let herokuHost = process.env.HEROKU_HOST || 'heroku.com'
21 let registry = `registry.${herokuHost}`
22 let password = context.auth.password
23
24 try {
25 await dockerLogin(registry, password, context.flags.verbose)
26 } catch (err) {
27 cli.error(`Error: docker login exited with ${err}`, 1)
28 }
29}
30
31async function dockerLogin (registry, password, verbose) {
32 let [major, minor] = await Sanbashi.version()
33
34 if (major > 17 || major === 17 && minor >= 7) {
35 return await dockerLoginStdin(registry, password, verbose)
36 }
37 return await dockerLoginArgv(registry, password, verbose)
38}
39
40function dockerLoginStdin (registry, password, verbose) {
41 let args = [
42 'login',
43 '--username=_',
44 '--password-stdin',
45 registry
46 ]
47
48 log(verbose, args)
49 return Sanbashi.cmd('docker', args, {input: password})
50}
51
52function dockerLoginArgv (registry, password, verbose) {
53 let args = [
54 'login',
55 '--username=_',
56 `--password=${password}`,
57 registry
58 ]
59 log(verbose, args)
60 return Sanbashi.cmd('docker', args)
61}