"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.detectCISystem = exports.CISystems = void 0;
const utils_1 = require("./utils");
const AWS_CODE_BUILD_RE = /^CODEBUILD_/;
const CONCOURSE_RE = /^CONCOURSE_/;
const CODESHIP_CI_NAME = 'codeship';
var CISystems;
(function (CISystems) {
    CISystems["appVeyor"] = "AppVeyor";
    CISystems["awsCodeBuild"] = "AWSCodeBuild";
    CISystems["azure"] = "Azure";
    CISystems["bamboo"] = "Bamboo";
    CISystems["bitbucketPipelines"] = "BitbucketPipelines";
    CISystems["buddy"] = "Buddy";
    CISystems["buildkite"] = "Buildkite";
    CISystems["circleCI"] = "CircleCI";
    CISystems["codeFresh"] = "CodeFresh";
    CISystems["codeship"] = "Codeship";
    CISystems["concourse"] = "Concourse";
    CISystems["drone"] = "Drone";
    CISystems["gitlab"] = "GitLab";
    CISystems["goCD"] = "GoCD";
    CISystems["googleCloud"] = "GoogleCloud";
    CISystems["githubActions"] = "GithubActions";
    CISystems["jenkins"] = "Jenkins";
    CISystems["layerCI"] = "LayerCI";
    CISystems["netlify"] = "Netlify";
    CISystems["semaphore"] = "Semaphore";
    CISystems["shippable"] = "Shippable";
    CISystems["teamCity"] = "TeamCity";
    CISystems["teamFoundation"] = "TeamFoundation";
    CISystems["travis"] = "Travis";
    CISystems["wercker"] = "Wercker";
})(CISystems = exports.CISystems || (exports.CISystems = {}));
;
function detectCISystem() {
    const { env } = process;
    const ciDetectors = {
        [CISystems.appVeyor]: utils_1.parseBooleanVariable(env.APPVEYOR),
        [CISystems.awsCodeBuild]: Object.keys(env).find(key => AWS_CODE_BUILD_RE.test(key) && env[key]),
        [CISystems.azure]: env.AZURE_HTTP_USER_AGENT,
        [CISystems.bamboo]: env.bamboo_buildNumber,
        [CISystems.bitbucketPipelines]: env.BITBUCKET_BUILD_NUMBER,
        [CISystems.buddy]: utils_1.parseBooleanVariable(env.BUDDY),
        [CISystems.buildkite]: utils_1.parseBooleanVariable(env.BUILDKITE),
        [CISystems.circleCI]: utils_1.parseBooleanVariable(env.CIRCLECI),
        [CISystems.codeFresh]: env.CF_BUILD_ID,
        [CISystems.codeship]: utils_1.parseBooleanVariable(env.CODESHIP) || env.CI_NAME && env.CI_NAME.toLowerCase() === CODESHIP_CI_NAME,
        [CISystems.concourse]: Object.keys(env).find(key => CONCOURSE_RE.test(key)),
        [CISystems.drone]: utils_1.parseBooleanVariable(env.DRONE),
        [CISystems.githubActions]: utils_1.parseBooleanVariable(env.GITHUB_ACTIONS),
        [CISystems.gitlab]: utils_1.parseBooleanVariable(env.GITLAB_CI),
        [CISystems.goCD]: env.GO_JOB_NAME,
        [CISystems.googleCloud]: env.GCP_PROJECT,
        [CISystems.jenkins]: env.JENKINS_HOME || env.JENKINS_URL,
        [CISystems.layerCI]: utils_1.parseBooleanVariable(env.LAYERCI),
        [CISystems.netlify]: utils_1.parseBooleanVariable(env.NETLIFY),
        [CISystems.semaphore]: utils_1.parseBooleanVariable(env.SEMAPHORE),
        [CISystems.shippable]: utils_1.parseBooleanVariable(env.SHIPPABLE),
        [CISystems.teamCity]: utils_1.parseBooleanVariable(env.TEAMCITY_VERSION),
        [CISystems.teamFoundation]: env.TF_BUILD_BUILDNUMBER,
        [CISystems.travis]: utils_1.parseBooleanVariable(env.TRAVIS),
        [CISystems.wercker]: utils_1.parseBooleanVariable(env.WERCKER)
    };
    for (const ciSystem of Object.values(CISystems)) {
        if (ciDetectors[ciSystem])
            return ciSystem;
    }
    ;
    return null;
}
exports.detectCISystem = detectCISystem;
;