blob: 1ee93e5dc3cb7a8f5aae5d90500958490bb92827 [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 -e
usage_string="
Usage: get-bitstream-strategy.sh <cached-bitstream-target> [pathspec]...
cached-bitsream-target The bazel target for the cached bitstream. This script
will retrieve the most recent image from a commit in this
this branch's history.
pathspec A git pathspec (multiple instances permitted) indicating which files
trigger building the bitstream. Please use only exclude pathspecs
to cause new, unconsidered paths to trigger the build.
"
if [ $# -lt 1 ]; then
echo >&2 "ERROR: Unexpected number of arguments"
echo >&2 "${usage_string}"
exit 1
fi
. util/build_consts.sh
bitstream_target=${*:1:1}
if [ $# -gt 1 ]; then
excluded_files=( "${@:2}" )
else
excluded_files=( "." )
fi
# Retrieve the most recent bitstream at or before HEAD.
BITSTREAM="--refresh HEAD" ./bazelisk.sh build ${bitstream_target}
# The directory containing the bitstream is named after the git hash.
bitstream_file=$(ci/scripts/target-location.sh ${bitstream_target})
bitstream_commit=$(basename "$(dirname ${bitstream_file})")
echo "Checking for changes against pre-built bitstream from ${bitstream_commit}"
echo "Files changed:"
git diff --stat --name-only ${bitstream_commit}
echo
echo "Changed files after exclusions applied:"
# Use the cached bitstream if no changed files remain.
if git diff --exit-code --stat --name-only ${bitstream_commit} -- "${excluded_files[@]}"; then
bitstream_strategy=cached
else
bitstream_strategy=build
fi
echo
echo "Bitstream strategy is ${bitstream_strategy}"
echo "##vso[task.setvariable variable=bitstreamStrategy]${bitstream_strategy}"