blob: a2a716462201f21dd36cb7571b84d4076646b1ee [file] [log] [blame]
lowRISC Contributors802543a2019-08-31 12:12:56 +01001# Azure Pipelines CI build configuration
2# Documentation at https://aka.ms/yaml
3
4variables:
Pirmin Vogeleaf8b4b2020-03-03 14:51:03 +01005 VERILATOR_VERSION: 4.028
lowRISC Contributors802543a2019-08-31 12:12:56 +01006 VERILATOR_PATH: /opt/buildcache/verilator/$(VERILATOR_VERSION)
Miguel Osorio88179fc2019-09-19 23:37:48 -07007 TOOLCHAIN_PATH: /opt/buildcache/riscv
8 # Release tag from https://github.com/lowRISC/lowrisc-toolchains/releases
Philipp Wagner018e3a22019-10-10 15:55:56 +01009 TOOLCHAIN_VERSION: 20191010-1
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -060010 # This controls where builds happen, and gets picked up by build_consts.sh.
11 BUILD_ROOT: $(Build.ArtifactStagingDirectory)
lowRISC Contributors802543a2019-08-31 12:12:56 +010012
13trigger:
lowRISC Contributors802543a2019-08-31 12:12:56 +010014 batch: true
15 branches:
16 include:
Philipp Wagnerdd1706e2020-03-15 14:39:59 +000017 - '*'
18 tags:
19 include:
20 - "*"
21pr:
22 branches:
23 include:
24 - '*'
lowRISC Contributors802543a2019-08-31 12:12:56 +010025
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000026jobs:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060027- job: lint
28 displayName: Run code quality checks (lint)
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000029 pool:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060030 vmImage: ubuntu-16.04
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000031 steps:
32 - bash: |
Garret Kellyf5608d02019-11-01 16:28:11 -040033 sudo apt-get remove -y clang-6.0 libclang-common-6.0-dev libclang1-6.0 libllvm6.0
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060034 displayName: Remove existing Clang installation
35 - template: ci/install-package-dependencies.yml
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000036 - bash: |
37 python3 --version
38 yapf --version
39 isort --version
40 clang-format -version
Greg Chadwickfe07c7c2020-02-11 11:24:09 +000041 echo "PATH=$PATH"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060042 displayName: Display tool versions
43 - bash: |
44 find util -iname '*.py' -print0 \
45 | xargs -0 -n1 $PWD/util/lintpy.py -f
46 # XXX: Python lint checks are disabled until Issue #313 is resolved
47 condition: False
48 displayName: Run Python lint
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000049 - bash: |
50 make -C hw regs && git diff --exit-code
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060051 if [[ $? != 0 ]]; then
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000052 echo -n "##vso[task.logissue type=error]"
53 echo "Register headers not up-to-date. Regenerate them with 'make -C hw regs'."
54 exit 1
55 fi
56 condition: always()
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060057 displayName: Ensure all generated files are clean and up-to-date
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000058 - bash: |
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060059 util/build_docs.py
Garret Kelly889bf6a2019-11-03 13:02:27 -050060 condition: always()
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060061 displayName: Render documentation
Garret Kelly889bf6a2019-11-03 13:02:27 -050062 - bash: |
Garret Kelly8d7da7c2019-11-08 14:09:34 -050063 cd site/landing
64 ../../build/docs-hugo/hugo
65 condition: always()
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060066 displayName: Render landing site
Garret Kelly8d7da7c2019-11-08 14:09:34 -050067 - bash: |
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000068 # XXX: As of today, task.logissue comments with 'sourcepath' set don't
69 # get reported to GitHub Checks annotations. Upstream bug report:
70 # https://developercommunity.visualstudio.com/content/problem/689794/pipelines-logging-command-logissue-does-not-report.html
71 #echo "##vso[task.issue type=error;sourcepath=/azure-pipelines.yml;linenumber=45;columnnumber=1;code=100;]Found something that could be a problem."
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060072 fork_origin="$(git merge-base --fork-point origin/master)"
73 changed_files="$(git diff --name-only "$fork_origin" | grep -v /vendor/ | grep -E '\.(cpp|cc|c|h)$')"
74 if [[ -z "$changed_files" ]]; then
75 xargs git diff -U0 "$fork_origin" <<< "$changed_files" \
76 | clang-format-diff -p1 \
77 | tee clang-format-output
78 if [[ -s clang-format-output ]]; then
79 echo -n "##vso[task.logissue type=error]"
80 echo "C/C++ lint failed. Use 'git clang-format' with appropriate options to reformat the changed code."
81 exit 1
82 fi
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000083 fi
84 # This check is not idempotent, but checks changes to a base branch.
85 # Run it only on pull requests.
86 condition: eq(variables['Build.Reason'], 'PullRequest')
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -060087 displayName: Use clang-format to check C/C++ coding style
Philipp Wagnerbd9ae432019-11-01 14:33:30 +000088 - bash: |
Miguel Young de la Sotab23dc8c2020-01-14 13:52:33 -050089 fork_origin="$(git merge-base --fork-point origin/master)"
90 changed_files="$(git diff --name-only "$fork_origin")"
91 if [[ -z "$changed_files" ]]; then
92 xargs util/fix_include_guard.py --dry-run <<< "$changed_files" | tee fix-include-guard-output
93 if [[ -s fix-include-guard-output ]]; then
94 echo -n "##vso[task.logissue type=error]"
95 echo "Include guard check failed. Please run util/fix_include_guard.py on the above files."
96 exit 1
97 fi
98 fi
99 condition: eq(variables['Build.Reason'], 'PullRequest')
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600100 displayName: Check formatting on header guards
Miguel Young de la Sotab23dc8c2020-01-14 13:52:33 -0500101 - bash: |
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600102 commit_range="$(git merge-base --fork-point origin/master)..HEAD"
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000103 # Notes:
104 # * Merge commits are not checked. We always use rebases instead of
105 # merges to keep a linear history, which makes merge commits disappear
106 # ultimately, making them only a CI artifact which should not be
107 # checked.
108 # * 'type=error' is used even for warnings. Only "errors" are shown in
109 # the GitHub checks API. However, warnings don't return a non-zero
110 # error code and don't fail the build step.
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600111 util/lint_commits.py \
112 --no-merges \
113 --error-msg-prefix="##vso[task.logissue type=error]" \
114 --warning-msg-prefix="##vso[task.logissue type=error]" \
115 "$commit_range"
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000116 # Only run on pull requests to check new commits only
117 condition: eq(variables['Build.Reason'], 'PullRequest')
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600118 displayName: Check commit metadata
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000119 - bash: |
120 only_doc_changes=0
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600121 if [[ "$(Build.Reason)" = "PullRequest" ]]; then
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000122 # Conservative way of checking for documentation-only changes.
123 # Only relevant for pipelines triggered from pull requests
124 echo "Checking for doc-only changes in this pull request"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600125 fork_origin="$(git merge-base --fork-point origin/master)"
126 only_doc_changes="$(git diff --name-only "$fork_origin" | grep -v '\.md$' -q; echo $?)"
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000127 fi
128 echo "##vso[task.setvariable variable=onlyDocChanges;isOutput=true]${only_doc_changes}"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600129 displayName: Check if the commit only contains documentation changes
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000130 name: DetermineBuildType
Philipp Wagner1e643552019-09-04 15:39:14 +0100131
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600132- job: sw_build
133 displayName: Build Software
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000134 dependsOn: lint
Philipp Wagner9d20ee62019-11-29 14:27:28 +0000135 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000136 pool:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600137 vmImage: ubuntu-16.04
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000138 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600139 - template: ci/install-package-dependencies.yml
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000140 - bash: |
141 set -x
142 sudo util/get-toolchain.py \
143 --target-dir="${TOOLCHAIN_PATH}" \
144 --release-version="${TOOLCHAIN_VERSION}" \
Philipp Wagner1c514412019-11-27 14:48:47 +0000145 --update
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600146 displayName: Install toolchain
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000147 - bash: |
Miguel Young de la Sota63793572019-11-13 14:18:51 -0600148 . util/build_consts.sh
Miguel Young de la Sota4a4946d2019-11-21 10:44:18 -0600149 ./meson_init.sh -A
Miguel Young de la Sota76526c32020-01-28 10:24:41 -0500150 ninja -C "$OBJ_DIR" all
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600151 displayName: Build embedded targets
152 - template: ci/upload-artifacts-template.yml
Miguel Young de la Sota9d20b3d2020-02-03 16:35:31 -0500153 - bash: |
154 . util/build_consts.sh
155 ninja -C "$OBJ_DIR" test
156 displayName: 'Run unit tests'
157 - template: 'ci/upload-artifacts-template.yml'
Miguel Young de la Sotab4df8602019-11-21 12:44:11 -0600158 parameters:
159 artifact: sw_build
lowRISC Contributors802543a2019-08-31 12:12:56 +0100160
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600161- job: top_earlgrey_verilator
162 displayName: Build Verilator simulation of the Earl Grey toplevel design
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000163 dependsOn: lint
Philipp Wagner9d20ee62019-11-29 14:27:28 +0000164 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000165 pool: Default
166 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600167 - template: ci/install-package-dependencies.yml
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000168 - bash: |
169 set -e
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600170 if [[ ! -d "$(VERILATOR_PATH)" ]]; then
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000171 echo "Building verilator (no cached build found)"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600172
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000173 mkdir -p build/verilator
174 cd build/verilator
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600175 curl -Ls -o verilator.tgz \
176 "https://www.veripool.org/ftp/verilator-$(VERILATOR_VERSION).tgz"
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000177 tar -xf verilator.tgz
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600178
179 cd "verilator-$(VERILATOR_VERSION)"
180 ./configure --prefix="$(VERILATOR_PATH)"
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000181 make -j$(nproc)
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600182 mkdir -p "$VERILATOR_PATH"
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000183 make install
184 else
185 echo "Re-using cached verilator build"
186 fi
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600187 displayName: Build and install Verilator
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000188 - bash: |
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600189 export PATH="$VERILATOR_PATH/bin:$PATH"
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000190 python3 --version
191 fusesoc --version
192 verilator --version
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600193 displayName: Display environment
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000194 - bash: |
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600195 . util/build_consts.sh
196 mkdir -p "$OBJ_DIR/hw"
197 mkdir -p "$BIN_DIR/hw/top_earlgrey"
198
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600199 export PATH="$VERILATOR_PATH/bin:$PATH"
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600200 fusesoc --cores-root=. \
201 run --target=sim --setup --build \
202 --build-root="$OBJ_DIR/hw" \
203 lowrisc:systems:top_earlgrey_verilator
204
205 cp "$OBJ_DIR/hw/sim-verilator/Vtop_earlgrey_verilator" \
206 "$BIN_DIR/hw/top_earlgrey"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600207 displayName: Build simulation with Verilator
208 - template: ci/upload-artifacts-template.yml
Miguel Young de la Sotab4df8602019-11-21 12:44:11 -0600209 parameters:
210 artifact: top_earlgrey_verilator
Philipp Wagnerf4655a12019-10-30 11:59:15 +0000211
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600212- job: execute_verilated_tests
213 displayName: Execute tests on the Verilated system
Timothy Chenf7e85cb2019-12-10 16:24:39 -0800214 pool:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600215 vmImage: ubuntu-16.04
Timothy Chen7d1436d2019-12-04 17:26:14 -0800216 dependsOn:
217 - top_earlgrey_verilator
218 - sw_build
219 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600220 - template: ci/install-package-dependencies.yml
221 - template: ci/download-artifacts-template.yml
Timothy Chen7d1436d2019-12-04 17:26:14 -0800222 - bash: |
223 . util/build_consts.sh
224 export VERILATED_SYSTEM_PATH="$BIN_DIR/hw/top_earlgrey/Vtop_earlgrey_verilator"
Philipp Wagner57418e72019-12-02 21:25:27 +0000225 pytest --version
Timothy Chen7d1436d2019-12-04 17:26:14 -0800226 ci/run_verilator_pytest.sh
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600227 displayName: Execute tests
Timothy Chen7d1436d2019-12-04 17:26:14 -0800228
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600229- job: riscv_compliance_tests
230 displayName: Execute RISC-V compliance tests
Timothy Chenf7e85cb2019-12-10 16:24:39 -0800231 pool:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600232 vmImage: ubuntu-16.04
Timothy Chen7d1436d2019-12-04 17:26:14 -0800233 dependsOn:
234 - top_earlgrey_verilator
235 - execute_verilated_tests
Miguel Young de la Sota523b1622019-12-05 16:00:20 -0600236 # TODO: re-enable this CI step once RISC-V compliance correctly calls into
237 # Meson. See #1181.
238 condition: False
Timothy Chen7d1436d2019-12-04 17:26:14 -0800239 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600240 - template: ci/install-package-dependencies.yml
241 - template: ci/download-artifacts-template.yml
Timothy Chen7d1436d2019-12-04 17:26:14 -0800242 - bash: |
243 . util/build_consts.sh
244 export TARGET_SIM="$BIN_DIR/hw/top_earlgrey/Vtop_earlgrey_verilator"
245 export RISCV_DEVICE=rv32imc
246 export RISCV_TARGET=opentitan
247 export OT_TARGET=verilator
248 export OT_TOOLS="$TOOLCHAIN_PATH/bin"
249 cd sw/vendor/riscv_compliance
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600250
Timothy Chen7d1436d2019-12-04 17:26:14 -0800251 # Only running base interger variant for now, others will be added later.
252 make RISCV_ISA=rv32i
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600253 displayName: Execute tests
Timothy Chen7d1436d2019-12-04 17:26:14 -0800254
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600255- job: top_earlgrey_nexysvideo
256 displayName: Build NexysVideo variant of the Earl Grey toplevel design using Vivado
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000257 dependsOn:
258 - lint
259 # The bootrom is built into the FPGA image at synthesis time.
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600260 - sw_build
Philipp Wagner9d20ee62019-11-29 14:27:28 +0000261 condition: and(succeeded(), eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0'))
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000262 pool: Default
263 timeoutInMinutes: 120 # 2 hours
264 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600265 - template: ci/install-package-dependencies.yml
266 - template: ci/download-artifacts-template.yml
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000267 - bash: |
268 set -e
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600269 . util/build_consts.sh
270 mkdir -p "$OBJ_DIR/hw"
271 mkdir -p "$BIN_DIR/hw/top_earlgrey"
272
Miguel Young de la Sota76526c32020-01-28 10:24:41 -0500273 BOOTROM_VMEM="$BIN_DIR/sw/device/boot_rom/boot_rom_fpga_nexysvideo.vmem"
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600274 test -f "$BOOTROM_VMEM"
275
276 . /opt/xilinx/Vivado/2018.3/settings64.sh
277 fusesoc --cores-root=. \
278 run --target=synth --setup --build \
279 --build-root="$OBJ_DIR/hw" \
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000280 lowrisc:systems:top_earlgrey_nexysvideo \
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600281 --ROM_INIT_FILE="$BOOTROM_VMEM"
282
283 cp "$OBJ_DIR/hw/synth-vivado/lowrisc_systems_top_earlgrey_nexysvideo_0.1.bit" \
284 "$BIN_DIR/hw/top_earlgrey"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600285 displayName: Build bitstream with Vivado
286 - template: ci/upload-artifacts-template.yml
Miguel Young de la Sotab4df8602019-11-21 12:44:11 -0600287 parameters:
288 artifact: top_earlgrey_nexysvideo
lowRISC Contributors802543a2019-08-31 12:12:56 +0100289
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600290- job: deploy_release_artifacts
291 displayName: Package and deploy release distribution
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000292 pool:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600293 vmImage: ubuntu-16.04
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000294 dependsOn:
295 - lint
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600296 - sw_build
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000297 - top_earlgrey_verilator
298 - top_earlgrey_nexysvideo
299 condition: eq(dependencies.lint.outputs['DetermineBuildType.onlyDocChanges'], '0')
300 steps:
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600301 - template: ci/install-package-dependencies.yml
302 - template: ci/download-artifacts-template.yml
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600303 - bash: |
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600304 . util/build_consts.sh
Miguel Young de la Sotab5be8c62019-11-20 10:01:09 -0600305
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600306 util/make_distribution.sh
Philipp Wagner542e2202019-10-30 13:10:16 +0000307
Miguel Young de la Sotad42948c2019-11-18 13:56:55 -0600308 tar --list -f $BIN_DIR/opentitan-*.tar.xz
309 # Put the resulting tar file into a directory the |publish| step below can reference.
310 mkdir "$BUILD_ROOT/dist-final"
311 mv $BIN_DIR/opentitan-*.tar.xz "$BUILD_ROOT/dist-final"
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600312 displayName: Create final dist directory out of partial ones
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000313 - publish: $(Build.ArtifactStagingDirectory)/dist-final
314 artifact: opentitan-dist
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600315 displayName: Upload release artifacts as Azure artifact
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000316 - task: GithubRelease@0
Miguel Young de la Sotaa68e3072020-01-02 13:59:54 -0600317 displayName: Upload to GitHub releases (only tags)
Philipp Wagner0b20f5d2019-11-01 16:24:52 +0000318 condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
Philipp Wagnerbd9ae432019-11-01 14:33:30 +0000319 inputs:
320 gitHubConnection: opentitan-release-upload
321 repositoryName: lowrisc/opentitan
322 addChangeLog: false
323 assets: |
324 $(Build.ArtifactStagingDirectory)/dist-final/*