cross-ci

`cross-ci` standardizes environment variables for CI. For example, your can simply use `BUILD_BRANCH` variable in all CI runners instead of `CIRCLE_BRANCH` in CircleCI or `TRAVIS_PULL_REQUEST_BRANCH` in Travis. Supports [all `env-ci` implemented services]

Usage no npm install needed!

<script type="module">
  import crossCi from 'https://cdn.skypack.dev/cross-ci';
</script>

README

cross-ci

cross-ci standardizes environment variables for CI. For example, your can simply use BUILD_BRANCH variable in all CI runners instead of CIRCLE_BRANCH in CircleCI or TRAVIS_PULL_REQUEST_BRANCH in Travis. Supports all env-ci implemented services.

Install
npm i cross-ci
Install Globally
npm i -g cross-ci
Node usage
const vars = require('cross-ci').vars;
CLI usage
cross-ci printenv BUILD_COMMIT_URL

Variables

Pseudo Commands

:echo
cross-ci :echo node --eval "\"console.log('\${PROJECT_NAME}')\""
:run
cross-ci :run node --eval "\"console.log('\${PROJECT_NAME}')\""

Examples

Provide Evn Vars to Webpack, from package.json
{
    "scripts": {
        "build": "cross-ci webpack -p"
    }
}
Update GitHub status
cross-ci :run \
    npx commit-status success Storybook "'\${BUILD_VERSION}'" "'https://example.com'"
Upload to S3
cross-ci :run \
    s3 sync ./public "s3://bucket/builds/\${PROJECT_NAME}/\${BUILD_VERSION}/public" \
        --region eu-west-1 \
        --acl public-read
Post to Slack
cross-ci :run \
    curl -X POST -H 'Content-type: application/json' \
        --data "'{\
            \"text\":\"Built \\\`<\${PROJECT_URL}|\${PROJECT_NAME}>\\\` :crossed_fingers: \\\`<\${BRANCH_URL}|\${BUILD_BRANCH}>\\\` :crossed_fingers: \\\`\${BUILD_VERSION}\\\` on <\${BUILD_URL}|\${CI_NAME}> :tada:\", \
            \"username\": \"cross-ci\", \
            \"icon_emoji\": \":clap:\"}'" \
        https://hooks.slack.com/services/XXXX/XXXX/XXXXXXXX
Post to GitHub
GITHUB_TOKEN=XXXXXXXX \
    cross-ci :run \
        curl -X POST -H "Content-Type: application/json" \
            --data "'{\"body\": \"Build version: \\\`\${BUILD_VERSION}\\\` :crossed_fingers: [\\\`\${BUILD_BRANCH}\\\`](\${BRANCH_URL}) on [\${CI_NAME}](\${BUILD_URL}) :tada:\"}'" \
        "https://api.github.com/repos/\${PROJECT_OWNER}/\${PROJECT_NAME}/issues/\${BUILD_PR_NUM}/comments?access_token=\${GITHUB_TOKEN}"
Display all env vars and save to buildinfo.json
cross-ci
cross-ci > buildinfo.json

Variable Reference

BUILD_BRANCH

Git branch being built or targeted by a pull request.

BUILD_COMMIT_PR_URL

URL of PR build commit.

BUILD_COMMIT_URL

URL of build commit.

BUILD_COMMIT

SHA1 of the Git commit being built.

BUILD_DIR

Path to repository folder.

BUILD_NUM

CI service build number.

BUILD_PR_NUM

Pull request (aka Merge request) number. Defaults to 0.

BUILD_PR_URL

URL to GitHub PR page.

BUILD_URL

URL to CI build page.

BUILD_VERSION

A human-readable string uniquely identifying current build. For pull requests will equal to something like x.y.z-pr-1.1. For build jobs that are not part of a pull request, it will contain a branch name, like x.y.z-master.1.

CI_NAME

CI service Commercial name (e.g. Travis, CircleCI, TeamCity).

CI_PLATFORM

Standardized CI service name (e.g. travis, circle, gitlab).

GIT_PLATFORM

Git version control system used

GIT_REMOTE

Git remote used.

GITHUB_TOKEN

Equals to GITHUB_TOKEN, GITHUB_ACCESS_TOKEN, GH_TOKEN, or GIT_CREDENTIALS environment variables, in that order.

IS_CI

Boolean indicating if script runs in a CI environment.

IS_PR

Boolean, true if the current build is triggered by a pull request.

IS_RELEASE

Is true if currently built branch is one of RELEASE_BRANCHES.

JOB_NUM

CI service job number

JOB_URL

Link to the CI service job

MONTH

Current month numeric value as a string of length two.

PROJECT_NAME

GitHub project name.

PROJECT_OWNER

User name or organization name that owns the repository.

PROJECT_URL

Link to project on GitHub.

PROJECT_VERSION

Semver version of your project. Taken from package.json. Othewise defaults to 0.0.0.

RELEASE_BRANCHES

Names of branches which should trigger a release, defaults to ['master', 'production'].

TIME

Current time in UTC format.

TIMESTAMP

UNIX timestamp.

UPLOAD_PATH

Relative upload path for artifacts. Defaults to:

builds/${PROJECT_NAME}/${BUILD_VERSION}

YEAR

Current year as a four character long string.