@@ -103,43 +103,79 @@ func (c *Client) constructAuthenticationOption(ctx context.Context, obj mpasv1al
103103func (c * Client ) createOrganizationRepository (ctx context.Context , gc gitprovider.Client , domain string , visibility gitprovider.RepositoryVisibility , spec mpasv1alpha1.RepositorySpec ) error {
104104 logger := log .FromContext (ctx )
105105
106- repo , err := gc . OrgRepositories (). Create ( ctx , gitprovider.OrgRepositoryRef {
106+ ref := gitprovider.OrgRepositoryRef {
107107 OrganizationRef : gitprovider.OrganizationRef {
108108 Domain : domain ,
109109 Organization : spec .Owner ,
110110 },
111111 RepositoryName : spec .RepositoryName ,
112- }, gitprovider.RepositoryInfo {
112+ }
113+ info := gitprovider.RepositoryInfo {
113114 DefaultBranch : gitprovider .StringVar ("main" ),
114115 Visibility : & visibility ,
115- })
116- if err != nil {
117- return fmt .Errorf ("failed to create repository: %w" , err )
118116 }
119117
120- logger .Info ("organization repository successfully created" , "name" , repo .Repository ().String ())
118+ switch spec .ExistingRepositoryPolicy {
119+ case mpasv1alpha1 .ExistingRepositoryPolicyFail :
120+ if _ , err := gc .OrgRepositories ().Create (ctx , ref , info ); err != nil {
121+ return fmt .Errorf ("failed to create repository: %w" , err )
122+ }
123+
124+ logger .Info ("successfully created organization repository" , "domain" , domain , "repository" , spec .RepositoryName )
125+ case mpasv1alpha1 .ExistingRepositoryPolicyAdopt :
126+ _ , created , err := gc .OrgRepositories ().Reconcile (ctx , ref , info )
127+ if err != nil {
128+ return fmt .Errorf ("failed to reconcile repository: %w" , err )
129+ }
130+
131+ if ! created {
132+ logger .Info ("using existing repository" , "domain" , domain , "repository" , spec .RepositoryName )
133+ } else {
134+ logger .Info ("successfully created organization repository" , "domain" , domain , "repository" , spec .RepositoryName )
135+ }
136+ default :
137+ return fmt .Errorf ("unknown repository policy '%s'" , spec .ExistingRepositoryPolicy )
138+ }
121139
122140 return nil
123141}
124142
125143func (c * Client ) createUserRepository (ctx context.Context , gc gitprovider.Client , domain string , visibility gitprovider.RepositoryVisibility , spec mpasv1alpha1.RepositorySpec ) error {
126144 logger := log .FromContext (ctx )
127145
128- repo , err := gc . UserRepositories (). Create ( ctx , gitprovider.UserRepositoryRef {
146+ ref := gitprovider.UserRepositoryRef {
129147 UserRef : gitprovider.UserRef {
130148 Domain : domain ,
131149 UserLogin : spec .Owner ,
132150 },
133151 RepositoryName : spec .RepositoryName ,
134- }, gitprovider.RepositoryInfo {
152+ }
153+ info := gitprovider.RepositoryInfo {
135154 DefaultBranch : gitprovider .StringVar ("main" ),
136155 Visibility : & visibility ,
137- })
138- if err != nil {
139- return fmt .Errorf ("failed to create repository: %w" , err )
140156 }
141157
142- logger .Info ("user repository successfully created" , "name" , repo .Repository ().String ())
158+ switch spec .ExistingRepositoryPolicy {
159+ case mpasv1alpha1 .ExistingRepositoryPolicyFail :
160+ if _ , err := gc .UserRepositories ().Create (ctx , ref , info ); err != nil {
161+ return fmt .Errorf ("failed to create repository: %w" , err )
162+ }
163+
164+ logger .Info ("successfully created user repository" , "domain" , domain , "repository" , spec .RepositoryName )
165+ case mpasv1alpha1 .ExistingRepositoryPolicyAdopt :
166+ _ , created , err := gc .UserRepositories ().Reconcile (ctx , ref , info )
167+ if err != nil {
168+ return fmt .Errorf ("failed to reconcile repository: %w" , err )
169+ }
170+
171+ if ! created {
172+ logger .Info ("using existing repository" , "domain" , domain , "repository" , spec .RepositoryName )
173+ } else {
174+ logger .Info ("successfully created user repository" , "domain" , domain , "repository" , spec .RepositoryName )
175+ }
176+ default :
177+ return fmt .Errorf ("unknown repository policy '%s'" , spec .ExistingRepositoryPolicy )
178+ }
143179
144180 return nil
145181}
0 commit comments