# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
#
# Azure Release Pipeline configuration
# Documentation at https://aka.ms/yaml

schedules:
# For testing purposes, run this pipeline every day at 08:37 UTC
# Use a random minute value to avoid congestion on the hour
- cron: "37 8 * * *"
  displayName: "OpenTitan Release build (test)"
  branches:
    include:
    - "master"
  always: True

# To run on a schedule, PR and other triggers must be disabled
pr: none
trigger: none

variables:
  # If updating VERILATOR_VERSION, TOOLCHAIN_VERSION or RUST_VERSION, update the
  # definitions in util/container/Dockerfile as well.
  VERILATOR_VERSION: 4.210
  TOOLCHAIN_PATH: /opt/buildcache/riscv
  VERIBLE_VERSION: v0.0-2135-gb534c1fe
  RUST_VERSION: 1.60.0
    # Release tag from https://github.com/lowRISC/lowrisc-toolchains/releases
  TOOLCHAIN_VERSION: 20220210-1
    # This controls where builds happen, and gets picked up by build_consts.sh.
  BUILD_ROOT: $(Build.ArtifactStagingDirectory)
  VIVADO_VERSION: "2020.2"

jobs:
- job: checkout
  displayName: "Checkout repository"
  pool:
    vmImage: ubuntu-20.04
  steps:
  - checkout: self
    path: opentitan-repo
  - bash: |
      tar -C $(Pipeline.Workspace)/opentitan-repo -czf $(Pipeline.Workspace)/opentitan-repo.tar.gz .
    displayName: "Pack up repository"
  - publish: $(Pipeline.Workspace)/opentitan-repo.tar.gz
    artifact: opentitan-repo
    displayName: "Upload repository"

- job: build_release
  displayName: "Create the OpenTitan release"
  timeoutInMinutes: 240
  dependsOn: checkout
  pool: ci-public
  steps:
  - template: ../ci/checkout-template.yml
  - template: ../ci/install-package-dependencies.yml
  - bash: |
      set -ex
      trap 'get_logs' EXIT
      get_logs() {
        # Export the Vivado logs
        mkdir -p $OBJ_DIR/hw/top_earlgrey/standard-release
        mkdir -p $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug-release/
        cp -rLt $OBJ_DIR/hw/top_earlgrey/standard-release \
          $($REPO_TOP/bazelisk.sh outquery-all //hw/bitstream/vivado:fpga_cw310)
        cp -rLt $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug-release/ \
          $($REPO_TOP/bazelisk.sh outquery-all //hw/bitstream/vivado:fpga_cw310_hyperdebug)
      }

      . util/build_consts.sh
      module load "xilinx/vivado/$(VIVADO_VERSION)"
      # Build the release package
      # --jobs=1 is necessary due to resource constraints on the build machine.
      # Running multiple Vivado and Verilator build jobs simultaneously can
      # cause Synthesis failures
      ci/bazelisk.sh build release --jobs=1

      # Set the package-path variable for the artifact-publishing step
      PKG_PATH=$(./bazelisk.sh outquery //release:opentitan)
      echo $PKG_PATH
      echo "##vso[task.setvariable variable=pkg_path]$PKG_PATH"
    displayName: "Build Bazel release package"

  - bash: |
      . util/build_consts.sh
      echo "Synthesis log"
      cat $OBJ_DIR/hw/top_earlgrey/standard-release/build.fpga_cw310/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/synth_1/runme.log || true
      echo "Implementation log"
      cat $OBJ_DIR/hw/top_earlgrey/standard-release/build.fpga_cw310/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/impl_1/runme.log || true
    displayName: "Display standard bitstream synth and impl logs"

  - bash: |
      . util/build_consts.sh
      echo "Synthesis log"
      cat $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug-release/build.fpga_cw310/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/synth_1/runme.log || true
      echo "Implementation log"
      cat $OBJ_DIR/hw/top_earlgrey/chip_earlgrey_cw310_hyperdebug-release/build.fpga_cw310/synth-vivado/lowrisc_systems_chip_earlgrey_cw310_0.1.runs/impl_1/runme.log || true
    displayName: "Display hyperdebug bitstream synth and impl logs"

  - publish: $(pkg_path)
    artifact: opentitan-release
    displayName: "Upload release artifacts"
