Files
xo-stack/.gitlab-ci.yml
T
2025-02-16 06:57:26 +00:00

70 lines
2.2 KiB
YAML

image: node:22
stages:
- test
- publish
cache:
# The cache is shared for same values of cache key
# Here, we use CI_PIPELINE_ID which is defined as:
# "The instance-level ID of the current pipeline. This ID is unique across all projects on the GitLab instance."
# This should ensure that we only cache the "node_modules" folder for this given pipeline instance.
# Refer to this docs to know more about the predefined variables used in the key here: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
key: $CI_PIPELINE_ID
# configure the path to be cached
paths:
- node_modules/
before_script:
- npm install
- npm run build
test:
stage: test
script:
# Run tests
- npm run test
# Ensure no circular dependencies
- npm run madge
publish:development:
stage: publish
# Configure what tag to use for this publication.
variables:
NPM_TAG: 'development'
GITLAB_USER_EMAIL: 'ci@stack.xo.cash'
GITLAB_USER_NAME: 'GitLab CI'
script:
# Setup git config
- git config --global user.email "${GITLAB_USER_EMAIL}"
- git config --global user.name "${GITLAB_USER_NAME}"
# Configure git to push with CI token
- git remote set-url origin "https://gitlab-ci-token:$GL_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git"
# Checkout the development branch so that we're not on a detached HEAD (which GitLab CI will default to).
- git checkout development
# Setup npm config for npmjs.com
- npm config set registry https://registry.npmjs.org/
- npm config set //registry.npmjs.org/:_authToken ${NPM_AUTH_TOKEN}
# Version and publish
- npx lerna publish --yes --canary --preid ${NPM_TAG} --dist-tag ${NPM_TAG}
rules:
# Only run on development branch and when actioning merge requests.
# NOTE: If we don't run on only merge requests, we end up with an infinite looping due to Lerna updating the branch with its version commits.
- if: $CI_COMMIT_BRANCH == "development" && $CI_PIPELINE_SOURCE == 'merge_request_event'
# Publish the documentation to GitLab Pages (for now).
pages:
stage: publish
script:
- npm run docs:build
- mv packages/docs/dist public
artifacts:
paths:
- public
only:
- development