Awesome
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.
Install
npm i cross-ci
Node usage
const vars = require('cross-ci').vars;
CLI usage
npx cross-ci printenv BUILD_COMMIT_URL
Variables
BUILD_BRANCH
BUILD_COMMIT_PR_URL
BUILD_COMMIT_URL
BUILD_COMMIT
BUILD_COMMIT7
BUILD_DIR
BUILD_NUM
BUILD_PR_NUM
BUILD_PR_URL
BUILD_URL
BUILD_VERSION
CI_NAME
CI_PLATFORM
GIT_PLATFORM
GIT_REMOTE
GITHUB_TOKEN
IS_CI
IS_PR
IS_RELEASE
JOB_NUM
JOB_URL
MONTH
PROJECT_NAME
PROJECT_OWNER
PROJECT_URL
PROJECT_VERSION
RELEASE_BRANCHES
TIME
TIMESTAMP
UPLOAD_PATH
YEAR
Pseudo Commands
:echo
npx cross-ci :echo node --eval "\"console.log('\${PROJECT_NAME}')\""
:run
npx 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
npx cross-ci :run \
npx commit-status success Storybook "'\${BUILD_VERSION}'" "'https://example.com'"
Upload to S3
npx cross-ci :run \
s3 sync ./public "s3://bucket/builds/\${PROJECT_NAME}/\${BUILD_VERSION}/public" \
--region eu-west-1 \
--acl public-read
Post to Slack
npx 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 \
npx 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}"
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_COMMIT7
First 7 chars of 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.