language: c

compiler: gcc

env:
    global:
        - SDK=0.9.1
        - SANITYCHECK_OPTIONS=" --inline-logs -R"
        - SANITYCHECK_OPTIONS_RETRY="${SANITYCHECK_OPTIONS} --only-failed --outdir=out-2nd-pass"
        - ZEPHYR_SDK_INSTALL_DIR=/opt/sdk/zephyr-sdk-0.9.1
        - ZEPHYR_GCC_VARIANT=zephyr
        - USE_CCACHE=1
        - MATRIX_BUILDS="2"
        - MATRIX_BUILDS_EXTRA="3"
    matrix:
        - MATRIX_BUILD="1"
        - MATRIX_BUILD="2"
        - MATRIX_BUILD="3"

build:
    cache: true
    cache_dir_list:
        - ${SHIPPABLE_BUILD_DIR}/ccache
    pre_ci_boot:
        image_name: zephyrprojectrtos/ci
        image_tag: master.27
        pull: true
        options: "-e HOME=/home/buildslave --privileged=true --tty --net=bridge --user buildslave"

    ci:
      - export CCACHE_DIR=${SHIPPABLE_BUILD_DIR}/ccache/.ccache
      - git rebase origin/${PULL_REQUEST_BASE_BRANCH}
      - source zephyr-env.sh
      - ccache -c -s --max-size=2000M
      - make host-tools
      - export PREBUILT_HOST_TOOLS=${ZEPHYR_BASE}/bin
      - >
          if [ "$IS_PULL_REQUEST" = "true" ]; then
            S3_PATH="s3://zephyr-logs/pull-requests/${REPO_FULL_NAME}/${PULL_REQUEST}"
          else
            if [ "$JOB_TRIGGERED_BY_NAME" = "undefined" ]; then
              LOG_TYPE="manual";
            else
              LOG_TYPE=${JOB_TRIGGERED_BY_NAME};
            fi;

            S3_PATH="s3://zephyr-logs/${LOG_TYPE}/${REPO_FULL_NAME}/${BUILD_NUMBER}";
          fi;
      - >
          if [ "$MATRIX_BUILD" = "3" -a "$IS_PULL_REQUEST" = "true" ]; then
            export COMMIT_RANGE=origin/${PULL_REQUEST_BASE_BRANCH}..HEAD
            echo "Building a Pull Request";
            echo "- Building Documentation";
            echo "Commit range:" ${COMMIT_RANGE}
            make htmldocs > doc.log 2>&1;
            ./scripts/filter-known-issues.py --config-dir .known-issues/doc/ doc.log > doc.warnings;

            if [ "$?" != 0 ]; then
              echo " ==> Error running filter script"
              exit 1
            fi;
            if [ -s doc.warnings ]; then
              echo " => New documentation warnings/errors";
            fi;
            echo "- Verify commit message and coding style";
            ./scripts/ci/check-compliance.py --commits ${COMMIT_RANGE} || true;
          fi;
      - >
          sudo pip3 install sh;
          ./scripts/ci/get_modified_tests.py --commits origin/${PULL_REQUEST_BASE_BRANCH}..HEAD > modified_tests.args;

          if [ -s modified_tests.args ]; then
            ./scripts/sanitycheck --subset ${MATRIX_BUILD}/${MATRIX_BUILDS_EXTRA} +modified_tests.args;
            cp ./scripts/sanity_chk/last_sanity.xml modified_tests.xml;
          fi;
          rm -f modified_tests.args;
      - >
          if [ "$MATRIX_BUILD" != "3" ]; then
          	./scripts/sanitycheck ${PLATFORMS} --subset ${MATRIX_BUILD}/${MATRIX_BUILDS} ${COVERAGE} ${SANITYCHECK_OPTIONS} || ./scripts/sanitycheck ${PLATFORMS} --subset ${MATRIX_BUILD}/${MATRIX_BUILDS}  ${COVERAGE} ${SANITYCHECK_OPTIONS_RETRY};
          fi;
      - ccache -s
    on_failure:
      - rm -rf sanity-out out-2nd-pass
      - mkdir -p shippable/testresults
      - >
          if [ -e compliance.xml ]; then
            cp compliance.xml shippable/testresults/;
            aws s3 cp compliance.xml ${S3_PATH}/;
          fi;
      - >
          if [ -e ./scripts/sanity_chk/last_sanity.xml ]; then
            cp ./scripts/sanity_chk/last_sanity.xml shippable/testresults/;
            aws s3 cp ./scripts/sanity_chk/last_sanity.xml ${S3_PATH}/sanitycheck.${MATRIX_BUILD}.xml;
          fi;
      - >
          if [ -e ./modified_tests.xml ]; then
            cp ./modified_tests.xml shippable/testresults/;
            aws s3 cp ./modified_tests.xml ${S3_PATH}/modified_tests.xml;
          fi;
    on_success:
      - rm -rf sanity-out out-2nd-pass
      - mkdir -p shippable/testresults
      - >
          if [ "$MATRIX_BUILD" = "3" -a "$IS_PULL_REQUEST" = "true" ]; then
            aws s3 sync --quiet  doc/_build/html ${S3_PATH}/doc;
            aws s3 sync --quiet  doc/doxygen/html ${S3_PATH}/api;
          fi
      - >
          if [ -e compliance.xml ]; then
            cp compliance.xml shippable/testresults/;
            aws s3 cp compliance.xml ${S3_PATH}/;
          fi;
      - >
          if [ -e ./scripts/sanity_chk/last_sanity.xml ]; then
            cp ./scripts/sanity_chk/last_sanity.xml shippable/testresults/;
            aws s3 cp ./scripts/sanity_chk/last_sanity.xml ${S3_PATH}/sanitycheck.${MATRIX_BUILD}..xml;
          fi;
      - >
          if [ -e ./modified_tests.xml ]; then
            cp ./modified_tests.xml shippable/testresults/;
            aws s3 cp ./modified_tests.xml ${S3_PATH}/modified_tests.xml;
          fi;

integrations:
  notifications:
    - integrationName: slack_integration
      type: slack
      recipients:
        - "#ci"
      branches:
        only:
          - master
      on_success: never
      on_failure: always
    - integrationName: email
      type: email
      recipients:
        - builds@zephyrproject.org
      branches:
        only:
          - master
          - net
          - bluetooth
          - arm
      on_success: never
      on_failure: never
