os: linux
dist: bionic
language: node_js

# Enable caching for yarn & node_modules
cache:
  yarn: true

node_js:
  - "10"
  - "12"

# Install latest chrome (for e2e headless testing). Run an update if needed.
addons:
  apt:
    sources:
      - google-chrome
    packages:
      - google-chrome-stable
    update: true

env:
  # The ci step will test the dspace-angular code against DSpace REST.
  # Direct that step to utilize a DSpace REST service that has been started in docker.
  DSPACE_REST_HOST: localhost
  DSPACE_REST_PORT: 8080
  DSPACE_REST_NAMESPACE: '/server/api'
  DSPACE_REST_SSL: false

before_install:
  # Check our versions of everything
  - echo "Check versions"
  - yarn -v
  - docker-compose -v
  - google-chrome-stable --version

install:
  # Start up a test DSpace 7 REST backend using the entities database dump
  - docker-compose -f ./docker/docker-compose-travis.yml up -d
  # Use the dspace-cli image to populate the assetstore. Triggers a discovery and oai update
  - docker-compose -f ./docker/cli.yml -f ./docker/cli.assetstore.yml run --rm dspace-cli
  # Install all local dependencies (retry if initially fails)
  - travis_retry yarn install

before_script:
  - echo "Check Docker containers"
  - docker container ls
  # The following line could be enabled to verify that the rest server is responding.
  #- echo "Check REST API available (via Docker)"
  #- curl http://localhost:8080/server/

script:
  # build app and run all tests
  - ng lint || travis_terminate 1;
  - travis_wait yarn run build:prod || travis_terminate 1;
  - yarn test:headless || travis_terminate 1;
  - yarn run e2e:ci || travis_terminate 1;

after_script:
  # Shutdown docker after everything runs
  - docker-compose -f ./docker/docker-compose-travis.yml down

# After a successful build and test (see 'script'), send code coverage reports to coveralls.io
# These code coverage reports are generated by the coveralls node module in our package.json
after_success:
  - cat coverage/dspace-angular/lcov.info | ./node_modules/coveralls/bin/coveralls.js
