blob: 368c8bc1072e7f20a68dc00f5b60bc1820c563cd [file] [log] [blame]
#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
# Set various Azure Pipelines variables to figure out what the build
# type should be. These are used to control what downstream CI tasks
# get run.
set -e
if [ $# != 2 ]; then
echo >&2 "Usage: get-build-type.sh <tgt-branch> <build-reason>"
exit 1
fi
tgt_branch="$1"
build_reason="$2"
only_doc_changes=0
only_dv_changes=0
has_otbn_changes=1
only_cdc_changes=0
if [[ "$build_reason" = "PullRequest" ]]; then
# Conservative way of checking for documentation-only and OTBN changes.
# Only relevant for pipelines triggered from pull requests
merge_base="$(git merge-base HEAD origin/$tgt_branch)" || {
echo >&2 "Failed to find fork point for origin/$tgt_branch."
exit 1
}
echo "Considering changes since $merge_base"
echo "Checking for changes in this PR other than to .md files"
# If git diff fails, this means that there were some changes to
# files other than documentation. Otherwise, there are not.
git diff --quiet "$merge_base" -- ':!*.md' && only_doc_changes=1 || true
if [[ $only_doc_changes -eq 1 ]]; then
echo "PR is only doc changes"
else
echo "PR contains non doc changes"
fi
echo "Checking for non-DV changes in this PR"
git diff --quiet "$merge_base" -- ':!*/dv/*' && only_dv_changes=1 || true
if [[ $only_dv_changes -eq 1 ]]; then
echo "PR is only DV changes"
else
echo "PR contains non-DV changes"
fi
# Check if any changes were made to OTBN-related files (hardware,
# software or tooling). This command is "the other way around"
# from the docs and DV commands above. It fails if there are any
# OTBN changes and succeeds otherwise.
echo "Checking if any OTBN changes are in this pull request"
git diff --quiet "$merge_base" -- '*/otbn/*' && has_otbn_changes=0
if [[ $has_otbn_changes -eq 1 ]]; then
echo "PR contains OTBN changes"
else
echo "PR doesn't contain OTBN changes"
fi
# Check if the commit has only CDC related changes (run-cdc.tcl,
# cdc_waivers*.tcl).
echo "Checking for changes in this PR other than to CDC waivers"
git diff --quiet "$merge_base" -- ':(attr:!cdc)' && only_cdc_changes=1 || true
if [[ $only_cdc_changes -eq 1 ]]; then
echo "PR is only CDC waiver changes"
else
echo "PR contains non CDC-related changes"
fi
fi
echo "##vso[task.setvariable variable=onlyDocChanges;isOutput=true]${only_doc_changes}"
echo "##vso[task.setvariable variable=onlyDvChanges;isOutput=true]${only_dv_changes}"
echo "##vso[task.setvariable variable=hasOTBNChanges;isOutput=true]${has_otbn_changes}"
echo "##vso[task.setvariable variable=onlyCdcChanges;isOutput=true]${only_cdc_changes}"