Add compilation CI
This commit is contained in:
parent
0df2191663
commit
c093807077
227
.gitlab-ci.yml
227
.gitlab-ci.yml
|
@ -1,22 +1,225 @@
|
|||
before_script:
|
||||
- apt-get update -qq -y && apt-get install -y -qq clang-format git
|
||||
# We must manually add the KiCad remote to ensure it is named sensibly
|
||||
- git remote add product https://gitlab.com/kicad/code/kicad.git
|
||||
- git fetch -n product
|
||||
- git fetch -n origin
|
||||
# Get the SHAs of the commits
|
||||
- "TARGET_HEAD_SHA=$(git rev-parse product/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME})"
|
||||
- "SOURCE_HEAD_SHA=$(git rev-parse origin/${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME})"
|
||||
- "MERGE_BASE_SHA=$(git merge-base ${TARGET_HEAD_SHA} ${SOURCE_HEAD_SHA})"
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- report
|
||||
|
||||
default:
|
||||
image: registry.gitlab.com/kicad/kicad-ci/source_containers/master/fedora:31
|
||||
|
||||
##########################################################################
|
||||
# This will allow the job to run whenever code events trigger it.
|
||||
##########################################################################
|
||||
.only_code:
|
||||
only:
|
||||
- master
|
||||
- branches
|
||||
- merge_requests
|
||||
- pushes
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Define a template for all the unit tests, since each one is run in a separate
|
||||
# job to make the display nicer.
|
||||
##########################################################################
|
||||
.unit_test:
|
||||
stage: test
|
||||
when: on_success
|
||||
needs:
|
||||
- job: build_linux
|
||||
artifacts: true
|
||||
# We define this using a before script because GitLab cannot merge variable
|
||||
# definitions across inheritance (so the variables block from this would disappear)
|
||||
before_script:
|
||||
- export BOOST_TEST_LOGGER='JUNIT,all,test_results.${TEST}.xml:HRF,warning'
|
||||
- export CTEST_OUTPUT_ON_FAILURE=1
|
||||
script:
|
||||
- cd build/linux/qa
|
||||
- ctest -R ${TEST}
|
||||
# GitLab supports displaying the results in the GUI through JUNIT artifacts
|
||||
# (https://docs.gitlab.com/ee/ci/junit_test_reports.html)
|
||||
# so we upload the JUNIT results. Note that there is a bug with how paths
|
||||
# are processed in the junit report (https://gitlab.com/gitlab-org/gitlab/issues/23835)
|
||||
# so we can't use a glob and have to list out each hierarchy separately.
|
||||
artifacts:
|
||||
reports:
|
||||
junit:
|
||||
- build/linux/qa/*/*.xml
|
||||
- build/linux/qa/*/*/*.xml
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Test the formatting in a merge request using clang-format
|
||||
##########################################################################
|
||||
# The variable CI_COMMIT_BEFORE_SHA is not available in normal merge requests
|
||||
# so we must build the commit hash ourselves, see:
|
||||
# https://gitlab.com/gitlab-org/gitlab/issues/12850
|
||||
test_formatting:
|
||||
stage: test
|
||||
only:
|
||||
- merge_requests
|
||||
allow_failure: true
|
||||
before_script:
|
||||
# We must manually add the KiCad remote to ensure it is named sensibly
|
||||
- git remote add product https://gitlab.com/kicad/code/kicad.git
|
||||
- git fetch -n product
|
||||
- git fetch -n origin
|
||||
# Get the SHAs of the commits
|
||||
- "TARGET_HEAD_SHA=$(git rev-parse product/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME})"
|
||||
- "SOURCE_HEAD_SHA=$(git rev-parse origin/${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME})"
|
||||
- "MERGE_BASE_SHA=$(git merge-base ${TARGET_HEAD_SHA} ${SOURCE_HEAD_SHA})"
|
||||
script:
|
||||
- echo "Testing formatting from commit ${MERGE_BASE_SHA}"
|
||||
- ./tools/check_coding.sh --diff --ci --commit ${MERGE_BASE_SHA}
|
||||
only:
|
||||
- merge_requests
|
||||
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Build KiCad and save the results
|
||||
##########################################################################
|
||||
build_linux:
|
||||
stage: build
|
||||
extends: .only_code
|
||||
interruptible: true
|
||||
cache:
|
||||
key: "cache-linux"
|
||||
paths:
|
||||
- ccache/
|
||||
before_script:
|
||||
# CCache Config
|
||||
- mkdir -p ccache
|
||||
- export CCACHE_BASEDIR=${PWD}
|
||||
- export CCACHE_DIR=${PWD}/ccache
|
||||
script:
|
||||
- mkdir -p build/linux
|
||||
- cd build/linux
|
||||
- cmake
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
||||
-DCMAKE_BUILD_TYPE=Debug
|
||||
-DKICAD_STDLIB_LIGHT_DEBUG=ON
|
||||
-DKICAD_SCRIPTING=ON
|
||||
-DKICAD_SCRIPTING_MODULES=ON
|
||||
-DKICAD_SCRIPTING_PYTHON3=ON
|
||||
-DKICAD_SCRIPTING_WXPYTHON=ON
|
||||
-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON
|
||||
-DKICAD_SCRIPTING_ACTION_MENU=ON
|
||||
-DBUILD_GITHUB_PLUGIN=ON
|
||||
-DKICAD_USE_OCE=OFF
|
||||
-DKICAD_USE_OCC=ON
|
||||
-DKICAD_SPICE=ON
|
||||
../../
|
||||
- make 2>&1 | tee compilation_log.txt
|
||||
- cd ../../
|
||||
artifacts:
|
||||
# Only save the artifacts that are needed for running the tests in the next stage
|
||||
# and the compilation log. The entire build directory is too large to save as an
|
||||
# artifact.
|
||||
expire_in: 1 week
|
||||
when: always
|
||||
paths:
|
||||
- build/linux/3d-viewer/
|
||||
- build/linux/pcbnew/pcbnew.py
|
||||
- build/linux/pcbnew/_pcbnew.so
|
||||
- build/linux/qa/
|
||||
- build/linux/compilation_log.txt
|
||||
|
||||
# Upload the compilation log in an easily downloadable form
|
||||
report_build_warn:
|
||||
stage: report
|
||||
extends: .only_code
|
||||
when: always
|
||||
needs:
|
||||
- job: build_linux
|
||||
artifacts: true
|
||||
script:
|
||||
- echo "Uploading compilation log"
|
||||
- cp build/linux/compilation_log.txt compilation_log.txt
|
||||
artifacts:
|
||||
expire_in: 1 year
|
||||
expose_as: 'Build log'
|
||||
name: "build_log.txt"
|
||||
paths:
|
||||
- compilation_log.txt
|
||||
|
||||
# Report on the metrics of the code
|
||||
report_metrics:
|
||||
stage: report
|
||||
extends: .only_code
|
||||
when: always
|
||||
needs:
|
||||
- job: build_linux
|
||||
artifacts: true
|
||||
script:
|
||||
- cat build/linux/compilation_log.txt | grep "warning:" | awk '{total+=1}END{print "number_of_warnings "total}' > metrics.txt
|
||||
- cat metrics.txt
|
||||
artifacts:
|
||||
reports:
|
||||
metrics: metrics.txt
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Run the code unit tests. Each QA executable is split into a separate job so that the display
|
||||
# gives the test results broken down by the test executable.
|
||||
##########################################################################
|
||||
qa_python:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'qa_python'
|
||||
|
||||
qa_common_eeschema:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'common_eeschema'
|
||||
|
||||
qa_common_pcbnew:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'common_pcbnew'
|
||||
|
||||
qa_common_gerbview:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'qa_common_gerbview'
|
||||
|
||||
qa_pcbnew:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'pcbnew'
|
||||
|
||||
qa_eeschema:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'eeschema'
|
||||
|
||||
qa_kimath:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'kimath'
|
||||
|
||||
qa_sexpr:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'sexpr'
|
||||
|
||||
qa_kicad2step:
|
||||
extends:
|
||||
- .unit_test
|
||||
- .only_code
|
||||
variables:
|
||||
TEST: 'kicad2step'
|
||||
|
|
Loading…
Reference in New Issue