language: c

compiler: gcc

env:
    global:
        - SDK=0.9
        - SANITYCHECK_OPTIONS=" --inline-logs -R"
        - SANITYCHECK_OPTIONS_RETRY=" --inline-logs --only-failed --outdir=out-2nd-pass"
        - ZEPHYR_SDK_INSTALL_DIR=/opt/sdk/zephyr-sdk-0.9
        - ZEPHYR_GCC_VARIANT=zephyr
        - USE_CCACHE=1
    matrix:
        - ARCH="-a x86 -a riscv32" RUN_COMPLIANCE="1"
        - ARCH="-a arm -a arc -a nios2"

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

    ci:
      - export CCACHE_DIR=${SHIPPABLE_BUILD_DIR}/ccache/.ccache
      - source zephyr-env.sh
      - ccache -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 [ "$RUN_COMPLIANCE" = "1" -a "$IS_PULL_REQUEST" = "true" ]; then
            export COMMIT_RANGE=origin/${PULL_REQUEST_BASE_BRANCH}..${COMMIT}
            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 [ -s doc.warnings ]; then
              echo " => New documentation warnings/errors";
            fi;
            echo "- Verify commit message and coding style";
            ./scripts/ci/check-compliance.py || true;
          fi;
      - >
          if [ "$JOB_TRIGGERED_BY_NAME" = "daily-verify-asserts" ]; then
            echo "- Building with --all --enable-slow -R";
            COVERAGE="--all --enable-slow -R";
          fi;
      - >
          if [ "$JOB_TRIGGERED_BY_NAME" = "daily-verify" ]; then
            echo "- Building with --all --enable-slow";
            COVERAGE="--all --enable-slow";
          fi;
      - >
          if [ "$JOB_TRIGGERED_BY_NAME" = "code-scan" ]; then
            echo "- Building basic sanitycheck";
            wget https://scan.coverity.com/download/linux64 --post-data "token=${COVERITY_TOKEN}&project=Zephyr" -O coverity_tool.tgz;
            tar xvf coverity_tool.tgz;
            rm -f coverity_tool.tgz;
            mv cov-*  cov-analysis;
            ./scripts/ci/run-coverity.sh
          fi;
      - >
          if [ "$JOB_TRIGGERED_BY_NAME" != "code-scan" ]; then
            ./scripts/sanitycheck ${PLATFORMS} ${ARCH} ${COVERAGE} ${SANITYCHECK_OPTIONS} || ./scripts/sanitycheck ${PLATFORMS} ${ARCH} ${COVERAGE} ${SANITYCHECK_OPTIONS_RETRY};
          fi
      - ccache -s
    on_success:
      - 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.xml;
          fi;
    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.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
