1 module doveralls.doveralls;
2 import doveralls.sourcefiles, doveralls.git, doveralls.request;
3 
4 int execute(string path, string token, string service, bool dump)
5 {
6     import std.stdio, std.process : env=environment;
7     import std.json;
8 
9     JSONValue[string] data;
10     JSONValue[string] ext;
11     if (env.get("TRAVIS"))
12     {
13         data["service_job_id"] = env["TRAVIS_JOB_ID"];
14         data["service_name"] = service.length ? service : "travis-ci"; // could be travis-pro
15         ext["travis_job_id"] = env["TRAVIS_JOB_ID"];
16         ext["travis_pull_request"] = env["TRAVIS_PULL_REQUEST"];
17     }
18     else if (env.get("CIRCLECI"))
19     {
20         data["service_name"] = "circleci";
21         data["service_number"] = env["CIRCLE_BUILD_NUM"];
22         ext["circleci_build_num"] = env["CIRCLE_BUILD_NUM"];
23         ext["branch"] = env["CIRCLE_BRANCH"];
24         ext["commit_sha"] = env["CIRCLE_SHA1"];
25     }
26     else if (env.get("SEMAPHORE"))
27     {
28         data["service_name"] = "semaphore";
29         data["service_number"] = env["SEMAPHORE_BUILD_NUMBER"];
30     }
31     else if (env.get("JENKINS_URL"))
32     {
33         data["service_name"] = "jenkins";
34         data["service_number"] = env["BUILD_NUMBER"];
35         ext["jenkins_build_num"] = env["BUILD_NUMBER"];
36         ext["jenkins_build_url"] = env["BUILD_URL"];
37         ext["branch"] = env["GIT_BRANCH"];
38         ext["commit_sha"] = env["GIT_COMMIT"];
39     }
40     else if (env.get("CI_NAME"))
41     {
42         data["service_name"] = env["CI_NAME"];
43         data["service_number"] = env["CI_BUILD_NUMBER"];
44         data["service_build_url"] = env["CI_BUILD_URL"];
45         data["service_branch"] = env["CI_BRANCH"];
46         data["service_pull_request"] = env["CI_PULL_REQUEST"];
47     }
48     else
49     {
50         data["service_name"] = "coveralls-ruby";
51         data["repo_token"] = token = env.get("COVERALLS_REPO_TOKEN", token);
52         if (!token.length && !dump)
53         {
54             stderr.writeln("A repo_token is required when running locally.");
55             stderr.writeln("Either pass one as argument or set the COVERALLS_REPO_TOKEN env variable.");
56             return 1;
57         }
58     }
59 
60     import std.datetime : Clock, UTC;
61 
62     if (ext.length) data["environment"] = JSONValue(ext);
63     data["source_files"] = getSourceFiles(path);
64     auto git = getGitEntry(path);
65     if (git.type != JSON_TYPE.NULL)
66         data["git"] = git;
67     data["run_at"] = Clock.currTime(UTC()).toISOExtString();
68 
69     if (!dump)
70         return sendData(JSONValue(data));
71     writeln(JSONValue(data));
72     return 0;
73 }