@@ -15,7 +15,7 @@ import (
15
15
)
16
16
17
17
const (
18
- apiPublicURL = "https://gitlab.com/api/v4 "
18
+ apiPublicURL = "https://gitlab.com"
19
19
taskStatusTemplate = `
20
20
<table>
21
21
<tr><th>Status</th><th>Duration</th><th>Name</th></tr>
@@ -33,12 +33,14 @@ const (
33
33
)
34
34
35
35
type Provider struct {
36
- Client * gitlab.Client
37
- Token * string
38
- targetProjectID int
39
- sourceProjectID int
40
- mergeRequestID int
41
- userID int
36
+ Client * gitlab.Client
37
+ Token * string
38
+ targetProjectID int
39
+ sourceProjectID int
40
+ mergeRequestID int
41
+ userID int
42
+ pathWithNamespace string
43
+ repoURL string
42
44
}
43
45
44
46
// If I understood properly, you can have "personal" projects and groups
@@ -84,7 +86,8 @@ func (v *Provider) ParsePayload(ctx context.Context, run *params.Run, payload st
84
86
v .sourceProjectID = event .ObjectAttributes .SourceProjectID
85
87
v .userID = event .User .ID
86
88
87
- processedevent .Organization , processedevent .Repository = getOrgRepo (event .ObjectAttributes .Target .PathWithNamespace )
89
+ v .pathWithNamespace = event .ObjectAttributes .Target .PathWithNamespace
90
+ processedevent .Organization , processedevent .Repository = getOrgRepo (v .pathWithNamespace )
88
91
processedevent .TriggerTarget = "pull_request"
89
92
case * gitlab.PushEvent :
90
93
processedevent = & info.Event {
@@ -98,7 +101,8 @@ func (v *Provider) ParsePayload(ctx context.Context, run *params.Run, payload st
98
101
BaseBranch : event .Ref ,
99
102
}
100
103
processedevent .TriggerTarget = "push"
101
- processedevent .Organization , processedevent .Repository = getOrgRepo (event .Project .PathWithNamespace )
104
+ v .pathWithNamespace = event .Project .PathWithNamespace
105
+ processedevent .Organization , processedevent .Repository = getOrgRepo (v .pathWithNamespace )
102
106
v .targetProjectID = event .ProjectID
103
107
v .sourceProjectID = event .ProjectID
104
108
v .userID = event .UserID
@@ -114,7 +118,9 @@ func (v *Provider) ParsePayload(ctx context.Context, run *params.Run, payload st
114
118
BaseBranch : event .MergeRequest .TargetBranch ,
115
119
HeadBranch : event .MergeRequest .SourceBranch ,
116
120
}
117
- processedevent .Organization , processedevent .Repository = getOrgRepo (event .Project .PathWithNamespace )
121
+
122
+ v .pathWithNamespace = event .Project .PathWithNamespace
123
+ processedevent .Organization , processedevent .Repository = getOrgRepo (v .pathWithNamespace )
118
124
processedevent .TriggerTarget = "pull_request"
119
125
120
126
v .mergeRequestID = event .MergeRequest .IID
@@ -131,6 +137,8 @@ func (v *Provider) ParsePayload(ctx context.Context, run *params.Run, payload st
131
137
// really use it anymore we good to do whatever we want with it for
132
138
// cosmetics.
133
139
processedevent .EventType = strings .ReplaceAll (run .Info .Event .EventType , " Hook" , "" )
140
+
141
+ v .repoURL = processedevent .URL
134
142
return processedevent , nil
135
143
}
136
144
@@ -147,9 +155,13 @@ func (v *Provider) SetClient(ctx context.Context, opts *info.PacOpts) error {
147
155
return fmt .Errorf ("no git_provider.secret has been set in the repo crd" )
148
156
}
149
157
158
+ // Try to detect automatically theapi url if url is not coming from public
159
+ // gitlab. Unless user has set a spec.provider.url in its repo crd
150
160
apiURL := apiPublicURL
151
161
if opts .ProviderURL != "" {
152
162
apiURL = opts .ProviderURL
163
+ } else if ! strings .HasPrefix (v .repoURL , apiPublicURL ) {
164
+ apiURL = strings .ReplaceAll (v .repoURL , v .pathWithNamespace , "" )
153
165
}
154
166
155
167
v .Client , err = gitlab .NewClient (opts .ProviderToken , gitlab .WithBaseURL (apiURL ))
0 commit comments