image: node:lts

stages:
    - test
    - build
    - release

before_script:
    - yarn install

cache: &global_cache
    paths:
        - node_modules
        - "packages/*/node_modules"
        - .eslint

lint:
    stage: test
    script:
        - yarn lint
    cache:
        <<: *global_cache

test:
    stage: test
    script:
        - yarn test:ci
    cache:
        <<: *global_cache
    artifacts:
        when: always
        reports:
            junit:
                - results.xml

build:
    stage: build
    script:
        - yarn build
        - mv dist ds4
    cache:
        <<: *global_cache
    artifacts:
        paths:
            - ds4
        expire_in: 1 week

.release-template: &release-template
    stage: release
    before_script:
        - yarn install
        - apt update
        - apt install --yes jq
        - REPOSITORY_URL=$(echo "${CI_REPOSITORY_URL}" | sed -e "s|gitlab-ci-token:.*@|${RELEASE_TOKEN}:${RELEASE_TOKEN_SECRET}@|g")
        - git remote set-url origin $REPOSITORY_URL
        - git config user.name $GITLAB_USER_LOGIN
        - git config user.email $GITLAB_USER_EMAIL
        - git branch -D ci-processing || true
        - git checkout -b ci-processing
    cache:
        <<: *global_cache
    script: |
        yarn updateManifest -- --update=${RELEASE_TYPE}
        RELEASE_VERSION=$(jq -r '.version' < package.json)
        git add package.json package-lock.json src/system.json
        git --no-pager diff
        git commit -m "release version ${RELEASE_VERSION}"
        git tag -f latest
        git tag -f ${RELEASE_VERSION}
        git push origin ci-processing:${CI_BUILD_REF_NAME}
        git push origin latest -f
        git push origin ${RELEASE_VERSION}
    only:
        - master
    when: manual

release-patch:
    variables:
        RELEASE_TYPE: patch
    <<: *release-template

release-minor:
    variables:
        RELEASE_TYPE: minor
    <<: *release-template

release-major:
    variables:
        RELEASE_TYPE: major
    <<: *release-template