# Executes a command registered inside of package.json. For more information on
# how this works, see https://docs.npmjs.com/cli/run-script. This build assumes
# that whatever is being run under the hood, it will pipe its output to the
# ./reports directory in the projects' root directory. This output is
# subsequently copied to static.openstack.org (the clickthrough target from
# gerrit).
- job-template:
    name: 'gate-{name}-npm-run-{command}'

    wrappers:
      - build-timeout:
          timeout: 40
      - timestamps

    builders:
      - npm-install
      - xvfb-install
      - chrome-install
      - firefox-install
      - revoke-sudo
      - xvfb-start
      - gerrit-git-prep
      - npm-run:
          command: '{command}'
      - assert-no-extra-files
    publishers:
      - console-log
      - coverage-log
      - scp:
          site: 'static.openstack.org'
          files:
            - target: 'logs/$LOG_PATH'
              source: 'reports/**'
              keep-hierarchy: true
              copy-after-failure: true
    node: '{node}'

# Runs Grunt Tests. To use this build, your Gruntfile must declare
# a target named test:{name}, such as test:unit, test:integration, or
# test:functional
- job-template:
    name: 'gate-{name}-js-test-{test-type}'

    wrappers:
      - build-timeout:
          timeout: 40
      - timestamps

    builders:
      - npm-install
      - xvfb-install
      - chrome-install
      - revoke-sudo
      - gerrit-git-prep
      - js-build:
          command: 'test:{test-type}'
          envlist: 'grunt'
          project: '{name}'
      - assert-no-extra-files

    publishers:
      - console-log
      - coverage-log
      - scp:
          site: 'static.openstack.org'
          files:
            - target: 'logs/$LOG_PATH'
              source: 'reports/**'
              keep-hierarchy: true
              copy-after-failure: true
    node: '{node}'

# Builds a draft application and uploads it to docs-draft. To use this build,
# your Gruntfile must declare a target named "build:draft"
- job-template:
    name: 'gate-{name}-js-draft'

    wrappers:
      - build-timeout:
          timeout: 40
      - timestamps

    builders:
      - npm-install
      - revoke-sudo
      - gerrit-git-prep
      - js-build:
          command: 'build:draft'
          envlist: 'grunt'
          project: '{name}'
      - assert-no-extra-files

    publishers:
      - console-log
      - coverage-log
      - scp:
          site: 'static.openstack.org'
          files:
            - target: 'logs/$LOG_PATH'
              source: 'reports/**'
              keep-hierarchy: true
              copy-after-failure: true

              # We're uploading the compiled app as a pre-release sanity check,
              # much like we do with docs builds.
            - target: 'docs-draft/$LOG_PATH'
              source: 'dist/**'
              keep-hierarchy: true
              copy-after-failure: false
    node: '{node}'

# Builds a release tarball
- job-template:
    name: '{name}-js-release-{branch-designator}'

    builders:
      - npm-install
      - revoke-sudo
      - gerrit-git-prep
      - js-build:
          command: 'build'
          envlist: 'grunt'
      - shell: |
          #!/bin/bash -xe
          /usr/local/jenkins/slave_scripts/version-properties.sh
          source version.properties

          # Clean/create a tarball directory
          rm -rf tarballs
          mkdir -p tarballs

          # Create an archive tarball.
          tar -czf {name}-$PROJECT_VER.tar.gz dist/
          cp {name}-$PROJECT_VER.tar.gz tarballs/{name}-latest.tar.gz
          mv {name}-$PROJECT_VER.tar.gz tarballs/
    publishers:
      - console-log
      - coverage-log
      - scp:
          site: 'static.openstack.org'
          files:
            - target: 'logs/$LOG_PATH'
              source: 'reports/**'
              keep-hierarchy: true
              copy-after-failure: true
            - target: 'tarballs/{name}/'
              source: 'tarballs/*.tar.gz'
              keep-hierarchy: false
              copy-after-failure: false
    node: '{node}'