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 }