summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: 4d97c23c72f0ba15271be70c93e16e4ec27b2c45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
image: gitlab.int.toradex.com:4567/rd/linux-bsp/ci-toolchain-container:linux-toradex_aarch32_arm_builder-bb6f84e

variables:
# uncomment for the pipeline debug purpose
# CI_DEBUG_TRACE: "true"
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""

# Kernel Configuration Section
# Supplementary Tool Section
 # Artifacts configuring section
  KERNEL_CONFIG_BUILD_LOG_FILE_NAME: build_config.log
  KERNEL_BUILD_LOG_FILE_NAME: build.log
  KERNEL_CONFIGURATION_FILE: .config
# Defining temporary build folder to do outside of the box builds.  Absolute path
  TEMP_BUILD_FOLDER: /builds/temp-builds

stages:
  - check-patch
  - build-product

.build_base:
  stage: build-product
  variables:
   GIT_STRATEGY: fetch
#  we are only using 3 latest commits to speed up the fetch process, as we are running pipeline each time we do a commit or a MR  https://docs.gitlab.com/ee/ci/large_repositories/index.html#shallow-cloning
   GIT_DEPTH: "3"
#  To run just on merge request
#  only:
#     - merge_requests
#  when: manual
  script: |
    #set -o xtrace
    cd $CI_PROJECT_DIR
    echo -e "Compiler used to build binaries is"
    which ${CROSS_COMPILE}gcc
    ${CROSS_COMPILE}gcc --version
    echo -e "Arch is \e[36m$ARCH\e[39m"
    THREADS=$(grep processor /proc/cpuinfo -c)
    # due to specific of the kernel build we need to use the latest
    # configuration from the nightly builds. We are getting $Version
    # dynamically, as a variable, based on parsing URL page with
    # Nightly builds ID
    version=$( wget -q -O - http://artifactory-horw.int.toradex.com/artifactory/list/torizoncore-oe-prerelease-horw/dunfell-5.x.y/nightly/ | grep -E "^<a href=\"[0-9]" | sed -E 's/.*\"(.+)\/\".*/\1/' | sort -n | tail -n 1 )
    kernel_config=$( wget -q -O - http://artifactory-horw.int.toradex.com/artifactory/list/torizoncore-oe-prerelease-horw/dunfell-5.x.y/nightly/$version/$KERNEL_FILE_PATH/oedeploy/ | grep -E "^<a href=\"kernel-config--\S+[0-9]{4,6}<" | sed -E 's/.*\"(.+)\".*/\1/' )
    mkdir -p $TEMP_BUILD_FOLDER
    wget -O $TEMP_BUILD_FOLDER/$KERNEL_CONFIGURATION_FILE http://artifactory-horw.int.toradex.com/artifactory/list/torizoncore-oe-prerelease-horw/dunfell-5.x.y/nightly/$version/$KERNEL_FILE_PATH/oedeploy/$kernel_config
    #####
    make O=$TEMP_BUILD_FOLDER -j $THREADS 2>&1 | tee $KERNEL_BUILD_LOG_FILE_NAME
  artifacts:
    when: always
    name: "$CI_COMMIT_REF_NAME"
    paths:
      - $KERNEL_BUILD_LOG_FILE_NAME
      #As we do not generate config for 5.x and use generated one,  we have just kernel config and kernel build log
      - kernel-config
  allow_failure: true
  after_script:
    - set -o xtrace
    - rm -rf $TEMP_BUILD_FOLDER

check_patch:
  stage: check-patch
  script: .gitlab-ci.d/check-patch.py
  variables:
    GIT_STRATEGY: fetch
    GIT_DEPTH: 1000
  allow_failure: true

      # If you need additional products build just copy-paste build_******_product section with new config name
build_default_defconfig :
  stage: build-product
  variables:
    DEFCONFIG: "imx_v6_v7_defconfig"
    # Choose max kernel size that `ubinfo /dev/ubi0_0` reports
    MAX_KERNEL_SIZE_B: 12570624
    GIT_STRATEGY: fetch
    GIT_DEPTH: "1"
  script: |
    #set -o xtrace
    cd $CI_PROJECT_DIR
    echo -e "Compiler used to build binaries is"
    which ${CROSS_COMPILE}gcc
    ${CROSS_COMPILE}gcc --version
    echo -e "Arch is \e[36m$ARCH\e[39m"
    THREADS=$(grep processor /proc/cpuinfo -c)
    make $DEFCONFIG
    make -j $THREADS 2>&1 | tee $KERNEL_BUILD_LOG_FILE_NAME
    KERNEL_SIZE=$(ls -la arch/arm/boot/zImage | awk '{print $5}')
    echo "Kernel size is ${KERNEL_SIZE} bytes"
    if [ $KERNEL_SIZE -ge $MAX_KERNEL_SIZE_B ];
    then
      echo "❌ Kernel exceeds the max size of ${MAX_KERNEL_SIZE_B}, failing CI pipeline";
      exit 1
    fi
  allow_failure: true

build_bsp_defconfig:
  stage: build-product
  variables:
    DEFCONFIG: "toradex-imx_v6_v7_defconfig"
    # Choose max kernel size that `ubinfo /dev/ubi0_0` reports
    MAX_KERNEL_SIZE_B: 12570624
    GIT_STRATEGY: fetch
    GIT_DEPTH: "1"
  script: |
    #set -o xtrace
    cd $CI_PROJECT_DIR
    echo -e "Compiler used to build binaries is"
    which ${CROSS_COMPILE}gcc
    ${CROSS_COMPILE}gcc --version
    echo -e "Arch is \e[36m$ARCH\e[39m"
    THREADS=$(grep processor /proc/cpuinfo -c)
    make $DEFCONFIG
    make -j $THREADS 2>&1 | tee $KERNEL_BUILD_LOG_FILE_NAME
    KERNEL_SIZE=$(ls -la arch/arm/boot/zImage | awk '{print $5}')
    echo "Kernel size is ${KERNEL_SIZE} bytes"
    if [ $KERNEL_SIZE -ge $MAX_KERNEL_SIZE_B ];
    then
      echo "❌ Kernel exceeds the max size of ${MAX_KERNEL_SIZE_B}, failing CI pipeline";
      exit 1
    fi
  artifacts:
    when: always
    name: "$CI_COMMIT_REF_NAME"
    paths:
      - $KERNEL_BUILD_LOG_FILE_NAME
      - kernel-config