aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Fletcher <bill.fletcher@linaro.org>2017-11-14 16:32:49 +0000
committerBill Fletcher <bill.fletcher@linaro.org>2017-11-14 16:32:49 +0000
commitfb899e4b2e1f7053b9c6dec3e4e471c48928c89d (patch)
treef17e5000b695ac4eee0ab80728cbe4fcdb33b9c9
parentcf7632bae42ea2294726f98d2c544b51c0dd9ddc (diff)
initial changes to add Zephyr CI tutorialHEADmaster
-rw-r--r--zephyr-tutorial.yaml114
-rwxr-xr-xzephyr-tutorial/builders.sh54
-rw-r--r--zephyr-tutorial/lava-job-definitions/arduino101/template.yaml57
-rw-r--r--zephyr-tutorial/lava-job-definitions/frdm-k64f/template.yaml49
-rw-r--r--zephyr-tutorial/lava-job-definitions/frdm-kw41z/template.yaml49
-rw-r--r--zephyr-tutorial/lava-job-definitions/qemu/template.yaml55
-rw-r--r--zephyr-tutorial/submit_to_lava_lite.py78
7 files changed, 456 insertions, 0 deletions
diff --git a/zephyr-tutorial.yaml b/zephyr-tutorial.yaml
new file mode 100644
index 00000000..19966a36
--- /dev/null
+++ b/zephyr-tutorial.yaml
@@ -0,0 +1,114 @@
+- job:
+ name: zephyr-tutorial
+ project-type: matrix
+ defaults: global
+ properties:
+ - authorization:
+ anonymous:
+ - job-read
+ - job-extended-read
+ - job-workspace
+ linaro:
+ - job-read
+ - job-extended-read
+ - job-build
+ - job-cancel
+ - build-discarder:
+ days-to-keep: 10
+ num-to-keep: 10
+ artifact-num-to-keep: 10
+ - throttle:
+ option: category
+ categories: [lite-zephyr]
+ matrix-builds: false
+ matrix-configs: true
+ parameters:
+ - string:
+ name: BRANCH
+ default: 'tutorial'
+ - string:
+ name: LAVA_SERVER
+ default: 'validation.linaro.org/RPC2/'
+ - string:
+ name: GIT_COMMIT
+ default: ''
+ disabled: false
+ node: master
+ child-workspace: .
+ display-name: 'Zephyr project CI tutorial'
+ axes:
+ - axis:
+ type: slave
+ name: label
+ values:
+ - docker-xenial-amd64-13
+ - axis:
+ type: user-defined
+ name: PLATFORM
+ values:
+ - frdm_k64f
+ - frdm_kw41z
+ - qemu_cortex_m3
+ wrappers:
+ - timestamps
+ - credentials-binding:
+ - text:
+ credential-id: LAVA_USER
+ variable: LAVA_USER
+ - credentials-binding:
+ - text:
+ credential-id: LAVA_TOKEN
+ variable: LAVA_TOKEN
+ builders:
+ - shell:
+ !include-raw: zephyr-upstream/builders.sh
+ - inject:
+ properties-file: env_var_parameters
+ - build-name-setter:
+ template: '#${BUILD_NUMBER}-${GIT_COMMIT}'
+ macro: true
+ - linaro-publish-token
+ - shell: |
+ #!/bin/bash
+
+ # Publish
+ test -d ${HOME}/bin || mkdir ${HOME}/bin
+ wget -q https://git.linaro.org/ci/publishing-api.git/blob_plain/HEAD:/linaro-cp.py -O ${HOME}/bin/linaro-cp.py
+ time python ${HOME}/bin/linaro-cp.py \
+ --api_version 3 \
+ --link-latest \
+ out/${PLATFORM} components/kernel/zephyr/${BRANCH}/${PLATFORM}/${BUILD_NUMBER}
+
+ - shell: |
+ #!/bin/bash -e
+
+ case "${PLATFORM}" in
+ frdm_k64f)
+ export DEVICE_TYPE=frdm-k64f
+ ;;
+ frdm_kw41z)
+ export DEVICE_TYPE=frdm-kw41z
+ ;;
+ qemu_cortex_m3)
+ export DEVICE_TYPE=qemu
+ ;;
+ *)
+ echo "Skip DEVICE_TYPE for ${PLATFORM}"
+ ;;
+ esac
+
+ rm -rf configs
+ git clone --depth 1 http://git.linaro.org/people/bill.fletcher/configs.git
+
+ python configs/zephyr-tutorial/submit_to_lava_lite.py \
+ --board-name ${PLATFORM} \
+ --device-type ${DEVICE_TYPE} \
+ --build-number ${BUILD_NUMBER} \
+ --branch-name ${BRANCH} \
+ --build-url ${BUILD_URL} \
+ --lava-server ${LAVA_SERVER} \
+
+ rm -rf out
+ publishers:
+ - email:
+ recipients: 'bill.fletcher@linaro.org'
diff --git a/zephyr-tutorial/builders.sh b/zephyr-tutorial/builders.sh
new file mode 100755
index 00000000..ffd37011
--- /dev/null
+++ b/zephyr-tutorial/builders.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+sudo apt-get -q=2 update
+sudo apt-get -q=2 -y install git g++ g++-multilib gperf python3-ply \
+ python3-yaml gcc-arm-none-eabi python-requests rsync device-tree-compiler \
+ python3-pip
+
+set -ex
+
+# Distro package is too old for Zephyr
+sudo pip3 install pyelftools pykwalify
+
+git clone -b ${BRANCH} https://git.linaro.org/lite/zephyr.git ${WORKSPACE}
+git clean -fdx
+if [ -n "${GIT_COMMIT}" ]; then
+ git reset --hard ${GIT_COMMIT}
+fi
+echo "GIT_COMMIT=$(git rev-parse --short=8 HEAD)" > env_var_parameters
+
+head -5 Makefile
+
+# Toolchains are pre-installed and come from:
+# https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.2/zephyr-sdk-0.9.2-setup.run
+# To install Zephyr SDK: ./zephyr-sdk-0.9.2-setup.run --quiet --nox11 -- <<< "${HOME}/srv/toolchain/zephyr-sdk-0.9.2"
+
+export ZEPHYR_SDK_INSTALL_DIR="${HOME}/srv/toolchain/zephyr-sdk-0.9.2"
+
+# Set build environment variables
+LANG=C
+ZEPHYR_BASE=${WORKSPACE}
+PATH=${ZEPHYR_BASE}/scripts:${PATH}
+OUTDIR=${HOME}/srv/zephyr/${PLATFORM}
+export LANG ZEPHYR_BASE PATH
+env |grep '^ZEPHYR'
+
+echo ""
+echo "########################################################################"
+echo " make -C tests/kernel/common "
+echo "########################################################################"
+
+cd ${WORKSPACE}
+make -C ${WORKSPACE}/tests/kernel/common O=${OUTDIR} BOARD=${PLATFORM}
+
+# OUTDIR is per-platform.
+find ${OUTDIR} -type f -name '.config' -exec rename 's/.config/zephyr.config/' {} +
+rsync -avm \
+ --include=zephyr.bin \
+ --include=zephyr.config \
+ --include=zephyr.elf \
+ --include='*/' \
+ --exclude='*' \
+ ${OUTDIR} out/
+find ${OUTDIR} -type f -name 'zephyr.config' -delete
+
diff --git a/zephyr-tutorial/lava-job-definitions/arduino101/template.yaml b/zephyr-tutorial/lava-job-definitions/arduino101/template.yaml
new file mode 100644
index 00000000..67d15ebf
--- /dev/null
+++ b/zephyr-tutorial/lava-job-definitions/arduino101/template.yaml
@@ -0,0 +1,57 @@
+# Zephyr JOB definition for Arduino101
+device_type: '$device_type'
+job_name: 'zephyr-upstream $test_name'
+
+timeouts:
+ job:
+ minutes: 30
+ action:
+ minutes: 5
+ actions:
+ lava-test-monitor:
+ seconds: 300
+ wait-usb-device:
+ seconds: 20
+ flash-dfu:
+ seconds: 60
+ connections:
+ lava-test-monitor:
+ seconds: 300
+
+priority: medium
+visibility: public
+
+actions:
+- deploy:
+ timeout:
+ minutes: 3
+ to: tmpfs
+ images:
+ app:
+ image_arg: --alt x86_app --download {app}
+ url: '$test_url'
+
+- boot:
+ method: dfu
+ timeout:
+ minutes: 10
+
+- test:
+ timeout:
+ minutes: 10
+ monitors:
+ - name: '$test_name'
+ start: (tc_start\(\)|starting .*test|BOOTING ZEPHYR OS)
+ end: PROJECT EXECUTION
+ pattern: (?P<result>(PASS|FAIL))\s-\s(?P<test_case_id>\w+)\.
+ fixupdict:
+ PASS: pass
+ FAIL: fail
+
+metadata:
+ build-url: $build_url
+ build-log: $build_url/consoleText
+ zephyr-gcc-variant: $gcc_variant
+ platform: $board_name
+ git-url: https://git.linaro.org/zephyrproject-org/zephyr.git
+ git-commit: $git_commit
diff --git a/zephyr-tutorial/lava-job-definitions/frdm-k64f/template.yaml b/zephyr-tutorial/lava-job-definitions/frdm-k64f/template.yaml
new file mode 100644
index 00000000..f0c44244
--- /dev/null
+++ b/zephyr-tutorial/lava-job-definitions/frdm-k64f/template.yaml
@@ -0,0 +1,49 @@
+# Zephyr JOB definition for frdm-k64f
+device_type: '$device_type'
+job_name: 'zephyr-upstream $test_name'
+
+timeouts:
+ job:
+ minutes: 30
+ action:
+ minutes: 3
+ actions:
+ wait-usb-device:
+ seconds: 40
+
+priority: medium
+visibility: public
+
+actions:
+- deploy:
+ timeout:
+ minutes: 3
+ to: tmpfs
+ images:
+ zephyr:
+ url: '$test_url'
+
+- boot:
+ method: cmsis-dap
+ timeout:
+ minutes: 10
+
+- test:
+ timeout:
+ minutes: 10
+ monitors:
+ - name: '$test_name'
+ start: (tc_start\(\)|starting .*test|BOOTING ZEPHYR OS)
+ end: PROJECT EXECUTION
+ pattern: (?P<result>(PASS|FAIL))\s-\s(?P<test_case_id>\w+)\.
+ fixupdict:
+ PASS: pass
+ FAIL: fail
+
+metadata:
+ build-url: $build_url
+ build-log: $build_url/consoleText
+ zephyr-gcc-variant: $gcc_variant
+ platform: $board_name
+ git-url: https://git.linaro.org/zephyrproject-org/zephyr.git
+ git-commit: $git_commit
diff --git a/zephyr-tutorial/lava-job-definitions/frdm-kw41z/template.yaml b/zephyr-tutorial/lava-job-definitions/frdm-kw41z/template.yaml
new file mode 100644
index 00000000..6165856a
--- /dev/null
+++ b/zephyr-tutorial/lava-job-definitions/frdm-kw41z/template.yaml
@@ -0,0 +1,49 @@
+# Zephyr JOB definition for frdm-kw41z
+device_type: '$device_type'
+job_name: 'zephyr-upstream $test_name'
+
+timeouts:
+ job:
+ minutes: 30
+ action:
+ minutes: 3
+ actions:
+ wait-usb-device:
+ seconds: 40
+
+priority: medium
+visibility: public
+
+actions:
+- deploy:
+ timeout:
+ minutes: 3
+ to: tmpfs
+ images:
+ zephyr:
+ url: '$test_url'
+
+- boot:
+ method: pyocd
+ timeout:
+ minutes: 10
+
+- test:
+ timeout:
+ minutes: 10
+ monitors:
+ - name: '$test_name'
+ start: (tc_start\(\)|starting .*test|BOOTING ZEPHYR OS)
+ end: PROJECT EXECUTION
+ pattern: (?P<result>(PASS|FAIL))\s-\s(?P<test_case_id>\w+)\.
+ fixupdict:
+ PASS: pass
+ FAIL: fail
+
+metadata:
+ build-url: $build_url
+ build-log: $build_url/consoleText
+ zephyr-gcc-variant: $gcc_variant
+ platform: $board_name
+ git-url: https://git.linaro.org/zephyrproject-org/zephyr.git
+ git-commit: $git_commit
diff --git a/zephyr-tutorial/lava-job-definitions/qemu/template.yaml b/zephyr-tutorial/lava-job-definitions/qemu/template.yaml
new file mode 100644
index 00000000..38a3d330
--- /dev/null
+++ b/zephyr-tutorial/lava-job-definitions/qemu/template.yaml
@@ -0,0 +1,55 @@
+# Zephyr JOB definition for QEMU
+device_type: '$device_type'
+job_name: 'zephyr-upstream $test_name'
+
+timeouts:
+ job:
+ minutes: 30
+ action:
+ minutes: 2
+priority: medium
+visibility: public
+
+context:
+ arch: arm
+ cpu: cortex-m3
+ machine: lm3s6965evb
+ model: 'model=stellaris'
+ serial: '-serial mon:stdio'
+ vga: '-vga none'
+
+actions:
+- deploy:
+ timeout:
+ minutes: 3
+ to: tmpfs
+ images:
+ zephyr:
+ image_arg: '-kernel {zephyr}'
+ url: '$test_url'
+
+- boot:
+ method: qemu
+ timeout:
+ minutes: 2
+
+- test:
+ timeout:
+ minutes: 10
+ monitors:
+ - name: '$test_name'
+ start: (tc_start\(\)|starting .*test|BOOTING ZEPHYR OS)
+ end: PROJECT EXECUTION
+ pattern: (?P<result>(PASS|FAIL))\s-\s(?P<test_case_id>\w+)\.
+ fixupdict:
+ PASS: pass
+ FAIL: fail
+
+metadata:
+ build-url: $build_url
+ build-log: $build_url/consoleText
+ zephyr-gcc-variant: $gcc_variant
+ platform: $board_name
+ git-url: https://git.linaro.org/zephyrproject-org/zephyr.git
+ git-commit: $git_commit
+
diff --git a/zephyr-tutorial/submit_to_lava_lite.py b/zephyr-tutorial/submit_to_lava_lite.py
new file mode 100644
index 00000000..09fcdcdb
--- /dev/null
+++ b/zephyr-tutorial/submit_to_lava_lite.py
@@ -0,0 +1,78 @@
+#!/usr/lib/python
+
+import argparse
+import os
+from string import Template
+import sys
+import xmlrpclib
+
+# Command line args
+# Device type
+# Board name (platform)
+# Username
+# Token
+# LAVA server (incl /RPC2)
+# Build URL
+# Branch name
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--device-type",
+ help="Device type in LAVA",
+ dest="device_type",
+ required=True)
+ parser.add_argument("--board-name",
+ help="Zephyr platform name",
+ dest="board_name",
+ required=True)
+ parser.add_argument("--lava-user",
+ help="LAVA user",
+ dest="lava_user",
+ default=os.environ.get('LAVA_USER'))
+ parser.add_argument("--lava-token",
+ help="LAVA token",
+ dest="lava_token",
+ default=os.environ.get('LAVA_TOKEN'))
+ parser.add_argument("--lava-server",
+ help="LAVA server URL",
+ dest="lava_server",
+ required=True)
+ parser.add_argument("--branch-name",
+ help="branch name",
+ dest="branch_name",
+ required=True)
+ parser.add_argument("--build-url",
+ help="Jenkins build url",
+ dest="build_url",
+ required=True)
+
+ args = parser.parse_args()
+
+# server = xmlrpclib.ServerProxy("http://%s:%s@%s/RPC2" % (username, token, hostname))
+
+# TODO : Build the job file here from the template
+#
+#
+# jobtext = jobfile.read()
+
+# TODO : Sumbit the job
+# id = server.scheduler.submit_job(jobtext)
+# print server.scheduler.job_status(id)
+
+# try:
+# results = server.scheduler.submit_job(jobtext)
+# except xmlrpclib.ProtocolError as err:
+# print("LAVA submission failed")
+# print("Error code: %d" % err.errcode)
+# print("Error message: %s" % err.errmsg)
+
+# TODO : Poll server.scheduler.job_status(id) with a timeout for completion
+#
+#
+
+ print("** submit_to_lava_lite.py")
+
+
+if __name__ == "__main__":
+ main()
+