# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Azure template for downloading pipeline step outputs and unpacking them.
#
# This template will download all artifacts from upstream jobs (which are
# expected to use upload_artifacts_template.yml) and unpack them.
#
# This template expects that a variable $BUILD_ROOT is set to a writeable
# directory; the results will be available in $BIN_DIR. See
# util/build_consts.sh for more information.

steps:
  - task: DownloadPipelineArtifact@2
    inputs:
      buildType: current
      targetPath: '$(BUILD_ROOT)/downloads'
      # The first "path" segment is the name of the artifact.
      pattern: "*-build-bin/**"
    displayName: 'Download upstream outputs'
  - bash: |
      set -e
      test -n "$BUILD_ROOT"
      . util/build_consts.sh
      mkdir -p "$BIN_DIR"

      find "$BUILD_ROOT/downloads" \
        -name 'build-bin.tar' \
        -exec \
          tar -C "$BIN_DIR" \
          --strip-components=1 \
          --overwrite \
          -xvf {} \;
    displayName: 'Unpack upstream outputs'
