in jetbrains-core/src/software/aws/toolkits/jetbrains/services/ecr/actions/PushToRepositoryAction.kt [70:114]
override fun actionPerformed(selected: EcrRepositoryNode, e: AnActionEvent) {
val project = e.getRequiredData(LangDataKeys.PROJECT)
val client: EcrClient = project.awsClient()
val scope = projectCoroutineScope(project)
val dialog = PushToEcrDialog(project, selected.repository, scope.dockerServerRuntimeAsync())
if (!dialog.showAndGet()) {
// user cancelled; noop
EcrTelemetry.deployImage(project, Result.Cancelled)
return
}
scope.launch {
val pushRequest = dialog.getPushRequest()
var result = Result.Failed
try {
val authData = withContext(getCoroutineBgContext()) {
client.authorizationToken.authorizationData().first()
}
val ecrLogin = authData.getDockerLogin()
EcrUtils.pushImage(project, ecrLogin, pushRequest)
result = Result.Succeeded
} catch (e: SdkException) {
val message = message("ecr.push.credential_fetch_failed")
LOG.error(e) { message }
notifyError(message("ecr.push.title"), message)
} catch (e: Exception) {
val message = message("ecr.push.unknown_exception")
LOG.error(e) { message }
notifyError(message("ecr.push.title"), message)
} finally {
val type = when (pushRequest) {
is ImageEcrPushRequest -> EcrDeploySource.Tag
is DockerfileEcrPushRequest -> EcrDeploySource.Dockerfile
}
EcrTelemetry.deployImage(
project,
result,
ecrDeploySource = type
)
}
}
}