# Copyright (c) 2013-2019 Arm Limited. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the License); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an AS IS BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. language: sh os: linux dist: focal env: global: - deps_url="https://mbed-os-ci-public.s3-eu-west-1.amazonaws.com/jenkins-ci/deps" - deps_dir="${HOME}/.cache/deps" cache: pip: true ccache: true directories: - ${HOME}/.cache/deps before_install: - source tools/test/travis-ci/functions.sh addons: apt: sources: - sourceline: 'deb https://apt.kitware.com/ubuntu/ focal main' key_url: 'https://apt.kitware.com/keys/kitware-archive-latest.asc' packages: - cmake - ninja-build - gcovr - libncursesw5 - g++-7 matrix: include: ### Basic Tests ### - &basic-vm stage: "Basic" name: "file attributes" env: NAME=gitattributestest script: - git diff --exit-code - <<: *basic-vm name: "license check" env: NAME=licence_check language: python python: 3.6.8 # scancode-toolkit v3.1.1 requires v3.6.8 install: # workaround for https://github.com/ARMmbed/mbed-os/issues/13322 - pip install pdfminer.six==20200517 - pip install scancode-toolkit==3.1.1 before_script: - mkdir -p SCANCODE - mkdir -p SCANCODE_NEW_FILES # Fetch the base branch to compare against - git fetch origin "${TRAVIS_BRANCH}" --depth=1 script: # scancode does not support list of files, only one file or directory # we use SCANCODE directory for all changed files (their copies with full tree) - >- git diff --name-only --diff-filter=ad FETCH_HEAD..HEAD \ | ( grep '.\(c\|cpp\|h\|hpp\|py\)$' || true ) \ | ( grep -v '^tools/test/toolchains/api_test.py' || true ) \ | while read file; do cp --parents "${file}" SCANCODE; done - scancode -l --json-pp scancode.json SCANCODE - python ./tools/test/travis-ci/scancode-evaluate.py scancode.json || true # run the same but for new files. All new files must have SPDX - >- git diff --name-only --diff-filter=A FETCH_HEAD..HEAD \ | ( grep '.\(c\|cpp\|h\|hpp\|py\)$' || true ) \ | ( grep -v '^tools/test/toolchains/api_test.py' || true ) \ | while read file; do cp --parents "${file}" SCANCODE_NEW_FILES; done - scancode -l --json-pp scancode_new_files.json SCANCODE_NEW_FILES - python ./tools/test/travis-ci/scancode-evaluate.py scancode_new_files.json || true - cat scancode-evaluate.log - COUNT=$(cat scancode-evaluate.log | grep 'File:' | grep -v 'SPDX' | wc -l) || true - python ./tools/test/travis-ci/scancode-evaluate.py scancode_new_files.json - cat scancode-evaluate.log - COUNT_NEW_FILES=$(cat scancode-evaluate.log | grep 'File:' | grep -v 'SPDX' | wc -l) || true - | if [ $COUNT == 0 ] && [ $COUNT_NEW_FILES == 0 ]; then echo "License check OK"; true; elif [ $COUNT_NEW_FILES != 0 ]; then echo "License check failed, new files with the license issues found"; false; else echo "License check failed, please review license issues found in modified files"; false; fi - <<: *basic-vm name: "UTF-8 Check" script: # Make sure we're not introducing any text which is not UTF-8 encoded - git diff $TRAVIS_BRANCH...HEAD -U0 | ( grep -a '^+' || true ) | ( ! grep -axv '.*' ) - <<: *basic-vm name: "include check" env: NAME=include_check script: - | ! git grep '^#include\s["'"']mbed.h['"'"]$' -- '*.c' '*.h' '*.cpp' '*.hpp' \ ':!*platform_mbed.h' ':!*TESTS/*' ':!TEST_APPS/' ':!UNITTESTS/' \ ':!*tests/*' ':!*targets/*' ':!*TARGET_*' ':!*unsupported/*' \ ':!*events/tests/*' ':!*drivers/tests/*' ### Docs Tests ### - &docs-vm stage: "Docs" name: "astyle" env: NAME=astyle install: - >- curl -L0 https://mbed-os-ci-public.s3-eu-west-1.amazonaws.com/jenkins-ci/deps/astyle_3.1_linux.tar.gz --output astyle.tar.gz; mkdir -p BUILD && tar xf astyle.tar.gz -C BUILD; cd BUILD/astyle/build/gcc; make; export PATH="${PWD}/bin:${PATH}"; cd - - astyle --version # Fetch the base branch to compare against - git fetch origin "${TRAVIS_BRANCH}" --depth=1 script: - >- git diff --name-only --diff-filter=d FETCH_HEAD..HEAD \ | ( grep '.*\.\(c\|cpp\|h\|hpp\)$' || true ) \ | ( grep -v -f .codecheckignore || true ) \ | while read file; do astyle -n --options=.astylerc "${file}"; done - git diff --exit-code --diff-filter=d --color - <<: *docs-vm name: "spellcheck" env: NAME=doxy-spellcheck install: - source_pkg aspell script: # TODO: run checks on all directories once all mispellings are fixed - ./tools/test/travis-ci/doxy-spellchecker/spell.sh drivers .codecheckignore - ./tools/test/travis-ci/doxy-spellchecker/spell.sh platform .codecheckignore - ./tools/test/travis-ci/doxy-spellchecker/spell.sh events .codecheckignore - ./tools/test/travis-ci/doxy-spellchecker/spell.sh rtos .codecheckignore - ./tools/test/travis-ci/doxy-spellchecker/spell.sh connectivity/netsocket .codecheckignore - <<: *docs-vm name: "doxygen" env: NAME=docs install: # Build doxygen - > (git clone --depth=1 --single-branch --branch Release_1_8_14 https://github.com/doxygen/doxygen; cd doxygen; mkdir build; cd build; cmake -G "Unix Makefiles" ..; make; sudo make install) # Create BUILD directory for tests - ccache -s - mkdir BUILD script: # Assert that the Doxygen build produced no warnings. # The strange command below asserts that the Doxygen command had an # output of zero length - doxygen doxyfile_options 2>&1 # Once Mbed OS has been fixed, enable the full test by replacing the top line with this: # - ( ! doxygen doxyfile_options 2>&1 | grep . ) # Assert that all binary libraries are named correctly # The strange command below asserts that there are exactly 0 libraries # that do not start with lib - > find "(" -name "*.a" -or -name "*.ar" ")" -and -not -name "lib*" | tee BUILD/badlibs | sed -e "s/^/Bad library name found: /" && [ ! -s BUILD/badlibs ] # Assert that all assembler files are named correctly # The strange command below asserts that there are exactly 0 libraries # that do end with .s - > find -name "*.s" | tee BUILD/badasm | sed -e "s/^/Bad Assembler file name found: /" && [ ! -s BUILD/badasm ] ### Python Tests ### - &pytools-vm stage: "Pytest" name: "tools-py35" env: NAME=tools-py3.5 language: python python: 3.7 install: # Install gcc - source_pkg gcc - arm-none-eabi-gcc --version # Install additional python modules - python --version - |- tr -d ' ' >> requirements.txt <<< " mock==2.0.0 attrs==19.1.0 pytest==3.3.0 pylint>=1.9,<2 hypothesis>=3,<4 coverage>=4.5,<5 " - pip install --upgrade pip - pip install -r requirements.txt - pip list --verbose script: # Run local testing on tools - PYTHONPATH=. coverage run -a -m pytest tools/test - python tools/test/pylint.py - coverage run -a tools/project.py -S | sed -n '/^Total/p' - coverage html - &extended-vm stage: "Pin validation" name: "pinvalidate" env: NAME=pinvalidate language: python python: 3.7 install: # Install python modules - pip install --upgrade pip - pip install tabulate argparse - pip list --verbose # Fetch the base branch to compare against - git fetch origin "${TRAVIS_BRANCH}" --depth=1 script: - >- git diff --name-only --diff-filter=d FETCH_HEAD..HEAD \ | ( grep '.*[\\|\/]PinNames.h$' || true ) \ | while read file; do python ./hal/tests/pinvalidate/pinvalidate.py -vvvfp "${file}"; done - git diff --exit-code --diff-filter=d --color ### CMake Check ### - &cmake-vm stage: "CMake Check" name: "Backward compatiblity check - MBED_TEST_MODE" env: NAME=mbed-test-mode-check ROOT=tools/cmake/tests/mbed_test_mode/ TOOLCHAIN=GCC_ARM TARGET_NAME=K64F PROFILE=develop language: python python: 3.8 install: # Hide Travis-preinstalled CMake # The Travis-preinstalled CMake is unfortunately not installed via apt, so we # can't replace it with an apt-supplied version very easily. Additionally, we # can't permit the Travis-preinstalled copy to survive, as the Travis default # path lists the Travis CMake install location ahead of any place where apt # would install CMake to. Instead of apt removing or upgrading to a new CMake # version, we must instead delete the Travis copy of CMake. - sudo rm -rf /usr/local/cmake* # Setup ccache - ccache -o compiler_check=content - ccache -M 1G - pushd /usr/lib/ccache - sudo ln -s ../../bin/ccache arm-none-eabi-gcc - sudo ln -s ../../bin/ccache arm-none-eabi-g++ - export PATH="/usr/lib/ccache:$PATH" - popd # Install arm-none-eabi-gcc - pushd /home/travis/build && mkdir arm-gcc && cd arm-gcc - curl -L0 "https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2?revision=05382cca-1721-44e1-ae19-1e7c3dc96118&la=en&hash=D7C9D18FCA2DD9F894FD9F3C3DC9228498FA281A" --output gcc-arm-none-eabi-9-2020-q2-update.tar.bz2 - tar xf gcc-arm-none-eabi-9-2020-q2-update.tar.bz2 - export PATH="$PATH:${PWD}/gcc-arm-none-eabi-9-2020-q2-update/bin" - popd - arm-none-eabi-gcc --version # Install python modules - pip install --upgrade mbed-tools - pip install -r tools/cmake/requirements.txt script: - mbedtools configure -p ${ROOT} -t ${TOOLCHAIN} -m ${TARGET_NAME} --mbed-os-path . - cmake -S ${ROOT} -B ${ROOT}/cmake_build/${TARGET_NAME}/${PROFILE}/${TOOLCHAIN}/ -GNinja -DCMAKE_BUILD_TYPE=${PROFILE} - cmake --build ${ROOT}/cmake_build/${TARGET_NAME}/${PROFILE}/${TOOLCHAIN}/ ### Mbed OS unittest ### - &cmake-build-run-unittest stage: "CMake" name: "CMake unittest build" env: NAME=cmake_unittest install: # Hide Travis-preinstalled CMake # The Travis-preinstalled CMake is unfortunately not installed via apt, so we # can't replace it with an apt-supplied version very easily. Additionally, we # can't permit the Travis-preinstalled copy to survive, as the Travis default # path lists the Travis CMake install location ahead of any place where apt # would install CMake to. Instead of apt removing or upgrading to a new CMake # version, we must instead delete the Travis copy of CMake. - sudo rm -rf /usr/local/cmake* script: - echo ctest --build-and-test . build --build-generator Ninja --build-options -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Debug -DCOVERAGE=ON -DCMAKE_CXX_COMPILER=g++-7 -DCMAKE_C_COMPILER=gcc-7 --test-command ctest - ctest --build-and-test . build --build-generator Ninja --build-options -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Debug -DCOVERAGE=ON -DCMAKE_CXX_COMPILER=g++-7 -DCMAKE_C_COMPILER=gcc-7 --test-command ctest - gcovr --gcov-executable gcov-7 -r . ./build -s -e ".*\.h" --exclude-directories=$TRAVIS_BUILD_DIR/build/UNITTESTS --exclude-directories=$TRAVIS_BUILD_DIR/build/_deps - ccache -s ### Frozen tools check ### - &frozen-tools-vm stage: "Frozen tools check" name: "Frozen tools check" env: NAME=frozen_tools_check before_script: # Fetch the base branch to compare against - git fetch origin "${TRAVIS_BRANCH}" --depth=1 script: # Reject any changes to tools that would require a re-release of the # tools for the online compiler. - >- frozen_files=`\ git diff --name-only FETCH_HEAD..HEAD \ | egrep \ -e "^tools/build_api*" \ -e "^tools/config*" \ -e "^tools/export*" \ -e "^tools/notifier*" \ -e "^tools/paths*" \ -e "^tools/resources*" \ -e "^tools/targets*" \ -e "^tools/toolchains*" \ -e "^tools/utils*" \ -e "^$"` if [ -z "$frozen_files" ]; then echo "Success!"; else echo -e "Failure: Frozen files were modified\n$frozen_files"; echo -e "Please see https://os.mbed.com/blog/entry/Introducing-the-new-Mbed-Tools/" \ "\nfor why we've frozen the legacy tools."; false; fi