aboutsummaryrefslogtreecommitdiffstats
path: root/.ci/oe-x4xx-packages.yml
blob: 06044dd2b963b5950bdd1beb8abaaf8aef1c8115 (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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#
# Copyright 2021 Ettus Research, a National Instruments Brand
#
# SPDX-License-Identifier: LGPL-3.0-or-later
#
# Description:
#
# Automated x4xx openembedded build on Azure DevOps
#
# This pipeline builds the following openembedded targets:
# - UHD
# - UHD FPGA images
# - MPMD
#
# It also runs UHD unit tests and publishes their results.

trigger:
  branches:
    include:
    - master
  paths:
    include:
    - .ci
    - host
    - mpm
    - images/manifest.txt

pr:
  branches:
    include:
    - master
  paths:
    include:
    - .ci
    - host
    - mpm
    - images/manifest.txt

variables:
  SITECONF_FILE: '$(Agent.WorkFolder)/site.conf'
  MANIFEST_URL: 'git@github.com:EttusResearch/oe-manifest-dev.git'
  MANIFEST_BRANCH: 'zeus-dev'
  MANIFEST_FILE: 'head-titanium-dev.xml'
  IMAGE_VERSION_SUFFIX: '-$(Build.BuildNumber)'
  MENDER_ARTIFACT_NAME: '$(Build.BuildNumber)'

jobs:
- job: 'Build_OE_packages'
  timeoutInMinutes: 60
  cancelTimeoutInMinutes: 10
  strategy:
    matrix: {'x4xx-rev2': {}}

  pool:
    name: de-dre-lab
    demands:
    - openembedded
    - Agent.Name -equals oss-build3

  steps:

  - script: env
    displayName: 'Print environment'

  - script: ssh -T git@github.com || true
    displayName: 'Test github authentication'

  - script: |
      cd $AGENT_BUILDDIRECTORY
      repo init -u $MANIFEST_URL -b $MANIFEST_BRANCH -m $MANIFEST_FILE
      repo forall -c git clean -fd
      repo forall -c git reset --hard
      repo sync
      if [ -x .repo/manifests/apply-patches.sh ]; then
        .repo/manifests/apply-patches.sh
      fi
    displayName: 'Checkout openembedded layers'

  - checkout: self
    path: uhddev
    displayName: 'Checkout uhddev'

  - script: |
      if (echo $SYSTEM_JOBNAME | grep -q -e "-nomender$"); then
        DEVICE=${SYSTEM_JOBNAME:0:-9}
        TEMPLATECONF_DIR="meta-ettus/conf/without-mender/$DEVICE"
      else
        DEVICE=$SYSTEM_JOBNAME
        TEMPLATECONF_DIR="meta-ettus/conf/with-mender/$DEVICE"
      fi
      BUILD_DIR="$DEVICE/build-$BUILD_BUILDNUMBER" # relative to Agent.BuildDirectory
      TESTRESULTS_DIR="$BUILD_DIR/testresults" # relative to Agent.BuildDirectory
      # set variables to be used in the pipeline
      echo "###vso[task.setVariable variable=Device;isOutput=true]$DEVICE"
      echo "###vso[task.setVariable variable=TemplateConf_Dir;isOutput=true]$TEMPLATECONF_DIR"
      echo "###vso[task.setVariable variable=Build_Dir;isOutput=true]$BUILD_DIR"
      echo "###vso[task.setVariable variable=TESTRESULTS_DIR;isOutput=true]$TESTRESULTS_DIR"
    name: config

  - script: |
      cd $AGENT_BUILDDIRECTORY
      mkdir -p $PWD/$CONFIG_BUILD_DIR
      export TEMPLATECONF=$PWD/$CONFIG_TEMPLATECONF_DIR
      if [ -d $CONFIG_BUILD_DIR/conf ]; then
        rm -rv $CONFIG_BUILD_DIR/conf
      fi
      source oe-core/oe-init-build-env $CONFIG_BUILD_DIR
      echo "INHERIT += \"externalsrc\"" >> conf/local.conf
      echo "EXTERNALSRC_pn-uhd = \"$AGENT_BUILDDIRECTORY/uhddev/host\"" >> conf/local.conf
      echo "EXTERNALSRC_pn-mpmd = \"$AGENT_BUILDDIRECTORY/uhddev/mpm\"" >> conf/local.conf
      echo "RRECOMMENDS_uhd_class-target_remove = \"uhd-fpga-images\"" >> conf/local.conf
      echo "RDEPENDS_mpmd_remove = \"uhd-fpga-images-firmware\"" >> conf/local.conf
      if [ -n "$SITECONF_FILE" ]; then
        cp -v $SITECONF_FILE conf/site.conf
        DEPLOY_DIR_BASE=$(grep -e "^DEPLOY_DIR_BASE\s*=" conf/site.conf | sed "s|^.*=\s*\"\(\S*\)\"$|\1|")
        if [ -n "$DEPLOY_DIR_BASE" ]; then
          DEPLOY_DIR="$DEPLOY_DIR_BASE/${SYSTEM_DEFINITIONNAME}/${CONFIG_BUILD_DIR}"
          echo "###vso[task.setVariable variable=DEPLOY_DIR]$DEPLOY_DIR"
          echo "Setting DEPLOY_DIR to $DEPLOY_DIR"
          echo "DEPLOY_DIR = \"$DEPLOY_DIR\"" >> conf/local.conf
        fi
        echo "TESTRESULTS_DIR = \"$(Agent.BuildDirectory)/$(config.TESTRESULTS_DIR)\"" >> conf/local.conf
      fi
      for FILE in $TEMPLATECONF/multiconfig/*.sample; do
        mkdir -p conf/multiconfig
        cp -v $FILE conf/multiconfig/$(basename $FILE .sample)
      done
      for FILE in $(find conf -name "*.conf"); do
        echo "*** content of file $FILE: ***"
        cat $FILE
      done
    displayName: 'Setup environment'

  - script: |
      cd $AGENT_BUILDDIRECTORY
      source oe-core/oe-init-build-env $CONFIG_BUILD_DIR
      bitbake -p
    displayName: 'Parse recipes'

  - script: |
      cd $AGENT_BUILDDIRECTORY
      source oe-core/oe-init-build-env $CONFIG_BUILD_DIR
      bitbake uhd:do_package_write_ipk
    displayName: 'Build UHD'

  - script: |
      cd $AGENT_BUILDDIRECTORY
      source oe-core/oe-init-build-env $CONFIG_BUILD_DIR
      bitbake uhd:do_run_tests
    displayName: 'Run UHD tests'
    continueOnError: true

  - task: PublishTestResults@2
    inputs:
      testResultsFormat: 'cTest'
      testResultsFiles: '**/Test.xml'
      testRunTitle: 'UHD tests'
      searchFolder: '$(Agent.BuildDirectory)/$(config.TESTRESULTS_DIR)/uhd'
    displayName: 'Publish UHD tests results'
    continueOnError: true

  - script: |
      cd $AGENT_BUILDDIRECTORY
      source oe-core/oe-init-build-env $CONFIG_BUILD_DIR
      bitbake mpmd:do_package_write_ipk
    displayName: 'Build MPM'

  - publish: '$(DEPLOY_DIR)/ipk'
    artifact: 'IPK files'
    displayName: 'Publish Artifacts'

  - script: |
      if [ -d $(DEPLOY_DIR) ]; then mv $(DEPLOY_DIR) $(DEPLOY_DIR)_attempt_$(System.JobAttempt); fi
    condition: failed()
    displayName: rename deploy dir if build failed