version: 2.1
commands:
    npm-auth:
        description: Authenticate with registry
        steps:
            - run: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc

aliases:
    - &nodejs-docker
      docker:
          - image: circleci/node:12
    - &attach-tmp-workspace
      attach_workspace:
          at: /tmp/workspace
    - &tmp-working-directory
      working_directory: /tmp/workspace
    - &remote-docker
      setup_remote_docker:
          version: 18.05.0-ce

jobs:
    build:
        <<: *nodejs-docker
        <<: *tmp-working-directory
        steps:
            - checkout
            - *remote-docker
            - *attach-tmp-workspace
            - npm-auth
            - run:
                  name: Install dependencies
                  command: npm install
            - run:
                  name: Build
                  command: npm run build

            - run:
                  name: Delete devDependencies
                  command: rm -rf node_modules
            - persist_to_workspace:
                  root: /tmp/workspace
                  paths:
                      - lib

    release:
        <<: *nodejs-docker
        <<: *tmp-working-directory
        steps:
            - checkout
            - *remote-docker
            - *attach-tmp-workspace
            - npm-auth
            - run:
                  name: Install dependencies
                  command: npm install --only=prod
            - run:
                  name: Install semantics release
                  command: sudo npm install semantic-release @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/git @semantic-release/github @semantic-release/npm @semantic-release/release-notes-generator -g
            - run:
                  name: Release
                  command: npm run release

workflows:
    version: 2.1
    audit-test-release:
        jobs:
            - build
            - release:
                  context: auth
                  filters:
                      branches:
                          only: master
                  requires:
                      - build
