override fun actionPerformed()

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
                )
            }
        }
    }