defaults: &defaults
  docker:
    - image: appirio/dx:latest
  working_directory: ~/adx-circleci-sfdx-packaging

version: 2.0
jobs:
  sonarqube_scan:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: sonarqube_scan
          command: >-
                  sonar-scanner-ee
                  -Dsonar.login=$SONAR_LOGIN
                  -Dsonar.branch.name=$CIRCLE_BRANCH
                  -Dsonar.qualitygate.wait=true
                  -Dsonar.qualitygate.timeout=300

  version_package:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: version_package
          command: adx sfdx:package:publish --installationkeybypass

  install_to_SIT:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: install_to_SIT
          command: adx sfdx:package:install --destination SIT

  install_to_UAT:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: install_to_UAT
          command: adx sfdx:package:install --destination UAT

  install_to_PROD:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: install_to_PROD
          command: adx sfdx:package:install --destination PROD --release

workflows:
  version: 2
  build-and-deploy:
    jobs:
      - sonarqube_scan
      - version_package:
          requires:
              - sonarqube_scan
          filters:
             branches:
              only:
                - master
      - install_to_SIT:
          requires:
              - version_package
          filters:
             branches:
              only:
                - master
      - prepare_for_uat_manual_job:
          type: approval
          filters:
            branches:
              only:
                - master
      - install_to_UAT:
          requires:
              - prepare_for_uat_manual_job
          filters:
             branches:
              only:
                - master
      - prepare_for_prod_manual_job:
          requires:
              - install_to_UAT
          type: approval
          filters:
            branches:
              only:
                - master
      - install_to_PROD:
          requires:
              - prepare_for_prod_manual_job
          filters:
             branches:
              only:
                - master
