88 "github.com/input-output-hk/catalyst-forge/cli/pkg/earthly"
99 "github.com/input-output-hk/catalyst-forge/cli/pkg/events"
1010 "github.com/input-output-hk/catalyst-forge/cli/pkg/executor"
11+ "github.com/input-output-hk/catalyst-forge/cli/pkg/providers/aws"
1112 "github.com/input-output-hk/catalyst-forge/cli/pkg/run"
1213 "github.com/input-output-hk/catalyst-forge/lib/project/project"
1314 "github.com/input-output-hk/catalyst-forge/lib/project/schema"
@@ -26,6 +27,7 @@ type DockerReleaserConfig struct {
2627type DockerReleaser struct {
2728 config DockerReleaserConfig
2829 docker executor.WrappedExecuter
30+ ecr aws.ECRClient
2931 force bool
3032 handler events.EventHandler
3133 logger * slog.Logger
@@ -56,9 +58,7 @@ func (r *DockerReleaser) Release() error {
5658 return fmt .Errorf ("no registries found" )
5759 }
5860
59- container := r .project .Blueprint .Project .Container
6061 registries := r .project .Blueprint .Global .CI .Registries
61-
6262 imageTag := r .config .Tag
6363 if imageTag == "" {
6464 return fmt .Errorf ("no image tag specified" )
@@ -69,10 +69,18 @@ func (r *DockerReleaser) Release() error {
6969 for _ , registry := range registries {
7070 var pushed []string
7171
72+ container := project .GenerateContainerName (& r .project , r .project .Blueprint .Project .Container , registry )
73+ if isECRRegistry (registry ) {
74+ r .logger .Info ("Detected ECR registry, checking if repository exists" , "repository" , container )
75+ if err := createECRRepoIfNotExists (r .ecr , & r .project , container , r .logger ); err != nil {
76+ return fmt .Errorf ("failed to create ECR repository: %w" , err )
77+ }
78+ }
79+
7280 for _ , platform := range platforms {
7381 platformSuffix := strings .Replace (platform , "/" , "_" , - 1 )
7482 curImage := fmt .Sprintf ("%s:%s_%s" , CONTAINER_NAME , TAG_NAME , platformSuffix )
75- newImage := fmt .Sprintf ("%s/%s :%s_%s" , registry , container , imageTag , platformSuffix )
83+ newImage := fmt .Sprintf ("%s:%s_%s" , container , imageTag , platformSuffix )
7684
7785 r .logger .Debug ("Tagging image" , "tag" , newImage )
7886 if err := r .tagImage (curImage , newImage ); err != nil {
@@ -95,8 +103,16 @@ func (r *DockerReleaser) Release() error {
95103 }
96104 } else {
97105 for _ , registry := range registries {
106+ container := project .GenerateContainerName (& r .project , r .project .Blueprint .Project .Container , registry )
107+ if isECRRegistry (registry ) {
108+ r .logger .Info ("Detected ECR registry, checking if repository exists" , "repository" , container )
109+ if err := createECRRepoIfNotExists (r .ecr , & r .project , container , r .logger ); err != nil {
110+ return fmt .Errorf ("failed to create ECR repository: %w" , err )
111+ }
112+ }
113+
98114 curImage := fmt .Sprintf ("%s:%s" , CONTAINER_NAME , TAG_NAME )
99- newImage := fmt .Sprintf ("%s/%s :%s" , registry , container , imageTag )
115+ newImage := fmt .Sprintf ("%s:%s" , container , imageTag )
100116
101117 r .logger .Info ("Tagging image" , "old" , curImage , "new" , newImage )
102118 if err := r .tagImage (curImage , newImage ); err != nil {
@@ -215,12 +231,18 @@ func NewDockerReleaser(
215231 return nil , fmt .Errorf ("failed to parse release config: %w" , err )
216232 }
217233
234+ ecr , err := aws .NewECRClient (ctx .Logger )
235+ if err != nil {
236+ return nil , fmt .Errorf ("failed to create ECR client: %w" , err )
237+ }
238+
218239 docker := executor .NewLocalWrappedExecutor (exec , "docker" )
219240 handler := events .NewDefaultEventHandler (ctx .Logger )
220241 runner := run .NewDefaultProjectRunner (ctx , & project )
221242 return & DockerReleaser {
222243 config : config ,
223244 docker : docker ,
245+ ecr : ecr ,
224246 force : force ,
225247 handler : & handler ,
226248 logger : ctx .Logger ,
0 commit comments