190 lines
6.2 KiB
YAML
190 lines
6.2 KiB
YAML
---
|
|
version: '3'
|
|
|
|
tasks:
|
|
before:
|
|
deps:
|
|
- :install:software:git
|
|
cmds:
|
|
- task: commit:config
|
|
- task: checkout
|
|
- task: lockfiles
|
|
- task: before:npm
|
|
status:
|
|
- '[ -z "$CI" ]'
|
|
|
|
before:npm:
|
|
deps:
|
|
- :install:npm:pnpm
|
|
log:
|
|
error: Error encountered while configuring pnpm to store its cache in `.pnpm-store`
|
|
start: Configuring pnpm to store its cache in `.pnpm-store`
|
|
success: Successfully updated pnpm to store its cache in `.pnpm-store`
|
|
cmds:
|
|
- pnpm config set store-dir .pnpm-store
|
|
|
|
checkout:
|
|
deps:
|
|
- :install:software:git
|
|
log:
|
|
error: Failed to pull latest changes
|
|
start: Pulling latest changes
|
|
success: Successfully pulled latest changes
|
|
cmds:
|
|
- cmd: git pull
|
|
ignore_error: true
|
|
- |
|
|
if [ "$CI_COMMIT_REF_NAME" == 'synchronize' ]; then
|
|
git checkout master
|
|
git pull origin master
|
|
else
|
|
git checkout "$CI_COMMIT_REF_NAME"
|
|
git pull origin "$CI_COMMIT_REF_NAME"
|
|
fi
|
|
status:
|
|
- '[ -n "$NO_GIT_CREDS" ]'
|
|
|
|
codeclimate:
|
|
deps:
|
|
- :install:software:docker
|
|
log:
|
|
error: Encountered error while running CodeClimate for CI
|
|
start: Running CodeClimate for CI
|
|
success: Successfully finished running CodeClimate for CI
|
|
cmds:
|
|
- |
|
|
if [ -f .config/codeclimate.yml ]; then
|
|
cp .config/codeclimate.yml .codeclimate.yml
|
|
else
|
|
curl -sSL https://gitlab.com/megabyte-labs/common/shared/-/raw/master/.config/codeclimate.yml > .codeclimate.yml
|
|
fi
|
|
- docker pull megabytelabs/codeclimate-internet
|
|
- docker tag megabytelabs/codeclimate-internet codeclimate/codeclimate
|
|
- task: :lint:codeclimate:load:custom-engines
|
|
- task: codeclimate:gitlab
|
|
|
|
codeclimate:gitlab:
|
|
cmds:
|
|
- docker run --rm --env CODECLIMATE_CODE="$PWD" --volume "$PWD":/code --volume /var/run/docker.sock:/var/run/docker.sock
|
|
--volume /tmp/cc:/tmp/cc codeclimate/codeclimate analyze --dev -f json > gl-code-quality-report.json
|
|
status:
|
|
- '[ -z "$GITLAB_CI" ]'
|
|
|
|
commit:
|
|
deps:
|
|
- :install:software:git
|
|
vars:
|
|
CURR_BRANCH:
|
|
sh: git rev-parse --abbrev-ref HEAD
|
|
log:
|
|
error: Encountered error while pushing changes to {{.CURR_BRANCH}}
|
|
start: Bypassing git hooks and pushing changes to {{.CURR_BRANCH}} (if there are any changes)
|
|
cmds:
|
|
- task: commit:config
|
|
- task: lockfiles:clean
|
|
- task --list > /dev/null || (echo "ERROR Invalid Taskfiles!" && exit 1)
|
|
- git add --all
|
|
- git diff --cached "*"
|
|
- |
|
|
if [[ $(git status --porcelain) ]]; then
|
|
git commit -m "☁️ chore(automation): Applying changes from upstream repository."
|
|
git push -q -o ci.skip origin {{.CURR_BRANCH}} || FAILED_PUSH=$?
|
|
if [ -n "$FAILED_PUSH" ]; then
|
|
git pull -X theirs origin {{.CURR_BRANCH}}
|
|
task --list &> /dev/null || (echo "ERROR: Invalid Taskfiles!" && exit 1)
|
|
git add --all
|
|
git commit -m "☁️ chore(automation): Merging changes from upstream repository with -X theirs."
|
|
git push --force -q -o ci.skip origin {{.CURR_BRANCH}}
|
|
fi
|
|
fi
|
|
status:
|
|
- '[ -z "$CI" ] || [ -n "$NO_GIT_CREDS" ]'
|
|
|
|
commit:config:
|
|
deps:
|
|
- :install:software:git
|
|
run: once
|
|
log:
|
|
error: Error configuring git
|
|
start: Configuring git to use CI-friendly parameters
|
|
success: Successfully configured git to use CI parameters
|
|
cmds:
|
|
- git remote set-url origin "https://root:$GROUP_ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git"
|
|
- git config user.email "$GITLAB_CI_EMAIL"
|
|
- git config user.name "$GITLAB_CI_NAME"
|
|
status:
|
|
- '[ -z "$GROUP_ACCESS_TOKEN" ] || [ -z "$GITLAB_CI_EMAIL" ] || [ -z "$GITLAB_CI_NAME" ] || [ -z "$GITLAB_CI" ]'
|
|
|
|
lockfiles:
|
|
cmds:
|
|
- |
|
|
if [ -f local/package-lock.json ]; then
|
|
cp local/package-lock.json package-lock.json
|
|
fi
|
|
- |
|
|
if [ -f local/yarn.lock ]; then
|
|
cp local/yarn.lock yarn.lock
|
|
fi
|
|
|
|
lockfiles:clean:
|
|
cmds:
|
|
- |
|
|
if [ -f local/package-lock.json ]; then
|
|
rm -f package-lock.json
|
|
fi
|
|
- |
|
|
if [ -f local/yarn.lock ];then
|
|
rm -f yarn.lock
|
|
fi
|
|
|
|
mirror:github:
|
|
deps:
|
|
- :donothing
|
|
|
|
submodules:
|
|
deps:
|
|
- :install:software:git
|
|
log:
|
|
error: Encountered error while ensuring submodules are up-to-date
|
|
start: Ensuring submodules are configured and up-to-date with their master remote
|
|
success: Ensured submodules are up-to-date
|
|
cmds:
|
|
- >
|
|
git submodule foreach 'git config user.email "$GITLAB_CI_EMAIL"; git config user.name "$GITLAB_CI_NAME";
|
|
DEFAULT_BRANCH="$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')";
|
|
git checkout -q "$DEFAULT_BRANCH"; git pull -q origin "$DEFAULT_BRANCH" --ff-only'
|
|
status:
|
|
- '[ -z "$CI" ] || [ -n "$NO_GIT_CREDS" ]'
|
|
|
|
synchronize:
|
|
deps:
|
|
- commit:config
|
|
run: once
|
|
log:
|
|
error: Failed to update the `synchronize` branch
|
|
start: Synchronizing the `synchronize` branch with the `master` branch
|
|
success: Successfully updated the `synchronize` branch
|
|
cmds:
|
|
- git fetch origin
|
|
- git checkout -b synchronize || git checkout synchronize
|
|
- git reset --hard HEAD
|
|
- git pull -q origin master
|
|
- |
|
|
git push --force -q -o ci.skip origin synchronize || FAILED_SYNC=$?
|
|
if [ -n "$FAILED_SYNC" ]; then
|
|
task git:gitlab:protected:off -- "synchronize"
|
|
git push --force -q -o ci.skip origin synchronize
|
|
fi
|
|
- task: synchronize:gitlab
|
|
- git checkout master
|
|
- task: :ci:github:synchronize
|
|
status:
|
|
- '[ -n "$NO_GIT_CREDS" ] || ([ "$FULLY_AUTOMATED_TASKS" != "true" ] && [ -z "$CI" ])'
|
|
|
|
synchronize:gitlab:
|
|
run: once
|
|
cmds:
|
|
- curl -s --request POST --form "token=${CI_JOB_TOKEN}" --form ref=master --form "variables[PIPELINE_SOURCE]=$PIPELINE_SOURCE"
|
|
"https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/trigger/pipeline"
|
|
status:
|
|
- '[ -z "$GITLAB_CI" ] || [ -n "$NO_GITLAB_SYNCHRONIZE" ]'
|