diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..6d7844d2 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,91 @@ +version: 2 + +# Copyright (C) 2018-2019 LEIDOS. +# +# 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 +# +# http://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. +# + +# Configuration file for Circle CI +# CI will report failure if any executed command returns and error status +# Operations performed are as follows +# Build source code +# Run unit tests for C++ and Java +# Run static code analyzer for SourceCloud +# Upload test results +# Every run command should start with source ${INIT_ENV} to ensure all default dependancies are available +jobs: + build: + # Pull docker image from docker hub + # XTERM used for better catkin_make output + docker: + - image: usdotfhwastol/carma-base-ci:2.8.4 + user: carma + environment: + TERM: xterm + INIT_ENV: /home/carma/.base-image/init-env.sh + # Set working directory + working_directory: "/opt/carma/" + # Pull code and execute tests + # Name of each run command defines purpose use + steps: + - run: + name: Create src folder + command: | + source ${INIT_ENV} + mkdir src + cd src + mkdir CARMAAvtVimbaDriver + mkdir CARMAMsgs + # Checkout PR branch + - checkout: + path: src/CARMAAvtVimbaDriver + - run: + name: Pull CARMAMsgs + command: | + source ${INIT_ENV} + git clone -b develop --depth 1 git@github.com:usdot-fhwa-stol/CARMAMsgs.git src/CARMAMsgs + - run: + name: Build Driver + command: | + source ${INIT_ENV} + build-wrapper-linux-x86-64 --out-dir /opt/carma/bw-output catkin_make install -j 2 + - run: + name: Run C++ Tests + command: | + source ${INIT_ENV} + catkin_make run_tests + # Run SonarCloud analysis + # PR Branchs and number extracted from Circle variables and github api + # Circle CI seems to make a change to the base branch, so we must fetch --force to ensure correct git file change stats + # SONAR_SCANNER_TOKEN MUST be secured as an environment variable in Circle CI NOT in this file. + # The following sonar settings MUST be set in SonarCloud UI NOT in this file + # sonar.pullrequest.provider + # sonar.pullrequest.github.endpoint + # sonar.pullrequest.github.token.secured + # sonar.pullrequest.github.repository + # Use -X on sonar-scanner to enable debug output + - run: + name: Run Sonar Scanner + command: | + source ${INIT_ENV} + echo "PR branch ${CIRCLE_BRANCH}" + echo "Repo name ${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}" + echo "URL ${CIRCLE_PULL_REQUEST}" + export PR_NUM=`echo ${CIRCLE_PULL_REQUEST} | cut -d'/' -f7` + echo "PR number ${PR_NUM}" + export BASE_BRANCH_URL="https://api.github.com/repos/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/pulls/${PR_NUM}" + export TARGET_BRANCH=$(curl "$BASE_BRANCH_URL" | jq '.base.ref' | tr -d '"') + echo "Target Branch = ${TARGET_BRANCH}" + cd src/CARMAAvtVimbaDriver + git fetch --force origin ${TARGET_BRANCH}:${TARGET_BRANCH} + sonar-scanner -Dproject.settings=.sonarqube/sonar-scanner.properties -Dsonar.login=${SONAR_SCANNER_TOKEN} -Dsonar.pullrequest.base=${TARGET_BRANCH} -Dsonar.pullrequest.branch=${CIRCLE_BRANCH} -Dsonar.pullrequest.key=${PR_NUM} diff --git a/.sonarqube/sonar-scanner.properties b/.sonarqube/sonar-scanner.properties new file mode 100644 index 00000000..74a272d3 --- /dev/null +++ b/.sonarqube/sonar-scanner.properties @@ -0,0 +1,27 @@ +# Copyright (C) 2018-2019 LEIDOS. +# +# 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 +# +# http://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. + +# Configuration file for Sonar Scanner used for CI + +sonar.projectKey=usdot-fhwa-stol_CARMAAvtVimbaDriver +sonar.organization=usdot-fhwa-stol +sonar.cfamily.build-wrapper-output=/opt/carma/bw-output +sonar.host.url=https://sonarcloud.io +sonar.sources=src/ +# TODO Uncomment following line when tests are added +#sonar.tests=test/ +# Disable SCM sensor as it is unused but generates warning +sonar.scm.disabled=false +sonar.scm.enabled=true +sonar.scm.provider=git