1
1
const core = require ( '@actions/core' ) ;
2
2
const exec = require ( '@actions/exec' ) ;
3
- const aws = require ( 'aws-sdk' ) ;
4
3
const proxy = require ( 'https-proxy-agent' ) ;
4
+ const { ECRClient, GetAuthorizationTokenCommand } = require ( "@aws-sdk/client-ecr" ) ;
5
+ const { ECRPUBLICClient, GetAuthorizationTokenCommand : GetAuthorizationTokenCommandPublic } = require ( "@aws-sdk/client-ecr-public" ) ;
5
6
6
7
const ECR_LOGIN_GITHUB_ACTION_USER_AGENT = 'amazon-ecr-login-for-github-actions' ;
7
8
const ECR_PUBLIC_REGISTRY_URI = 'public.ecr.aws' ;
@@ -28,32 +29,32 @@ const REGISTRY_TYPES = {
28
29
public : 'public'
29
30
} ;
30
31
31
-
32
32
function configureProxy ( httpProxy ) {
33
33
const proxyFromEnv = process . env . HTTP_PROXY || process . env . http_proxy ;
34
34
35
35
if ( httpProxy || proxyFromEnv ) {
36
36
let proxyToSet ;
37
37
38
- if ( httpProxy ) {
38
+ if ( httpProxy ) {
39
39
core . info ( `Setting proxy from action input: ${ httpProxy } ` ) ;
40
40
proxyToSet = httpProxy ;
41
41
} else {
42
42
core . info ( `Setting proxy from environment: ${ proxyFromEnv } ` ) ;
43
43
proxyToSet = proxyFromEnv ;
44
44
}
45
45
46
- aws . config . update ( {
47
- httpOptions : { agent : proxy ( proxyToSet ) }
48
- } ) ;
46
+ const httpOptions = { agent : proxy ( proxyToSet ) } ;
47
+ return httpOptions ;
49
48
}
49
+ return null ;
50
50
}
51
51
52
- async function getEcrAuthTokenWrapper ( authTokenRequest ) {
53
- const ecr = new aws . ECR ( {
52
+ async function getEcrAuthTokenWrapper ( authTokenRequest , httpOptions ) {
53
+ const ecr = new ECRClient ( {
54
54
customUserAgent : ECR_LOGIN_GITHUB_ACTION_USER_AGENT
55
55
} ) ;
56
- const authTokenResponse = await ecr . getAuthorizationToken ( authTokenRequest ) . promise ( ) ;
56
+ const command = new GetAuthorizationTokenCommand ( authTokenRequest ) ;
57
+ const authTokenResponse = await ecr . send ( command , httpOptions ) ;
57
58
if ( ! authTokenResponse ) {
58
59
throw new Error ( 'Amazon ECR authorization token returned no data' ) ;
59
60
} else if ( ! authTokenResponse . authorizationData || ! Array . isArray ( authTokenResponse . authorizationData ) ) {
@@ -65,11 +66,12 @@ async function getEcrAuthTokenWrapper(authTokenRequest) {
65
66
return authTokenResponse ;
66
67
}
67
68
68
- async function getEcrPublicAuthTokenWrapper ( authTokenRequest ) {
69
- const ecrPublic = new aws . ECRPUBLIC ( {
69
+ async function getEcrPublicAuthTokenWrapper ( authTokenRequest , httpOptions ) {
70
+ const ecrPublic = new ECRPUBLICClient ( {
70
71
customUserAgent : ECR_LOGIN_GITHUB_ACTION_USER_AGENT
71
72
} ) ;
72
- const authTokenResponse = await ecrPublic . getAuthorizationToken ( authTokenRequest ) . promise ( ) ;
73
+ const command = new GetAuthorizationTokenCommandPublic ( authTokenRequest ) ;
74
+ const authTokenResponse = await ecrPublic . send ( command , httpOptions ) ;
73
75
if ( ! authTokenResponse ) {
74
76
throw new Error ( 'Amazon ECR Public authorization token returned no data' ) ;
75
77
} else if ( ! authTokenResponse . authorizationData ) {
@@ -107,7 +109,7 @@ async function run() {
107
109
}
108
110
109
111
// Configures proxy
110
- configureProxy ( httpProxy ) ;
112
+ const proxyOptions = configureProxy ( httpProxy ) ;
111
113
112
114
// Get the ECR/ECR Public authorization token(s)
113
115
const authTokenRequest = { } ;
@@ -120,15 +122,15 @@ async function run() {
120
122
authTokenRequest . registryIds = registryIds ;
121
123
}
122
124
const authTokenResponse = registryType === REGISTRY_TYPES . private ?
123
- await getEcrAuthTokenWrapper ( authTokenRequest ) :
124
- await getEcrPublicAuthTokenWrapper ( authTokenRequest ) ;
125
+ await getEcrAuthTokenWrapper ( authTokenRequest , proxyOptions ) :
126
+ await getEcrPublicAuthTokenWrapper ( authTokenRequest , proxyOptions ) ;
125
127
126
128
// Login to each registry
127
129
for ( const authData of authTokenResponse . authorizationData ) {
128
130
const authToken = Buffer . from ( authData . authorizationToken , 'base64' ) . toString ( 'utf-8' ) ;
129
131
const creds = authToken . split ( ':' , 2 ) ;
130
132
const proxyEndpoint = authData . proxyEndpoint ;
131
- const registryUri = proxyEndpoint . replace ( / ^ h t t p s ? : \/ \/ / , '' ) ;
133
+ const registryUri = proxyEndpoint . replace ( / ^ h t t p s ? : \/ \/ / , '' ) ;
132
134
133
135
core . info ( `Logging into registry ${ registryUri } ` ) ;
134
136
@@ -179,6 +181,7 @@ async function run() {
179
181
}
180
182
181
183
module . exports = {
184
+ configureProxy,
182
185
run,
183
186
replaceSpecialCharacters
184
187
} ;
0 commit comments