Skip to content

Commit 5c0a848

Browse files
committed
write github commit status
1 parent 669490a commit 5c0a848

File tree

7 files changed

+43
-17
lines changed

7 files changed

+43
-17
lines changed

core/src/main/java/com/flowci/core/common/domain/Variables.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public abstract static class Git {
117117
public static final String EVENT = "FLOWCI_GIT_EVENT";
118118

119119
/**
120-
* Used for git clone
120+
* Used for git clone, will be put to job context from gitclone plugin
121121
*/
122122
public static final String COMMIT_ID = "FLOWCI_GIT_COMMIT_ID";
123123

core/src/main/java/com/flowci/core/git/client/GitClient.java renamed to core/src/main/java/com/flowci/core/git/client/GitAPIClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.flowci.core.git.domain.GitCommitStatus;
44

5-
public interface GitClient {
5+
public interface GitAPIClient {
66

77
void writeCommitStatus(GitCommitStatus commit);
88
}

core/src/main/java/com/flowci/core/git/client/GithubClient.java renamed to core/src/main/java/com/flowci/core/git/client/GithubAPIClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import java.util.Objects;
2424

2525
@Log4j2
26-
@Component
27-
public class GithubClient implements GitClient {
26+
@Component("githubClient")
27+
public class GithubAPIClient implements GitAPIClient {
2828

2929
private final static UriTemplate HttpTemplate = new UriTemplate("https://github.com/{owner}/{repo}.git");
3030

@@ -40,7 +40,7 @@ public class GithubClient implements GitClient {
4040

4141
private final ObjectMapper objectMapper;
4242

43-
public GithubClient(GitSettingsDao gitSettingsDao, HttpClient httpClient, ObjectMapper objectMapper) {
43+
public GithubAPIClient(GitSettingsDao gitSettingsDao, HttpClient httpClient, ObjectMapper objectMapper) {
4444
this.gitSettingsDao = gitSettingsDao;
4545
this.httpClient = httpClient;
4646
this.objectMapper = objectMapper;
Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package com.flowci.core.git.service;
22

3-
import com.flowci.core.git.domain.GitCommitStatus;
4-
53
public interface GitService {
64

7-
void writeStatus(GitCommitStatus commit);
85
}
Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,61 @@
11
package com.flowci.core.git.service;
22

33
import com.flowci.core.common.domain.GitSource;
4-
import com.flowci.core.common.domain.Variables;
5-
import com.flowci.core.git.domain.GitCommit;
4+
import com.flowci.core.git.client.GitAPIClient;
65
import com.flowci.core.git.domain.GitCommitStatus;
76
import com.flowci.core.job.domain.Job;
87
import com.flowci.core.job.event.JobFinishedEvent;
98
import com.flowci.core.job.util.JobContextHelper;
109
import com.flowci.util.StringHelper;
1110
import lombok.extern.log4j.Log4j2;
1211
import org.jvnet.hk2.annotations.Service;
12+
import org.springframework.beans.factory.annotation.Autowired;
1313
import org.springframework.context.event.EventListener;
1414

15+
import javax.annotation.PostConstruct;
16+
import java.util.HashMap;
17+
import java.util.Map;
18+
1519
@Log4j2
1620
@Service
1721
public class GitServiceImpl implements GitService {
1822

19-
@Override
20-
public void writeStatus(GitCommitStatus commit) {
23+
@Autowired
24+
private GitAPIClient githubClient;
25+
26+
private final Map<GitSource, GitAPIClient> clients = new HashMap<>(5);
2127

28+
@PostConstruct
29+
public void init() {
30+
clients.put(GitSource.GITHUB, githubClient);
2231
}
2332

2433
@EventListener
2534
public void onJobFinishEvent(JobFinishedEvent event) {
2635
Job job = event.getJob();
2736

28-
String gitSourceStr = job.getContext().get(Variables.Git.SOURCE);
37+
String gitSourceStr = JobContextHelper.getGitSource(job);
2938
if (!StringHelper.hasValue(gitSourceStr)) {
3039
log.info("no git source on job {} - {}", job.getFlowName(), job.getBuildNumber());
3140
return;
3241
}
3342

3443
var commit = new GitCommitStatus();
44+
commit.setId(JobContextHelper.getCommitId(job));
3545
commit.setUrl(JobContextHelper.getGitUrl(job));
3646
commit.setTargetUrl(JobContextHelper.getJobUrl(job));
3747
commit.setStatus(JobContextHelper.getStatus(job).name().toLowerCase());
48+
commit.setDesc(String.format("build %s from flow.ci", commit.getStatus()));
3849

50+
try {
51+
var source = GitSource.valueOf(gitSourceStr);
52+
var apiClient = clients.get(source);
53+
54+
if (apiClient != null) {
55+
apiClient.writeCommitStatus(commit);
56+
}
57+
} catch (Throwable e) {
58+
log.warn(e.getMessage());
59+
}
3960
}
4061
}

core/src/main/java/com/flowci/core/job/util/JobContextHelper.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,12 @@ public static void setJobUrl(Job job, String url) {
7070
public static String getJobUrl(Job job) {
7171
return job.getContext().get(Variables.Job.Url);
7272
}
73+
74+
public static String getCommitId(Job job) {
75+
return job.getContext().get(Variables.Git.COMMIT_ID);
76+
}
77+
78+
public static String getGitSource(Job job) {
79+
return job.getContext().get(Variables.Git.SOURCE);
80+
}
7381
}

core/src/test/java/com/flowci/core/test/git/GitHubClientTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.flowci.core.test.git;
22

3-
import com.flowci.core.git.client.GithubClient;
3+
import com.flowci.core.git.client.GithubAPIClient;
44
import com.flowci.core.git.domain.GitCommit;
55
import com.flowci.core.git.domain.GitRepo;
66
import org.junit.Test;
@@ -13,17 +13,17 @@ public void should_extract_owner_repo_from_commit_url() {
1313
GitCommit commit = new GitCommit();
1414
commit.setUrl("https://github.com/gy2006/ci-test.git");
1515

16-
GitRepo repo = GithubClient.getRepo(commit);
16+
GitRepo repo = GithubAPIClient.getRepo(commit);
1717
Assert.assertEquals("gy2006", repo.getOwner());
1818
Assert.assertEquals("ci-test", repo.getRepo());
1919

2020
commit.setUrl("[email protected]:gy2006/ci-test.git");
21-
repo = GithubClient.getRepo(commit);
21+
repo = GithubAPIClient.getRepo(commit);
2222
Assert.assertEquals("gy2006", repo.getOwner());
2323
Assert.assertEquals("ci-test", repo.getRepo());
2424

2525
commit.setUrl("ssh://[email protected]:gy2006/ci-test.git");
26-
repo = GithubClient.getRepo(commit);
26+
repo = GithubAPIClient.getRepo(commit);
2727
Assert.assertEquals("gy2006", repo.getOwner());
2828
Assert.assertEquals("ci-test", repo.getRepo());
2929
}

0 commit comments

Comments
 (0)