---
version: '3'

tasks:
  app:beta:
    deps:
      - :publish:android:beta
      - :publish:chrome:private
      - :publish:firefox:private
      - :publish:ios:beta
      - :publish:opera:private
    desc: Publish a beta release of all the release targets
    hide: '{{ne (print .REPOSITORY_TYPE "-" .REPOSITORY_SUBTYPE) "angular-app"}}'
    log:
      error: Error publishing beta release
      start: Publishing beta release
      success: Finished publishing beta release

  app:release:
    deps:
      - :publish:android:release
      - :publish:brew:cask
      - :publish:chrome:release
      - :publish:firefox:release
      - :publish:ios:release
      - :publish:opera:release
      - :publish:menubar:release
    desc: Publish a production release of all the targets
    hide: '{{ne (print .REPOSITORY_TYPE "-" .REPOSITORY_SUBTYPE) "angular-app"}}'
    summary: |
      This task is used to release Angular applications.
    log:
      error: Error publishing `production` release
      start: Publishing `production` release
      success: Successfully published `production` release

  semantic-release:
    deps:
      - task: :install:modules:local
        vars:
          SEMANTIC_RELEASE:
            sh: echo true
      - :install:npm:semantic-release
      - :install:software:git
    vars:
      RELEASE_PREFIX:
        sh: if [ -f setup.cfg ]; then echo 'poetry run '; else echo ''; fi
      RUN_OPTIONS: '{{if .CLI_ARGS}} {{.CLI_ARGS}}{{else}} --ci false --debug --dry-run false{{end}}'
    env:
      GIT_CREDENTIALS:
        sh: |
          if [ -n "$CI" ]; then
            echo "gitlab-ci-token:$CI_BUILD_TOKEN"
          fi
      HUSKY: '0'
      PUBLISHING: 'true'
      SEMANTIC_RELEASE: 'true'
    log:
      error: Error while running `semantic-release`
      start: Releasing with `semantic-release`..
      success: Finished running `semantic-release`
    cmds:
      - git fetch --tags -f
      - task: semantic-release:prepare
      - |
        {{.RELEASE_PREFIX}}semantic-release -r "$(git remote get-url origin)"{{.RUN_OPTIONS}}
      - git push all master || git push origin master

  semantic-release:build:
    cmds:
      - rm -rf artifacts build dist
      - task: :release:build

  semantic-release:poetry:
    deps:
      - :install:software:poetry
    cmds:
      - poetry install -E semantic
    status:
      - '[ ! -f setup.cfg ]'

  semantic-release:prepare:
    deps:
      - task: :install:modules:local:sync
        vars:
          NPM_KEEP_UPDATED: '{{.SEMANTIC_CONFIG}}'
      - :common:update:variables
      - :npm:config
      - semantic-release:build
      - semantic-release:poetry
      - version:tag

  version:tag:
    deps:
      - :ci:commit:config
      - :install:software:jq
    summary: |
      This command is intended to be used before the `semantic-release` task to ensure
      that the latest git tag is up-to-date with the latest `package.json` version.
    cmds:
      - git fetch --all --tags -f
      - git tag "v$(jq -r '.version' package.json)"
    status:
      - git tag | grep "v$(jq -r '.version' package.json)"
    preconditions:
      - sh: '[ -f package.json ]'
        msg: A package.json file must be present!
      - sh: '[ "$(jq -r \".version\" package.json)" != "null" ]'
        msg: Version must be defined in package.json