1717package jetbrains .buildServer .commitPublisher .gitea ;
1818
1919import com .google .gson .Gson ;
20+
21+ import java .io .IOException ;
2022import java .util .Arrays ;
2123import java .util .Collections ;
2224import java .util .LinkedHashMap ;
3032import jetbrains .buildServer .util .StringUtil ;
3133import jetbrains .buildServer .vcs .VcsRoot ;
3234import jetbrains .buildServer .vcs .VcsRootInstance ;
35+ import jetbrains .buildServer .vcshostings .http .HttpHelper ;
3336import org .jetbrains .annotations .NotNull ;
3437import org .jetbrains .annotations .Nullable ;
3538
3639import static jetbrains .buildServer .commitPublisher .LoggerUtil .LOG ;
3740
38- class GiteaPublisher extends HttpBasedCommitStatusPublisher {
41+ class GiteaPublisher extends HttpBasedCommitStatusPublisher < GiteaBuildStatus > {
3942
4043 private static final Gson myGson = new Gson ();
4144 private static final GitRepositoryParser VCS_URL_PARSER = new GitRepositoryParser ();
4245
43- private final CommitStatusesCache <GiteaCommitStatus > myStatusesCache ;
46+ @ NotNull private final CommitStatusesCache <GiteaCommitStatus > myStatusesCache ;
4447
4548 GiteaPublisher (@ NotNull CommitStatusPublisherSettings settings ,
4649 @ NotNull SBuildType buildType , @ NotNull String buildFeatureId ,
@@ -74,8 +77,8 @@ public boolean buildQueued(@NotNull BuildPromotion buildPromotion, @NotNull Buil
7477
7578 @ Override
7679 public boolean buildRemovedFromQueue (@ NotNull BuildPromotion buildPromotion , @ NotNull BuildRevision revision , @ NotNull AdditionalTaskInfo additionalTaskInfo ) throws PublisherException {
77- GiteaBuildStatus targetStatus = additionalTaskInfo .isPromotionReplaced () ? GiteaBuildStatus . PENDING : GiteaBuildStatus . WARNING ;
78- publish (buildPromotion , revision , targetStatus , additionalTaskInfo );
80+ if (! additionalTaskInfo .isBuildManuallyRemoved ()) return false ;
81+ publish (buildPromotion , revision , GiteaBuildStatus . WARNING , additionalTaskInfo );
7982 return true ;
8083 }
8184
@@ -125,8 +128,13 @@ RevisionStatus getRevisionStatusForRemovedBuild(@NotNull SQueuedBuild removedBui
125128 return null ;
126129 }
127130 Event event = getTriggeredEvent (commitStatus );
128- boolean isSameBuild = StringUtil .areEqual (myLinks .getQueuedBuildUrl (removedBuild ), commitStatus .target_url );
129- return new RevisionStatus (event , commitStatus .description , isSameBuild );
131+ boolean isSameBuildType = StringUtil .areEqual (getBuildName (removedBuild .getBuildPromotion ()), commitStatus .context );
132+ return new RevisionStatus (event , commitStatus .description , isSameBuildType );
133+ }
134+
135+ private String getBuildName (BuildPromotion promotion ) {
136+ SBuildType buildType = promotion .getBuildType ();
137+ return buildType != null ? buildType .getFullName () : promotion .getBuildTypeExternalId ();
130138 }
131139
132140 @ Override
@@ -160,7 +168,7 @@ private GiteaCommitStatus[] loadGiteaStatuses(@NotNull BuildRevision revision, @
160168 String url = buildRevisionStatusesUrl (revision , buildType );
161169 url += "?access_token=" + getPrivateToken ();
162170 ResponseEntityProcessor <GiteaCommitStatus []> processor = new ResponseEntityProcessor <>(GiteaCommitStatus [].class );
163- GiteaCommitStatus [] commitStatuses = get (url , null , null , null , processor );
171+ GiteaCommitStatus [] commitStatuses = get (url , null , null , processor );
164172 if (commitStatuses == null || commitStatuses .length == 0 ) {
165173 return new GiteaCommitStatus [0 ];
166174 }
@@ -173,8 +181,8 @@ RevisionStatus getRevisionStatus(@NotNull BuildPromotion buildPromotion, @Nullab
173181 return null ;
174182 }
175183 Event event = getTriggeredEvent (commitStatus );
176- boolean isSameBuild = StringUtil .areEqual (getViewUrl (buildPromotion ), commitStatus .target_url );
177- return new RevisionStatus (event , commitStatus .description , isSameBuild );
184+ boolean isSameBuildType = StringUtil .areEqual (getBuildName (buildPromotion ), commitStatus .context );
185+ return new RevisionStatus (event , commitStatus .description , isSameBuildType );
178186 }
179187
180188 private String buildRevisionStatusesUrl (@ NotNull BuildRevision revision , @ Nullable BuildType buildType ) throws PublisherException {
@@ -225,8 +233,7 @@ private void publish(@NotNull SBuild build,
225233 @ NotNull BuildRevision revision ,
226234 @ NotNull GiteaBuildStatus status ,
227235 @ NotNull String description ) throws PublisherException {
228- SBuildType buildType = build .getBuildType ();
229- String buildName = buildType != null ? buildType .getFullName () : build .getBuildTypeExternalId ();
236+ String buildName = getBuildName (build .getBuildPromotion ());
230237 String message = createMessage (status , buildName , revision , getViewUrl (build ), description );
231238 publish (message , revision , LogUtil .describe (build ));
232239 myStatusesCache .removeStatusFromCache (revision , buildName );
@@ -237,9 +244,13 @@ private void publish(@NotNull BuildPromotion buildPromotion,
237244 @ NotNull GiteaBuildStatus status ,
238245 @ NotNull AdditionalTaskInfo additionalTaskInfo ) throws PublisherException {
239246 String url = getViewUrl (buildPromotion );
247+ if (url == null ) {
248+ LOG .debug (String .format ("Can not build view URL for the build #%d. Probably build configuration was removed. Status \" %s\" won't be published" ,
249+ buildPromotion .getId (), status .getName ()));
250+ return ;
251+ }
240252 String description = additionalTaskInfo .getComment ();
241- SBuildType buildType = buildPromotion .getBuildType ();
242- String buildName = buildType != null ? buildType .getFullName () : buildPromotion .getBuildTypeExternalId ();
253+ String buildName = getBuildName (buildPromotion );
243254 String message = createMessage (status , buildName , revision , url , description );
244255 publish (message , revision , LogUtil .describe (buildPromotion ));
245256 myStatusesCache .removeStatusFromCache (revision , buildName );
@@ -269,15 +280,17 @@ private void publish(@NotNull String commit, @NotNull String data, @NotNull Repo
269280 String url = GiteaSettings .getProjectsUrl (getApiUrl (), repository .owner (), repository .repositoryName ()) + "/statuses/" + commit ;
270281 LOG .debug ("Request url: " + url + ", message: " + data );
271282 url += "?access_token=" + getPrivateToken ();
272- postJson (url , null , null , data , null , buildDescription );
283+ postJson (url , null , data , null , buildDescription );
273284 }
274285
275286 @ Override
276- public void processResponse (HttpHelper .HttpResponse response ) throws HttpPublisherException {
287+ public void processResponse (HttpHelper .HttpResponse response ) throws IOException , HttpPublisherException {
277288 final int statusCode = response .getStatusCode ();
278289 if (statusCode >= 400 ) {
279290 String responseString = response .getContent ();
280- if (!responseString .contains ("Cannot transition status via :enqueue from :pending" ) &&
291+ if (404 == statusCode ) {
292+ throw new HttpPublisherException (statusCode , "Repository not found. Please check if it was renamed or moved to another namespace" );
293+ } else if (!responseString .contains ("Cannot transition status via :enqueue from :pending" ) &&
281294 !responseString .contains ("Cannot transition status via :enqueue from :running" ) &&
282295 !responseString .contains ("Cannot transition status via :run from :running" )) {
283296 throw new HttpPublisherException (statusCode ,
@@ -320,4 +333,12 @@ private String getPrivateToken() {
320333 return myParams .get (Constants .GITEA_TOKEN );
321334 }
322335
336+ /* Currently not needed
337+ * determineStatusCommit
338+ * getMergeRequest
339+ * getParentRevisions
340+ * determineParentInSourceBranch
341+ * isOnlyInSourceBranch
342+ * supportMergeResults
343+ */
323344}
0 commit comments