##############################
# THIS FILE IS AUTOGENERATED #
#    DO NOT MANUALLY EDIT    #
##############################
trigger: none
pr:
  autoCancel: true
  drafts: false
  branches:
    include:
    - main
    - release/*
    - embargo/*
parameters:
- name: verbose
  displayName: Run with verbose output
  type: boolean
  default: false
jobs:
- job: job0
  displayName: quick check [fmt, clippy x64-linux]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn: []
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - bash: |
      set -x
      i=0; while [ $i -lt 5 ] && ! sudo apt-get update; do let "i=i+1"; sleep 1; done;
      sudo apt-get -o DPkg::Lock::Timeout=60 install gcc -y
      curl --fail --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.94.0 -y
      . "$HOME/.cargo/env"
      echo '##vso[task.prependpath]$(HOME)/.cargo/bin'
    condition: eq(variables['Agent.OS'], 'Linux')
    displayName: rustup (Linux)
  - bash: |
      set -x
      curl --fail -sSfLo rustup-init.exe https://win.rustup.rs/x86_64 --output rustup-init
      ./rustup-init.exe -y --default-toolchain=1.94.0
      echo '##vso[task.prependpath]$(USERPROFILE)\\.cargo\\bin'
    condition: eq(variables['Agent.OS'], 'Windows_NT')
    displayName: rustup (Windows X64)
  - bash: |
      set -x
      rustup show
    displayName: Verify rustup installation
  - checkout: self
    fetchTags: false
    fetchDepth: 1
    path: flowey_bootstrap
  - bash: CARGO_INCREMENTAL=0 RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z threads=8" cargo build -p flowey_hvlite --target x86_64-unknown-linux-gnu --profile flowey-ci
    workingDirectory: ../flowey_bootstrap
    displayName: Build flowey
  - bash: |
      mkdir ./flowey_bootstrap_temp
      mv ./ci-flowey/openvmm-pr.yaml ./flowey_bootstrap_temp/pipeline.yaml
      mv ./ci-flowey/openvmm-pr.json ./flowey_bootstrap_temp/pipeline.json
      mv target/x86_64-unknown-linux-gnu/flowey-ci/flowey_hvlite ./flowey_bootstrap_temp/flowey
    workingDirectory: ../flowey_bootstrap
    displayName: Stage flowey artifact
  - task: CopyFiles@2
    displayName: Copy flowey artifact
    inputs:
      SourceFolder: ../flowey_bootstrap/flowey_bootstrap_temp
      TargetFolder: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: rm -rf ./flowey_bootstrap_temp
    workingDirectory: ../flowey_bootstrap
    displayName: Cleanup staged flowey artifact
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |-
      ESCAPED_AGENT_TEMPDIR=$(
      cat <<'EOF' | sed 's/\\/\\\\/g'
      $(FLOWEY_TEMP_DIR)
      EOF
      )
      $(FLOWEY_BIN) pipeline ado --runtime $ESCAPED_AGENT_TEMPDIR/bootstrapped-flowey/pipeline.yaml --out ci-flowey/openvmm-pr.yaml ci checkin-gates --config=pr
    displayName: 🌼🔎 Self-check YAML
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 0 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 0 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 0 'verbose' update
      ${{ parameters.verbose }}
      EOF
    displayName: 🌼🛫 Initialize job
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 0 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 0 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 0 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_common::cache 0
      $FLOWEY_BIN v 0 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 0 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 0 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 0 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::init_cross_build 2
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::run_cargo_build 2
    displayName: cargo build xtask
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::run_split_debug_info 0
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::run_cargo_build 3
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::build_xtask 1
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::_jobs::check_xtask_fmt 0
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::init_cross_build 0
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::init_cross_build 1
    displayName: run xtask fmt
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::run_cargo_build 0
    displayName: cargo build xtask
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::run_split_debug_info 1
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 0 flowey_lib_hvlite::build_xtask 0
    displayName: split debug symbols
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_hvlite::_jobs::check_clippy 0
    displayName: determine clippy exclusions
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_common::run_cargo_clippy 0
    displayName: cargo clippy
  - bash: $(FLOWEY_BIN) e 0 flowey_lib_common::cache 3
    displayName: 'validate cache entry: gh-release-download'
  - bash: rm $(AgentTempDirNormal)/bootstrapped-flowey/job0.json
    displayName: 🌼🧼 Redact bootstrap var db
  - publish: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
    displayName: 🌼🥾 Publish bootstrapped flowey
    artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
- job: job12
  displayName: clippy [x64-linux-musl, misc nostd], unit tests [x64-linux-musl]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 12 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 12 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 12 'verbose' update
      ${{ parameters.verbose }}
      EOF
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 12 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 12 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar6
      $FLOWEY_BIN v 12 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar6)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::git_checkout_openvmm_repo 0
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::cache 4
      $FLOWEY_BIN v 12 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar4
      $FLOWEY_BIN v 12 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar5
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar5)
      path: $(floweyvar4)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 12 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 12 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_hvlite::resolve_openvmm_deps 0
    displayName: unpack openvmm-deps archive
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0
    displayName: extract X64 sysroot.tar.gz
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::resolve_protoc 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::init_cross_build 2
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::init_cross_build 0
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::run_cargo_build 0
    displayName: cargo build xtask
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::run_split_debug_info 1
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::build_xtask 0
    displayName: split debug symbols
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_hvlite::_jobs::check_clippy 0
    displayName: determine clippy exclusions
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::run_cargo_clippy 0
    displayName: cargo clippy
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::run_cargo_clippy 2
    displayName: cargo clippy
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::run_cargo_clippy 1
    displayName: cargo clippy
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 12 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 12 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 12 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::cache 0
      $FLOWEY_BIN v 12 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 12 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 12 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 12 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::install_rust 2
    displayName: report $CARGO_HOME
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::install_cargo_nextest 0
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::init_cross_build 1
    displayName: installing cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::run_cargo_build 2
    displayName: cargo build xtask
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::run_split_debug_info 0
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::run_cargo_build 3
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::build_xtask 1
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::build_nextest_unit_tests 0
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::init_cross_build 3
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::run_cargo_nextest_run 0
    displayName: determine unit test exclusions
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::gen_cargo_nextest_run_cmd 0
    displayName: generate nextest command
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 12 flowey_lib_common::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 12 flowey_lib_common::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 12 flowey_lib_hvlite::_jobs::build_and_run_nextest_unit_tests 0
      $(FLOWEY_BIN) e 12 flowey_lib_common::publish_test_results 1
      $(FLOWEY_BIN) e 12 flowey_lib_common::ado_task_publish_test_results 0
      $(FLOWEY_BIN) e 12 flowey_lib_common::publish_test_results 0
      $FLOWEY_BIN v 12 'flowey_lib_common::ado_task_publish_test_results:0:flowey_lib_common/src/ado_task_publish_test_results.rs:57:45' --is-raw-string --condvar flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43 write-to-env ado floweyvar1
      $FLOWEY_BIN v 12 'flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43' write-to-env ado FLOWEY_CONDITION
    displayName: run 'unit-tests' nextest tests
  - task: PublishTestResults@2
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: $(floweyvar1)
      testRunTitle: x64-linux-musl-unit-tests
    displayName: 'publish test results: x64-linux-musl-unit-tests (JUnit XML)'
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_hvlite::_jobs::build_and_run_nextest_unit_tests 1
    displayName: report test results to overall pipeline status
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_hvlite::_jobs::build_and_run_doc_tests 0
    displayName: run doctests for x86_64-unknown-linux-musl
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 12 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
- job: job11
  displayName: clippy [macos], unit tests [x64-linux]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 11 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 11 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 11 'verbose' update
      ${{ parameters.verbose }}
      EOF
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 11 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 11 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar6
      $FLOWEY_BIN v 11 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar6)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::cache 4
      $FLOWEY_BIN v 11 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar4
      $FLOWEY_BIN v 11 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar5
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar5)
      path: $(floweyvar4)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 11 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 11 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::init_cross_build 1
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::run_cargo_build 0
    displayName: cargo build xtask
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::run_split_debug_info 1
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::build_xtask 0
    displayName: split debug symbols
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_hvlite::_jobs::check_clippy 0
    displayName: determine clippy exclusions
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::run_cargo_clippy 0
    displayName: cargo clippy
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 11 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 11 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 11 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::cache 0
      $FLOWEY_BIN v 11 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 11 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 11 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 11 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::install_rust 2
    displayName: report $CARGO_HOME
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::install_cargo_nextest 0
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::init_cross_build 2
    displayName: installing cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::run_cargo_build 2
    displayName: cargo build xtask
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::run_split_debug_info 0
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::run_cargo_build 3
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::build_xtask 1
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::build_nextest_unit_tests 0
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::init_cross_build 0
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::run_cargo_nextest_run 0
    displayName: determine unit test exclusions
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::gen_cargo_nextest_run_cmd 0
    displayName: generate nextest command
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 11 flowey_lib_common::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 11 flowey_lib_common::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 11 flowey_lib_hvlite::_jobs::build_and_run_nextest_unit_tests 0
      $(FLOWEY_BIN) e 11 flowey_lib_common::publish_test_results 1
      $(FLOWEY_BIN) e 11 flowey_lib_common::ado_task_publish_test_results 0
      $(FLOWEY_BIN) e 11 flowey_lib_common::publish_test_results 0
      $FLOWEY_BIN v 11 'flowey_lib_common::ado_task_publish_test_results:0:flowey_lib_common/src/ado_task_publish_test_results.rs:57:45' --is-raw-string --condvar flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43 write-to-env ado floweyvar1
      $FLOWEY_BIN v 11 'flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43' write-to-env ado FLOWEY_CONDITION
    displayName: run 'unit-tests' nextest tests
  - task: PublishTestResults@2
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: $(floweyvar1)
      testRunTitle: x64-linux-unit-tests
    displayName: 'publish test results: x64-linux-unit-tests (JUnit XML)'
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_hvlite::_jobs::build_and_run_nextest_unit_tests 1
    displayName: report test results to overall pipeline status
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_hvlite::_jobs::build_and_run_doc_tests 0
    displayName: run doctests for x86_64-unknown-linux-gnu
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 11 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
- job: job10
  displayName: clippy [x64-windows], unit tests [x64-windows]
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - bash: |
      set -x
      i=0; while [ $i -lt 5 ] && ! sudo apt-get update; do let "i=i+1"; sleep 1; done;
      sudo apt-get -o DPkg::Lock::Timeout=60 install gcc -y
      curl --fail --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.94.0 -y
      . "$HOME/.cargo/env"
      echo '##vso[task.prependpath]$(HOME)/.cargo/bin'
    condition: eq(variables['Agent.OS'], 'Linux')
    displayName: rustup (Linux)
  - bash: |
      set -x
      curl --fail -sSfLo rustup-init.exe https://win.rustup.rs/x86_64 --output rustup-init
      ./rustup-init.exe -y --default-toolchain=1.94.0
      echo '##vso[task.prependpath]$(USERPROFILE)\\.cargo\\bin'
    condition: eq(variables['Agent.OS'], 'Windows_NT')
    displayName: rustup (Windows X64)
  - bash: |
      set -x
      rustup show
    displayName: Verify rustup installation
  - checkout: self
    fetchTags: false
    fetchDepth: 1
    path: flowey_bootstrap
  - bash: CARGO_INCREMENTAL=0 RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z threads=8" cargo build -p flowey_hvlite --target x86_64-pc-windows-msvc --profile flowey-ci
    workingDirectory: ../flowey_bootstrap
    displayName: Build flowey
  - bash: |
      mkdir ./flowey_bootstrap_temp
      mv ./ci-flowey/openvmm-pr.yaml ./flowey_bootstrap_temp/pipeline.yaml
      mv ./ci-flowey/openvmm-pr.json ./flowey_bootstrap_temp/pipeline.json
      mv target/x86_64-pc-windows-msvc/flowey-ci/flowey_hvlite.exe ./flowey_bootstrap_temp/flowey.exe
    workingDirectory: ../flowey_bootstrap
    displayName: Stage flowey artifact
  - task: CopyFiles@2
    displayName: Copy flowey artifact
    inputs:
      SourceFolder: ../flowey_bootstrap/flowey_bootstrap_temp
      TargetFolder: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: rm -rf ./flowey_bootstrap_temp
    workingDirectory: ../flowey_bootstrap
    displayName: Cleanup staged flowey artifact
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |-
      ESCAPED_AGENT_TEMPDIR=$(
      cat <<'EOF' | sed 's/\\/\\\\/g'
      $(FLOWEY_TEMP_DIR)
      EOF
      )
      $(FLOWEY_BIN) pipeline ado --runtime $ESCAPED_AGENT_TEMPDIR\\bootstrapped-flowey\\pipeline.yaml --out ci-flowey/openvmm-pr.yaml ci checkin-gates --config=pr
    displayName: 🌼🔎 Self-check YAML
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 10 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 10 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 10 'verbose' update
      ${{ parameters.verbose }}
      EOF
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 10 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 10 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar6
      $FLOWEY_BIN v 10 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar6)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::cache 4
      $FLOWEY_BIN v 10 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar4
      $FLOWEY_BIN v 10 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar5
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar5)
      path: $(floweyvar4)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 10 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 10 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::init_cross_build 0
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::init_cross_build 2
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::run_cargo_build 0
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::build_xtask 0
    displayName: cargo build xtask
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_hvlite::_jobs::check_clippy 0
    displayName: determine clippy exclusions
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::run_cargo_clippy 0
    displayName: cargo clippy
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 10 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 10 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 10 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::cache 0
      $FLOWEY_BIN v 10 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 10 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 10 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 10 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::install_rust 2
    displayName: report $CARGO_HOME
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::install_cargo_nextest 0
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::init_cross_build 3
    displayName: installing cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::build_xtask 1
    displayName: cargo build xtask
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::build_nextest_unit_tests 0
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::init_cross_build 1
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::run_cargo_nextest_run 0
    displayName: determine unit test exclusions
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::gen_cargo_nextest_run_cmd 0
    displayName: generate nextest command
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 10 flowey_lib_common::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 10 flowey_lib_common::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 10 flowey_lib_hvlite::_jobs::build_and_run_nextest_unit_tests 0
      $(FLOWEY_BIN) e 10 flowey_lib_common::publish_test_results 1
      $(FLOWEY_BIN) e 10 flowey_lib_common::ado_task_publish_test_results 0
      $(FLOWEY_BIN) e 10 flowey_lib_common::publish_test_results 0
      $FLOWEY_BIN v 10 'flowey_lib_common::ado_task_publish_test_results:0:flowey_lib_common/src/ado_task_publish_test_results.rs:57:45' --is-raw-string --condvar flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43 write-to-env ado floweyvar1
      $FLOWEY_BIN v 10 'flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43' write-to-env ado FLOWEY_CONDITION
    displayName: run 'unit-tests' nextest tests
  - task: PublishTestResults@2
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: $(floweyvar1)
      testRunTitle: x64-windows-unit-tests
    displayName: 'publish test results: x64-windows-unit-tests (JUnit XML)'
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_hvlite::_jobs::build_and_run_nextest_unit_tests 1
    displayName: report test results to overall pipeline status
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_hvlite::_jobs::build_and_run_doc_tests 0
    displayName: run doctests for x86_64-pc-windows-msvc
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 10 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
- job: job9
  displayName: build openhcl [x64-linux]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 9 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 9 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 9 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-musl-pipette"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-musl-pipette" | $FLOWEY_BIN v 9 'artifact_publish_from_x64-linux-musl-pipette' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-musl-tmk_vmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-musl-tmk_vmm" | $FLOWEY_BIN v 9 'artifact_publish_from_x64-linux-musl-tmk_vmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-openhcl-igvm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-openhcl-igvm" | $FLOWEY_BIN v 9 'artifact_publish_from_x64-openhcl-igvm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-openhcl-igvm-extras"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-openhcl-igvm-extras" | $FLOWEY_BIN v 9 'artifact_publish_from_x64-openhcl-igvm-extras' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::cache 0
      $FLOWEY_BIN v 9 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar1
      $FLOWEY_BIN v 9 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar2
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar2)
      path: $(floweyvar1)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 9 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 9 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_hvlite::download_uefi_mu_msvm 0
    displayName: unpack mu_msvm package (x64)
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 9 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 9 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar3
      $FLOWEY_BIN v 9 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar3)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_cross_build 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 9
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 10
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::run_cargo_build 4
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 11
    displayName: cargo build sidecar
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 7
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 12
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_sidecar 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_cross_build 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 3
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 4
    displayName: cargo build openhcl_boot
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 5
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 5
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_boot 0
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::resolve_openhcl_kernel_package 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 28
    displayName: extract and resolve kernel package
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_hvlite::resolve_openvmm_deps 0
    displayName: unpack openvmm-deps archive
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_cross_build 3
    displayName: extract X64 sysroot.tar.gz
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 6
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openvmm_hcl 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 24
    displayName: cargo build openvmm_hcl
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 4
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 25
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 26
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 29
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_initrd 4
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 30
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_cross_build 2
    displayName: building openhcl initrd
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 0
    displayName: cargo build igvmfilegen
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 9
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_igvmfilegen 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 31
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 32
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_igvmfilegen 4
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 39
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 35
    displayName: building igvm file
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 36
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 37
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 40
    displayName: split debug symbols
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_hvlite::resolve_openhcl_kernel_package 0
    displayName: extract and resolve kernel package
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_initrd 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 41
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 42
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 43
    displayName: building openhcl initrd
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_igvmfilegen 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 4
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 50
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 46
    displayName: building igvm file
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 47
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 48
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 51
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_initrd 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 52
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 53
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 54
    displayName: building openhcl initrd
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_igvmfilegen 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 6
    displayName: building igvm file
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::resolve_openhcl_kernel_package 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 17
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 13
    displayName: extract and resolve kernel package
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 3
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 14
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 15
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 18
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_initrd 3
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 19
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 20
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 21
    displayName: building openhcl initrd
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_igvmfilegen 3
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 8
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 6
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 2
    displayName: building igvm file
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 3
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 4
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 7
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_initrd 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 8
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 9
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 10
    displayName: building openhcl initrd
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_igvmfilegen 2
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::artifact_openhcl_igvm_from_recipe::publish 0
    displayName: building igvm file
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::copy_to_artifact_dir 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 22
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 27
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 23
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 3
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 38
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 34
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 33
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 5
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 49
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 45
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 44
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 7
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 16
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 12
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 11
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 9
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 5
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 1
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::artifact_openhcl_igvm_from_recipe_extras::publish 0
    displayName: copying OpenHCL igvm files to artifact dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::copy_to_artifact_dir 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_cross_build 4
    displayName: copying OpenHCL igvm extras to artifact dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 7
    displayName: cargo build pipette
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 6
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 8
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_pipette 0
      $(FLOWEY_BIN) e 9 flowey_core::pipeline::artifact::publish 0
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::init_cross_build 5
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_common::run_cargo_build 5
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 13
    displayName: cargo build tmk_vmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_split_debug_info 8
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::run_cargo_build 14
      $(FLOWEY_BIN) e 9 flowey_lib_hvlite::build_tmk_vmm 0
      $(FLOWEY_BIN) e 9 flowey_core::pipeline::artifact::publish 1
    displayName: split debug symbols
  - bash: $(FLOWEY_BIN) e 9 flowey_lib_common::cache 3
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-musl-pipette
    displayName: 🌼📦 Publish x64-linux-musl-pipette
    artifact: x64-linux-musl-pipette
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-musl-tmk_vmm
    displayName: 🌼📦 Publish x64-linux-musl-tmk_vmm
    artifact: x64-linux-musl-tmk_vmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-openhcl-igvm
    displayName: 🌼📦 Publish x64-openhcl-igvm
    artifact: x64-openhcl-igvm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-openhcl-igvm-extras
    displayName: 🌼📦 Publish x64-openhcl-igvm-extras
    artifact: x64-openhcl-igvm-extras
- job: job8
  displayName: build openhcl [aarch64-linux]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 8 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 8 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 8 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-musl-pipette"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-musl-pipette" | $FLOWEY_BIN v 8 'artifact_publish_from_aarch64-linux-musl-pipette' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-musl-tmk_vmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-musl-tmk_vmm" | $FLOWEY_BIN v 8 'artifact_publish_from_aarch64-linux-musl-tmk_vmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-openhcl-igvm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-openhcl-igvm" | $FLOWEY_BIN v 8 'artifact_publish_from_aarch64-openhcl-igvm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-openhcl-igvm-extras"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-openhcl-igvm-extras" | $FLOWEY_BIN v 8 'artifact_publish_from_aarch64-openhcl-igvm-extras' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::cache 0
      $FLOWEY_BIN v 8 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar1
      $FLOWEY_BIN v 8 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar2
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar2)
      path: $(floweyvar1)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 8 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 8 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_hvlite::download_uefi_mu_msvm 0
    displayName: unpack mu_msvm package (aarch64)
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 8 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 8 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar3
      $FLOWEY_BIN v 8 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar3)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_cross_build 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 3
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 4
    displayName: cargo build openhcl_boot
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_split_debug_info 2
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 5
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_boot 0
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::resolve_openhcl_kernel_package 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 17
    displayName: extract and resolve kernel package
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_hvlite::resolve_openvmm_deps 0
    displayName: unpack openvmm-deps archive
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_cross_build 1
    displayName: extract Aarch64 sysroot.tar.gz
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 6
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openvmm_hcl 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 13
    displayName: cargo build openvmm_hcl
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_split_debug_info 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 14
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 15
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 18
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_initrd 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 19
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_cross_build 4
    displayName: building openhcl initrd
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 0
    displayName: cargo build igvmfilegen
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_split_debug_info 5
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_igvmfilegen 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 20
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 21
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_igvmfilegen 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 2
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 6
    displayName: building igvm file
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::resolve_openhcl_kernel_package 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 2
    displayName: extract and resolve kernel package
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_split_debug_info 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 3
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 4
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 7
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_initrd 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 8
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 9
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 10
    displayName: building openhcl initrd
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_igvmfilegen 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::artifact_openhcl_igvm_from_recipe::publish 0
    displayName: building igvm file
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::copy_to_artifact_dir 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 11
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 16
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 12
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 3
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 5
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::_jobs::build_and_publish_openhcl_igvm_from_recipe 1
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::artifact_openhcl_igvm_from_recipe_extras::publish 0
    displayName: copying OpenHCL igvm files to artifact dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::copy_to_artifact_dir 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_cross_build 2
    displayName: copying OpenHCL igvm extras to artifact dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 7
    displayName: cargo build pipette
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_split_debug_info 3
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 8
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_pipette 0
      $(FLOWEY_BIN) e 8 flowey_core::pipeline::artifact::publish 0
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::init_cross_build 3
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_common::run_cargo_build 4
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 9
    displayName: cargo build tmk_vmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_split_debug_info 4
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::run_cargo_build 10
      $(FLOWEY_BIN) e 8 flowey_lib_hvlite::build_tmk_vmm 0
      $(FLOWEY_BIN) e 8 flowey_core::pipeline::artifact::publish 1
    displayName: split debug symbols
  - bash: $(FLOWEY_BIN) e 8 flowey_lib_common::cache 3
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-musl-pipette
    displayName: 🌼📦 Publish aarch64-linux-musl-pipette
    artifact: aarch64-linux-musl-pipette
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-musl-tmk_vmm
    displayName: 🌼📦 Publish aarch64-linux-musl-tmk_vmm
    artifact: aarch64-linux-musl-tmk_vmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-openhcl-igvm
    displayName: 🌼📦 Publish aarch64-openhcl-igvm
    artifact: aarch64-openhcl-igvm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-openhcl-igvm-extras
    displayName: 🌼📦 Publish aarch64-openhcl-igvm-extras
    artifact: aarch64-openhcl-igvm-extras
- job: job7
  displayName: build artifacts [x64-linux]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 7 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 7 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 7 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-guest_test_uefi"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-guest_test_uefi" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-guest_test_uefi' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-igvmfilegen"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-igvmfilegen" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-linux-igvmfilegen' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-ohcldiag-dev"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-ohcldiag-dev" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-linux-ohcldiag-dev' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-openvmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-openvmm" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-linux-openvmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-tpm_guest_tests"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-tpm_guest_tests" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-linux-tpm_guest_tests' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-vmgs_lib"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-vmgs_lib" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-linux-vmgs_lib' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-vmgstool"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-vmgstool" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-linux-vmgstool' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-linux-vmm-tests-archive"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-vmm-tests-archive" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-linux-vmm-tests-archive' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-tmks"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-tmks" | $FLOWEY_BIN v 7 'artifact_publish_from_x64-tmks' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 7 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 7 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 7 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::cache 4
      $FLOWEY_BIN v 7 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar4
      $FLOWEY_BIN v 7 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar5
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar5)
      path: $(floweyvar4)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 7 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 7 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 3
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 5
    displayName: cargo build openvmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_split_debug_info 1
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 6
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_openvmm 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 6
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 7
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 14
    displayName: cargo build vmgstool
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_split_debug_info 4
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 15
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_vmgstool 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 1
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 5
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 6
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 13
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_and_test_vmgs_lib 0
    displayName: cargo build vmgs_lib
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_and_test_vmgs_lib 1
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_and_test_vmgs_lib 2
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 2
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 7
    displayName: test vmgs_lib
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 1
    displayName: cargo build igvmfilegen
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_split_debug_info 5
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_igvmfilegen 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 3
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 2
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 3
    displayName: cargo build ohcldiag-dev
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_split_debug_info 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 4
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_ohcldiag_dev 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 4
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 8
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 0
    displayName: cargo build guest_test_uefi
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_guest_test_uefi 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 5
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 7
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 8
    displayName: build guest_test_uefi.img
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 4
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 9
    displayName: cargo build simple_tmk
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_split_debug_info 2
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 10
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_tmks 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 6
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 4
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_build 5
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 11
    displayName: cargo build tpm_guest_tests
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_split_debug_info 3
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::run_cargo_build 12
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_tpm_guest_tests 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 7
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 7 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 7 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 7 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::cache 0
      $FLOWEY_BIN v 7 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 7 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 7 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 7 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::install_rust 2
    displayName: report $CARGO_HOME
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::install_cargo_nextest 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::init_cross_build 1
    displayName: installing cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 7 flowey_lib_common::run_cargo_nextest_archive 0
      $(FLOWEY_BIN) e 7 flowey_lib_hvlite::build_nextest_vmm_tests 0
      $(FLOWEY_BIN) e 7 flowey_core::pipeline::artifact::publish 8
    displayName: build + archive 'vmm_tests' nextests
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 7 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-guest_test_uefi
    displayName: 🌼📦 Publish x64-guest_test_uefi
    artifact: x64-guest_test_uefi
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-igvmfilegen
    displayName: 🌼📦 Publish x64-linux-igvmfilegen
    artifact: x64-linux-igvmfilegen
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-ohcldiag-dev
    displayName: 🌼📦 Publish x64-linux-ohcldiag-dev
    artifact: x64-linux-ohcldiag-dev
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-openvmm
    displayName: 🌼📦 Publish x64-linux-openvmm
    artifact: x64-linux-openvmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-tpm_guest_tests
    displayName: 🌼📦 Publish x64-linux-tpm_guest_tests
    artifact: x64-linux-tpm_guest_tests
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-vmgs_lib
    displayName: 🌼📦 Publish x64-linux-vmgs_lib
    artifact: x64-linux-vmgs_lib
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-vmgstool
    displayName: 🌼📦 Publish x64-linux-vmgstool
    artifact: x64-linux-vmgstool
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-linux-vmm-tests-archive
    displayName: 🌼📦 Publish x64-linux-vmm-tests-archive
    artifact: x64-linux-vmm-tests-archive
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-tmks
    displayName: 🌼📦 Publish x64-tmks
    artifact: x64-tmks
- job: job6
  displayName: build artifacts [aarch64-linux]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 6 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 6 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 6 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-guest_test_uefi"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-guest_test_uefi" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-guest_test_uefi' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-igvmfilegen"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-igvmfilegen" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-linux-igvmfilegen' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-ohcldiag-dev"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-ohcldiag-dev" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-linux-ohcldiag-dev' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-openvmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-openvmm" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-linux-openvmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-tpm_guest_tests"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-tpm_guest_tests" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-linux-tpm_guest_tests' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-vmgs_lib"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-vmgs_lib" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-linux-vmgs_lib' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-linux-vmgstool"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-vmgstool" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-linux-vmgstool' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-tmks"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-tmks" | $FLOWEY_BIN v 6 'artifact_publish_from_aarch64-tmks' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 6 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 6 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: $(FLOWEY_BIN) e 6 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 6 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 6 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 6 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 6 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::cache 0
      $FLOWEY_BIN v 6 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 6 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 6 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 6 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 6 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 2
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 5
    displayName: cargo build openvmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_split_debug_info 1
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 6
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_openvmm 0
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 0
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 5
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 7
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 14
    displayName: cargo build vmgstool
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_split_debug_info 4
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 15
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_vmgstool 0
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 1
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 4
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 6
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 13
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_and_test_vmgs_lib 0
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_and_test_vmgs_lib 1
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 2
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 6
    displayName: cargo build vmgs_lib
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 1
    displayName: cargo build igvmfilegen
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_split_debug_info 5
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_igvmfilegen 0
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 3
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 1
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 3
    displayName: cargo build ohcldiag-dev
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_split_debug_info 0
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 4
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_ohcldiag_dev 0
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 4
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 7
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 0
    displayName: cargo build guest_test_uefi
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_guest_test_uefi 0
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 5
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 0
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 7
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 8
    displayName: build guest_test_uefi.img
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 4
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 9
    displayName: cargo build simple_tmk
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_split_debug_info 2
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 10
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_tmks 0
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 6
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::init_cross_build 3
    displayName: split debug symbols
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_common::run_cargo_build 5
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 11
    displayName: cargo build tpm_guest_tests
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_split_debug_info 3
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::run_cargo_build 12
      $(FLOWEY_BIN) e 6 flowey_lib_hvlite::build_tpm_guest_tests 0
      $(FLOWEY_BIN) e 6 flowey_core::pipeline::artifact::publish 7
    displayName: split debug symbols
  - bash: $(FLOWEY_BIN) e 6 flowey_lib_common::cache 3
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-guest_test_uefi
    displayName: 🌼📦 Publish aarch64-guest_test_uefi
    artifact: aarch64-guest_test_uefi
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-igvmfilegen
    displayName: 🌼📦 Publish aarch64-linux-igvmfilegen
    artifact: aarch64-linux-igvmfilegen
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-ohcldiag-dev
    displayName: 🌼📦 Publish aarch64-linux-ohcldiag-dev
    artifact: aarch64-linux-ohcldiag-dev
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-openvmm
    displayName: 🌼📦 Publish aarch64-linux-openvmm
    artifact: aarch64-linux-openvmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-tpm_guest_tests
    displayName: 🌼📦 Publish aarch64-linux-tpm_guest_tests
    artifact: aarch64-linux-tpm_guest_tests
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-vmgs_lib
    displayName: 🌼📦 Publish aarch64-linux-vmgs_lib
    artifact: aarch64-linux-vmgs_lib
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-linux-vmgstool
    displayName: 🌼📦 Publish aarch64-linux-vmgstool
    artifact: aarch64-linux-vmgstool
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-tmks
    displayName: 🌼📦 Publish aarch64-tmks
    artifact: aarch64-tmks
- job: job5
  displayName: build artifacts (for VMM tests) [x64-windows]
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - bash: |
      set -x
      i=0; while [ $i -lt 5 ] && ! sudo apt-get update; do let "i=i+1"; sleep 1; done;
      sudo apt-get -o DPkg::Lock::Timeout=60 install gcc -y
      curl --fail --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.94.0 -y
      . "$HOME/.cargo/env"
      echo '##vso[task.prependpath]$(HOME)/.cargo/bin'
    condition: eq(variables['Agent.OS'], 'Linux')
    displayName: rustup (Linux)
  - bash: |
      set -x
      curl --fail -sSfLo rustup-init.exe https://win.rustup.rs/x86_64 --output rustup-init
      ./rustup-init.exe -y --default-toolchain=1.94.0
      echo '##vso[task.prependpath]$(USERPROFILE)\\.cargo\\bin'
    condition: eq(variables['Agent.OS'], 'Windows_NT')
    displayName: rustup (Windows X64)
  - bash: |
      set -x
      rustup show
    displayName: Verify rustup installation
  - checkout: self
    fetchTags: false
    fetchDepth: 1
    path: flowey_bootstrap
  - bash: CARGO_INCREMENTAL=0 RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z threads=8" cargo build -p flowey_hvlite --target x86_64-pc-windows-msvc --profile flowey-ci
    workingDirectory: ../flowey_bootstrap
    displayName: Build flowey
  - bash: |
      mkdir ./flowey_bootstrap_temp
      mv ./ci-flowey/openvmm-pr.yaml ./flowey_bootstrap_temp/pipeline.yaml
      mv ./ci-flowey/openvmm-pr.json ./flowey_bootstrap_temp/pipeline.json
      mv target/x86_64-pc-windows-msvc/flowey-ci/flowey_hvlite.exe ./flowey_bootstrap_temp/flowey.exe
    workingDirectory: ../flowey_bootstrap
    displayName: Stage flowey artifact
  - task: CopyFiles@2
    displayName: Copy flowey artifact
    inputs:
      SourceFolder: ../flowey_bootstrap/flowey_bootstrap_temp
      TargetFolder: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: rm -rf ./flowey_bootstrap_temp
    workingDirectory: ../flowey_bootstrap
    displayName: Cleanup staged flowey artifact
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |-
      ESCAPED_AGENT_TEMPDIR=$(
      cat <<'EOF' | sed 's/\\/\\\\/g'
      $(FLOWEY_TEMP_DIR)
      EOF
      )
      $(FLOWEY_BIN) pipeline ado --runtime $ESCAPED_AGENT_TEMPDIR\\bootstrapped-flowey\\pipeline.yaml --out ci-flowey/openvmm-pr.yaml ci checkin-gates --config=pr
    displayName: 🌼🔎 Self-check YAML
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 5 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 5 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 5 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-openvmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-openvmm" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-openvmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-pipette"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-pipette" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-pipette' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-prep_steps"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-prep_steps" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-prep_steps' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-test_igvm_agent_rpc_server"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-test_igvm_agent_rpc_server" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-test_igvm_agent_rpc_server' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-tmk_vmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-tmk_vmm" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-tmk_vmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-tpm_guest_tests"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-tpm_guest_tests" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-tpm_guest_tests' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-vmgstool"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-vmgstool" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-vmgstool' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-vmm-tests-archive"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-vmm-tests-archive" | $FLOWEY_BIN v 5 'artifact_publish_from_x64-windows-vmm-tests-archive' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 5 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 5 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 5 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::cache 4
      $FLOWEY_BIN v 5 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar4
      $FLOWEY_BIN v 5 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar5
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar5)
      path: $(floweyvar4)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 5 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 5 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 5
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 0
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_openvmm 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 0
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 6
    displayName: cargo build openvmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_pipette 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 1
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 2
    displayName: cargo build pipette
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_build 4
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 6
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_tmk_vmm 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 2
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 7
    displayName: cargo build tmk_vmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_prep_steps 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 3
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 4
    displayName: cargo build prep_steps
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_build 6
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 10
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_vmgstool 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 4
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 3
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 7
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 8
    displayName: cargo build vmgstool
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_build 5
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 9
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_tpm_guest_tests 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 5
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 1
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 3
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 4
    displayName: cargo build tpm_guest_tests
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::run_cargo_build 5
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_test_igvm_agent_rpc_server 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 6
    displayName: cargo build test_igvm_agent_rpc_server
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 5 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 5 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 5 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::cache 0
      $FLOWEY_BIN v 5 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 5 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 5 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 5 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_common::install_rust 2
    displayName: report $CARGO_HOME
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::install_cargo_nextest 0
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::init_cross_build 0
    displayName: installing cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 5 flowey_lib_common::run_cargo_nextest_archive 0
      $(FLOWEY_BIN) e 5 flowey_lib_hvlite::build_nextest_vmm_tests 0
      $(FLOWEY_BIN) e 5 flowey_core::pipeline::artifact::publish 7
    displayName: build + archive 'vmm_tests' nextests
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 5 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-openvmm
    displayName: 🌼📦 Publish x64-windows-openvmm
    artifact: x64-windows-openvmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-pipette
    displayName: 🌼📦 Publish x64-windows-pipette
    artifact: x64-windows-pipette
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-prep_steps
    displayName: 🌼📦 Publish x64-windows-prep_steps
    artifact: x64-windows-prep_steps
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-test_igvm_agent_rpc_server
    displayName: 🌼📦 Publish x64-windows-test_igvm_agent_rpc_server
    artifact: x64-windows-test_igvm_agent_rpc_server
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-tmk_vmm
    displayName: 🌼📦 Publish x64-windows-tmk_vmm
    artifact: x64-windows-tmk_vmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-tpm_guest_tests
    displayName: 🌼📦 Publish x64-windows-tpm_guest_tests
    artifact: x64-windows-tpm_guest_tests
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-vmgstool
    displayName: 🌼📦 Publish x64-windows-vmgstool
    artifact: x64-windows-vmgstool
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-vmm-tests-archive
    displayName: 🌼📦 Publish x64-windows-vmm-tests-archive
    artifact: x64-windows-vmm-tests-archive
  - bash: rm $(AgentTempDirNormal)/bootstrapped-flowey/job5.json
    displayName: 🌼🧼 Redact bootstrap var db
  - publish: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
    displayName: 🌼🥾 Publish bootstrapped flowey
    artifact: _internal-flowey-bootstrap-x86_64-windows-uid-3
- job: job15
  displayName: run vmm-tests [x64-linux]
  pool: HvLite-CI-Linux-Pool-CentralUS
  dependsOn:
  - job0
  - job5
  - job7
  - job9
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-linux-uid-1
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-guest_test_uefi
    inputs:
      artifact: x64-guest_test_uefi
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-guest_test_uefi
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-musl-pipette
    inputs:
      artifact: x64-linux-musl-pipette
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-pipette
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-musl-tmk_vmm
    inputs:
      artifact: x64-linux-musl-tmk_vmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-tmk_vmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-openvmm
    inputs:
      artifact: x64-linux-openvmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-openvmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-vmm-tests-archive
    inputs:
      artifact: x64-linux-vmm-tests-archive
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-vmm-tests-archive
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-tmks
    inputs:
      artifact: x64-tmks
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-tmks
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-pipette
    inputs:
      artifact: x64-windows-pipette
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-pipette
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 15 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 15 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 15 'verbose' update
      ${{ parameters.verbose }}
      EOF
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-guest_test_uefi" | $FLOWEY_BIN v 15 'artifact_use_from_x64-guest_test_uefi' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-pipette" | $FLOWEY_BIN v 15 'artifact_use_from_x64-linux-musl-pipette' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-tmk_vmm" | $FLOWEY_BIN v 15 'artifact_use_from_x64-linux-musl-tmk_vmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-openvmm" | $FLOWEY_BIN v 15 'artifact_use_from_x64-linux-openvmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-vmm-tests-archive" | $FLOWEY_BIN v 15 'artifact_use_from_x64-linux-vmm-tests-archive' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-tmks" | $FLOWEY_BIN v 15 'artifact_use_from_x64-tmks' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-pipette" | $FLOWEY_BIN v 15 'artifact_use_from_x64-windows-pipette' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_hvlite::test_nextest_vmm_tests_archive 0
    displayName: ensure /dev/kvm is accessible
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 15 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 15 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 15 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_common::cache 0
      $FLOWEY_BIN v 15 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar3
      $FLOWEY_BIN v 15 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar4
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar4)
      path: $(floweyvar3)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 15 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 15 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 15 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar2
      $FLOWEY_BIN v 15 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar2)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::git_checkout_openvmm_repo 0
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 15 flowey_core::pipeline::artifact::resolve 3
      $(FLOWEY_BIN) e 15 flowey_core::pipeline::artifact::resolve 6
      $(FLOWEY_BIN) e 15 flowey_core::pipeline::artifact::resolve 1
      $(FLOWEY_BIN) e 15 flowey_core::pipeline::artifact::resolve 0
      $(FLOWEY_BIN) e 15 flowey_core::pipeline::artifact::resolve 2
      $(FLOWEY_BIN) e 15 flowey_core::pipeline::artifact::resolve 5
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 0
    displayName: creating new test content dir
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::install_dist_pkg 0
    displayName: checking if packages need to be installed
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::install_dist_pkg 1
    displayName: installing packages
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_common::cache 4
      $FLOWEY_BIN v 15 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar5
      $FLOWEY_BIN v 15 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar6
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar6)
      path: $(floweyvar5)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 15 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 15 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::download_azcopy 0
    displayName: extract azcopy from archive
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 0
    displayName: calculating required VMM tests disk images
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 1
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 2
    displayName: downloading VMM test disk images
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_hvlite::resolve_openvmm_deps 0
    displayName: unpack openvmm-deps archive
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_hvlite::download_uefi_mu_msvm 0
    displayName: unpack mu_msvm package (x64)
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::init_vmm_tests_env 0
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 15 flowey_core::pipeline::artifact::resolve 4
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::test_nextest_vmm_tests_archive 1
    displayName: setting up vmm_tests env
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::gen_cargo_nextest_run_cmd 0
    displayName: generate nextest command
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_hvlite::install_vmm_tests_deps 0
    displayName: install vmm tests deps (linux)
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_common::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 15 flowey_lib_common::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 2
      $(FLOWEY_BIN) e 15 flowey_lib_common::publish_test_results 1
      $(FLOWEY_BIN) e 15 flowey_lib_common::ado_task_publish_test_results 0
      $(FLOWEY_BIN) e 15 flowey_lib_common::publish_test_results 0
      $FLOWEY_BIN v 15 'flowey_lib_common::ado_task_publish_test_results:0:flowey_lib_common/src/ado_task_publish_test_results.rs:57:45' --is-raw-string --condvar flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43 write-to-env ado floweyvar1
      $FLOWEY_BIN v 15 'flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43' write-to-env ado FLOWEY_CONDITION
    displayName: run 'vmm_tests' nextest tests
  - task: PublishTestResults@2
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: $(floweyvar1)
      testRunTitle: x64-linux-vmm-tests
    displayName: 'publish test results: x64-linux-vmm-tests (JUnit XML)'
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 1
      $(FLOWEY_BIN) e 15 flowey_lib_common::publish_test_results 2
      $(FLOWEY_BIN) e 15 flowey_lib_common::publish_test_results 3
      $(FLOWEY_BIN) e 15 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 3
    displayName: report test results to overall pipeline status
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 15 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
- job: job14
  displayName: run vmm-tests [x64-windows-amd]
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  - job5
  - job7
  - job9
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-windows-uid-3
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-guest_test_uefi
    inputs:
      artifact: x64-guest_test_uefi
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-guest_test_uefi
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-musl-pipette
    inputs:
      artifact: x64-linux-musl-pipette
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-pipette
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-musl-tmk_vmm
    inputs:
      artifact: x64-linux-musl-tmk_vmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-tmk_vmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-tpm_guest_tests
    inputs:
      artifact: x64-linux-tpm_guest_tests
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-tpm_guest_tests
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-openhcl-igvm
    inputs:
      artifact: x64-openhcl-igvm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-openhcl-igvm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-tmks
    inputs:
      artifact: x64-tmks
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-tmks
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-openvmm
    inputs:
      artifact: x64-windows-openvmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-openvmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-pipette
    inputs:
      artifact: x64-windows-pipette
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-pipette
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-prep_steps
    inputs:
      artifact: x64-windows-prep_steps
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-prep_steps
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-test_igvm_agent_rpc_server
    inputs:
      artifact: x64-windows-test_igvm_agent_rpc_server
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-test_igvm_agent_rpc_server
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-tmk_vmm
    inputs:
      artifact: x64-windows-tmk_vmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tmk_vmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-tpm_guest_tests
    inputs:
      artifact: x64-windows-tpm_guest_tests
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tpm_guest_tests
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-vmgstool
    inputs:
      artifact: x64-windows-vmgstool
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmgstool
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-vmm-tests-archive
    inputs:
      artifact: x64-windows-vmm-tests-archive
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmm-tests-archive
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 14 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 14 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 14 'verbose' update
      ${{ parameters.verbose }}
      EOF
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-guest_test_uefi" | $FLOWEY_BIN v 14 'artifact_use_from_x64-guest_test_uefi' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-pipette" | $FLOWEY_BIN v 14 'artifact_use_from_x64-linux-musl-pipette' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-tmk_vmm" | $FLOWEY_BIN v 14 'artifact_use_from_x64-linux-musl-tmk_vmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-tpm_guest_tests" | $FLOWEY_BIN v 14 'artifact_use_from_x64-linux-tpm_guest_tests' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-openhcl-igvm" | $FLOWEY_BIN v 14 'artifact_use_from_x64-openhcl-igvm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-tmks" | $FLOWEY_BIN v 14 'artifact_use_from_x64-tmks' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-openvmm" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-openvmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-pipette" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-pipette' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-prep_steps" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-prep_steps' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-test_igvm_agent_rpc_server" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-test_igvm_agent_rpc_server' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tmk_vmm" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-tmk_vmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tpm_guest_tests" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-tpm_guest_tests' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmgstool" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-vmgstool' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmm-tests-archive" | $FLOWEY_BIN v 14 'artifact_use_from_x64-windows-vmm-tests-archive' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 14 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 14 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 14 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_common::cache 0
      $FLOWEY_BIN v 14 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar3
      $FLOWEY_BIN v 14 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar4
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar4)
      path: $(floweyvar3)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 14 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 14 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 14 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar2
      $FLOWEY_BIN v 14 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar2)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::git_checkout_openvmm_repo 0
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 5
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 6
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 1
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 0
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 9
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 2
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 4
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 11
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 10
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 3
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 8
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 0
    displayName: creating new test content dir
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_hvlite::artifact_openhcl_igvm_from_recipe::resolve 0
    displayName: resolve OpenHCL igvm artifact
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_common::cache 4
      $FLOWEY_BIN v 14 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar5
      $FLOWEY_BIN v 14 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar6
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar6)
      path: $(floweyvar5)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 14 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 14 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_common::download_azcopy 0
    displayName: extract azcopy from archive
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 0
    displayName: calculating required VMM tests disk images
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 1
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 2
    displayName: downloading VMM test disk images
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_hvlite::resolve_openvmm_deps 0
    displayName: unpack openvmm-deps archive
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_hvlite::download_uefi_mu_msvm 0
    displayName: unpack mu_msvm package (x64)
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::init_vmm_tests_env 0
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 14 flowey_core::pipeline::artifact::resolve 12
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::test_nextest_vmm_tests_archive 0
    displayName: setting up vmm_tests env
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_common::gen_cargo_nextest_run_cmd 0
    displayName: generate nextest command
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_hvlite::install_vmm_tests_deps 0
    displayName: install vmm tests deps (windows)
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_hvlite::run_test_igvm_agent_rpc_server 0
    displayName: starting test_igvm_agent_rpc_server
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_common::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 14 flowey_lib_common::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 1
    displayName: run 'vmm_tests' nextest tests
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::stop_test_igvm_agent_rpc_server 0
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 3
      $(FLOWEY_BIN) e 14 flowey_lib_common::publish_test_results 1
      $(FLOWEY_BIN) e 14 flowey_lib_common::ado_task_publish_test_results 0
      $(FLOWEY_BIN) e 14 flowey_lib_common::publish_test_results 0
      $FLOWEY_BIN v 14 'flowey_lib_common::ado_task_publish_test_results:0:flowey_lib_common/src/ado_task_publish_test_results.rs:57:45' --is-raw-string --condvar flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43 write-to-env ado floweyvar1
      $FLOWEY_BIN v 14 'flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43' write-to-env ado FLOWEY_CONDITION
    displayName: stopping test_igvm_agent_rpc_server
  - task: PublishTestResults@2
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: $(floweyvar1)
      testRunTitle: x64-windows-amd-vmm-tests
    displayName: 'publish test results: x64-windows-amd-vmm-tests (JUnit XML)'
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 2
      $(FLOWEY_BIN) e 14 flowey_lib_common::publish_test_results 2
      $(FLOWEY_BIN) e 14 flowey_lib_common::publish_test_results 3
      $(FLOWEY_BIN) e 14 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 4
    displayName: report test results to overall pipeline status
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 14 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
- job: job13
  displayName: run vmm-tests [x64-windows-intel]
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  - job5
  - job7
  - job9
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - task: DownloadPipelineArtifact@2
    displayName: 🌼🥾 Download bootstrapped flowey
    inputs:
      artifact: _internal-flowey-bootstrap-x86_64-windows-uid-3
      path: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-guest_test_uefi
    inputs:
      artifact: x64-guest_test_uefi
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-guest_test_uefi
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-musl-pipette
    inputs:
      artifact: x64-linux-musl-pipette
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-pipette
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-musl-tmk_vmm
    inputs:
      artifact: x64-linux-musl-tmk_vmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-tmk_vmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-linux-tpm_guest_tests
    inputs:
      artifact: x64-linux-tpm_guest_tests
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-tpm_guest_tests
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-openhcl-igvm
    inputs:
      artifact: x64-openhcl-igvm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-openhcl-igvm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-tmks
    inputs:
      artifact: x64-tmks
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-tmks
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-openvmm
    inputs:
      artifact: x64-windows-openvmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-openvmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-pipette
    inputs:
      artifact: x64-windows-pipette
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-pipette
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-prep_steps
    inputs:
      artifact: x64-windows-prep_steps
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-prep_steps
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-test_igvm_agent_rpc_server
    inputs:
      artifact: x64-windows-test_igvm_agent_rpc_server
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-test_igvm_agent_rpc_server
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-tmk_vmm
    inputs:
      artifact: x64-windows-tmk_vmm
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tmk_vmm
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-tpm_guest_tests
    inputs:
      artifact: x64-windows-tpm_guest_tests
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tpm_guest_tests
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-vmgstool
    inputs:
      artifact: x64-windows-vmgstool
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmgstool
  - task: DownloadPipelineArtifact@2
    displayName: 🌼📦 Download x64-windows-vmm-tests-archive
    inputs:
      artifact: x64-windows-vmm-tests-archive
      path: $(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmm-tests-archive
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 13 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 13 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 13 'verbose' update
      ${{ parameters.verbose }}
      EOF
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-guest_test_uefi" | $FLOWEY_BIN v 13 'artifact_use_from_x64-guest_test_uefi' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-pipette" | $FLOWEY_BIN v 13 'artifact_use_from_x64-linux-musl-pipette' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-musl-tmk_vmm" | $FLOWEY_BIN v 13 'artifact_use_from_x64-linux-musl-tmk_vmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-linux-tpm_guest_tests" | $FLOWEY_BIN v 13 'artifact_use_from_x64-linux-tpm_guest_tests' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-openhcl-igvm" | $FLOWEY_BIN v 13 'artifact_use_from_x64-openhcl-igvm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-tmks" | $FLOWEY_BIN v 13 'artifact_use_from_x64-tmks' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-openvmm" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-openvmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-pipette" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-pipette' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-prep_steps" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-prep_steps' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-test_igvm_agent_rpc_server" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-test_igvm_agent_rpc_server' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tmk_vmm" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-tmk_vmm' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-tpm_guest_tests" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-tpm_guest_tests' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmgstool" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-vmgstool' --is-raw-string update
      echo "$(FLOWEY_TEMP_DIR)/used_artifacts/x64-windows-vmm-tests-archive" | $FLOWEY_BIN v 13 'artifact_use_from_x64-windows-vmm-tests-archive' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 13 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 13 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 13 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_common::cache 0
      $FLOWEY_BIN v 13 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar3
      $FLOWEY_BIN v 13 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar4
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar4)
      path: $(floweyvar3)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 13 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 13 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 13 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar2
      $FLOWEY_BIN v 13 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar2)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::git_checkout_openvmm_repo 0
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 5
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 6
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 1
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 0
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 9
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 2
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 4
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 11
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 10
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 3
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 8
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 0
    displayName: creating new test content dir
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_hvlite::artifact_openhcl_igvm_from_recipe::resolve 0
    displayName: resolve OpenHCL igvm artifact
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_common::cache 4
      $FLOWEY_BIN v 13 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar5
      $FLOWEY_BIN v 13 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar6
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar6)
      path: $(floweyvar5)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 13 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 13 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_common::download_azcopy 0
    displayName: extract azcopy from archive
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 0
    displayName: calculating required VMM tests disk images
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 1
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::download_openvmm_vmm_tests_artifacts 2
    displayName: downloading VMM test disk images
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_hvlite::resolve_openvmm_deps 0
    displayName: unpack openvmm-deps archive
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_hvlite::download_uefi_mu_msvm 0
    displayName: unpack mu_msvm package (x64)
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::init_vmm_tests_env 0
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 13 flowey_core::pipeline::artifact::resolve 12
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::test_nextest_vmm_tests_archive 0
    displayName: setting up vmm_tests env
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_common::gen_cargo_nextest_run_cmd 0
    displayName: generate nextest command
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_hvlite::install_vmm_tests_deps 0
    displayName: install vmm tests deps (windows)
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_hvlite::run_test_igvm_agent_rpc_server 0
    displayName: starting test_igvm_agent_rpc_server
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_common::run_cargo_nextest_run 0
      $(FLOWEY_BIN) e 13 flowey_lib_common::run_cargo_nextest_run 1
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 1
    displayName: run 'vmm_tests' nextest tests
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::stop_test_igvm_agent_rpc_server 0
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 3
      $(FLOWEY_BIN) e 13 flowey_lib_common::publish_test_results 1
      $(FLOWEY_BIN) e 13 flowey_lib_common::ado_task_publish_test_results 0
      $(FLOWEY_BIN) e 13 flowey_lib_common::publish_test_results 0
      $FLOWEY_BIN v 13 'flowey_lib_common::ado_task_publish_test_results:0:flowey_lib_common/src/ado_task_publish_test_results.rs:57:45' --is-raw-string --condvar flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43 write-to-env ado floweyvar1
      $FLOWEY_BIN v 13 'flowey_lib_common::publish_test_results:0:flowey_lib_common/src/publish_test_results.rs:77:43' write-to-env ado FLOWEY_CONDITION
    displayName: stopping test_igvm_agent_rpc_server
  - task: PublishTestResults@2
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: $(floweyvar1)
      testRunTitle: x64-windows-intel-vmm-tests
    displayName: 'publish test results: x64-windows-intel-vmm-tests (JUnit XML)'
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 2
      $(FLOWEY_BIN) e 13 flowey_lib_common::publish_test_results 2
      $(FLOWEY_BIN) e 13 flowey_lib_common::publish_test_results 3
      $(FLOWEY_BIN) e 13 flowey_lib_hvlite::_jobs::consume_and_test_nextest_vmm_tests_archive 4
    displayName: report test results to overall pipeline status
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 13 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
- job: job4
  displayName: build artifacts (not for VMM tests) [x64-windows]
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - bash: |
      set -x
      i=0; while [ $i -lt 5 ] && ! sudo apt-get update; do let "i=i+1"; sleep 1; done;
      sudo apt-get -o DPkg::Lock::Timeout=60 install gcc -y
      curl --fail --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.94.0 -y
      . "$HOME/.cargo/env"
      echo '##vso[task.prependpath]$(HOME)/.cargo/bin'
    condition: eq(variables['Agent.OS'], 'Linux')
    displayName: rustup (Linux)
  - bash: |
      set -x
      curl --fail -sSfLo rustup-init.exe https://win.rustup.rs/x86_64 --output rustup-init
      ./rustup-init.exe -y --default-toolchain=1.94.0
      echo '##vso[task.prependpath]$(USERPROFILE)\\.cargo\\bin'
    condition: eq(variables['Agent.OS'], 'Windows_NT')
    displayName: rustup (Windows X64)
  - bash: |
      set -x
      rustup show
    displayName: Verify rustup installation
  - checkout: self
    fetchTags: false
    fetchDepth: 1
    path: flowey_bootstrap
  - bash: CARGO_INCREMENTAL=0 RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z threads=8" cargo build -p flowey_hvlite --target x86_64-pc-windows-msvc --profile flowey-ci
    workingDirectory: ../flowey_bootstrap
    displayName: Build flowey
  - bash: |
      mkdir ./flowey_bootstrap_temp
      mv ./ci-flowey/openvmm-pr.yaml ./flowey_bootstrap_temp/pipeline.yaml
      mv ./ci-flowey/openvmm-pr.json ./flowey_bootstrap_temp/pipeline.json
      mv target/x86_64-pc-windows-msvc/flowey-ci/flowey_hvlite.exe ./flowey_bootstrap_temp/flowey.exe
    workingDirectory: ../flowey_bootstrap
    displayName: Stage flowey artifact
  - task: CopyFiles@2
    displayName: Copy flowey artifact
    inputs:
      SourceFolder: ../flowey_bootstrap/flowey_bootstrap_temp
      TargetFolder: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: rm -rf ./flowey_bootstrap_temp
    workingDirectory: ../flowey_bootstrap
    displayName: Cleanup staged flowey artifact
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |-
      ESCAPED_AGENT_TEMPDIR=$(
      cat <<'EOF' | sed 's/\\/\\\\/g'
      $(FLOWEY_TEMP_DIR)
      EOF
      )
      $(FLOWEY_BIN) pipeline ado --runtime $ESCAPED_AGENT_TEMPDIR\\bootstrapped-flowey\\pipeline.yaml --out ci-flowey/openvmm-pr.yaml ci checkin-gates --config=pr
    displayName: 🌼🔎 Self-check YAML
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 4 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 4 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 4 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-hypestv"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-hypestv" | $FLOWEY_BIN v 4 'artifact_publish_from_x64-windows-hypestv' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-igvmfilegen"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-igvmfilegen" | $FLOWEY_BIN v 4 'artifact_publish_from_x64-windows-igvmfilegen' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-ohcldiag-dev"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-ohcldiag-dev" | $FLOWEY_BIN v 4 'artifact_publish_from_x64-windows-ohcldiag-dev' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/x64-windows-vmgs_lib"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-vmgs_lib" | $FLOWEY_BIN v 4 'artifact_publish_from_x64-windows-vmgs_lib' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 4 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 4 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 4 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 4 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 4 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 4 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::cache 0
      $FLOWEY_BIN v 4 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 4 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 4 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 4 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 4 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::init_cross_build 1
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::run_cargo_build 0
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::build_hypestv 0
      $(FLOWEY_BIN) e 4 flowey_core::pipeline::artifact::publish 0
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::init_cross_build 0
    displayName: cargo build hypestv
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::run_cargo_build 3
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::build_and_test_vmgs_lib 0
    displayName: cargo build vmgs_lib
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::build_and_test_vmgs_lib 1
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::build_and_test_vmgs_lib 2
      $(FLOWEY_BIN) e 4 flowey_core::pipeline::artifact::publish 1
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::init_cross_build 2
    displayName: test vmgs_lib
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::build_igvmfilegen 0
      $(FLOWEY_BIN) e 4 flowey_core::pipeline::artifact::publish 2
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::init_cross_build 3
    displayName: cargo build igvmfilegen
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 4 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 4 flowey_lib_hvlite::build_ohcldiag_dev 0
      $(FLOWEY_BIN) e 4 flowey_core::pipeline::artifact::publish 3
    displayName: cargo build ohcldiag-dev
  - bash: $(FLOWEY_BIN) e 4 flowey_lib_common::cache 3
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-hypestv
    displayName: 🌼📦 Publish x64-windows-hypestv
    artifact: x64-windows-hypestv
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-igvmfilegen
    displayName: 🌼📦 Publish x64-windows-igvmfilegen
    artifact: x64-windows-igvmfilegen
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-ohcldiag-dev
    displayName: 🌼📦 Publish x64-windows-ohcldiag-dev
    artifact: x64-windows-ohcldiag-dev
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/x64-windows-vmgs_lib
    displayName: 🌼📦 Publish x64-windows-vmgs_lib
    artifact: x64-windows-vmgs_lib
- job: job3
  displayName: build artifacts (for VMM tests) [aarch64-windows]
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - bash: |
      set -x
      i=0; while [ $i -lt 5 ] && ! sudo apt-get update; do let "i=i+1"; sleep 1; done;
      sudo apt-get -o DPkg::Lock::Timeout=60 install gcc -y
      curl --fail --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.94.0 -y
      . "$HOME/.cargo/env"
      echo '##vso[task.prependpath]$(HOME)/.cargo/bin'
    condition: eq(variables['Agent.OS'], 'Linux')
    displayName: rustup (Linux)
  - bash: |
      set -x
      curl --fail -sSfLo rustup-init.exe https://win.rustup.rs/x86_64 --output rustup-init
      ./rustup-init.exe -y --default-toolchain=1.94.0
      echo '##vso[task.prependpath]$(USERPROFILE)\\.cargo\\bin'
    condition: eq(variables['Agent.OS'], 'Windows_NT')
    displayName: rustup (Windows X64)
  - bash: |
      set -x
      rustup show
    displayName: Verify rustup installation
  - checkout: self
    fetchTags: false
    fetchDepth: 1
    path: flowey_bootstrap
  - bash: CARGO_INCREMENTAL=0 RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z threads=8" cargo build -p flowey_hvlite --target x86_64-pc-windows-msvc --profile flowey-ci
    workingDirectory: ../flowey_bootstrap
    displayName: Build flowey
  - bash: |
      mkdir ./flowey_bootstrap_temp
      mv ./ci-flowey/openvmm-pr.yaml ./flowey_bootstrap_temp/pipeline.yaml
      mv ./ci-flowey/openvmm-pr.json ./flowey_bootstrap_temp/pipeline.json
      mv target/x86_64-pc-windows-msvc/flowey-ci/flowey_hvlite.exe ./flowey_bootstrap_temp/flowey.exe
    workingDirectory: ../flowey_bootstrap
    displayName: Stage flowey artifact
  - task: CopyFiles@2
    displayName: Copy flowey artifact
    inputs:
      SourceFolder: ../flowey_bootstrap/flowey_bootstrap_temp
      TargetFolder: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: rm -rf ./flowey_bootstrap_temp
    workingDirectory: ../flowey_bootstrap
    displayName: Cleanup staged flowey artifact
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |-
      ESCAPED_AGENT_TEMPDIR=$(
      cat <<'EOF' | sed 's/\\/\\\\/g'
      $(FLOWEY_TEMP_DIR)
      EOF
      )
      $(FLOWEY_BIN) pipeline ado --runtime $ESCAPED_AGENT_TEMPDIR\\bootstrapped-flowey\\pipeline.yaml --out ci-flowey/openvmm-pr.yaml ci checkin-gates --config=pr
    displayName: 🌼🔎 Self-check YAML
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 3 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 3 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 3 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-openvmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-openvmm" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-openvmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-pipette"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-pipette" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-pipette' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-prep_steps"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-prep_steps" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-prep_steps' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-test_igvm_agent_rpc_server"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-test_igvm_agent_rpc_server" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-test_igvm_agent_rpc_server' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-tmk_vmm"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-tmk_vmm" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-tmk_vmm' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-tpm_guest_tests"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-tpm_guest_tests" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-tpm_guest_tests' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-vmgstool"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-vmgstool" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-vmgstool' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-vmm-tests-archive"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-vmm-tests-archive" | $FLOWEY_BIN v 3 'artifact_publish_from_aarch64-windows-vmm-tests-archive' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 3 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 3 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 3 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::cache 4
      $FLOWEY_BIN v 3 'flowey_lib_common::cache:8:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar4
      $FLOWEY_BIN v 3 'flowey_lib_common::cache:9:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar5
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar5)
      path: $(floweyvar4)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 3 'flowey_lib_common::cache:11:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 3 flowey_lib_common::cache 6
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 2
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_build 4
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 6
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_tmk_vmm 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 4
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 7
    displayName: cargo build tmk_vmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_prep_steps 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 5
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 4
    displayName: cargo build prep_steps
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_build 6
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 10
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_vmgstool 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 6
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 3
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 7
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 8
    displayName: cargo build vmgstool
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_build 5
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 9
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_tpm_guest_tests 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 7
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 1
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 3
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 4
    displayName: cargo build tpm_guest_tests
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 5
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_test_igvm_agent_rpc_server 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 0
    displayName: cargo build test_igvm_agent_rpc_server
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::download_cargo_nextest 0
      $(FLOWEY_BIN) e 3 flowey_lib_common::download_cargo_nextest 1
      $(FLOWEY_BIN) e 3 flowey_lib_common::download_cargo_nextest 2
      $(FLOWEY_BIN) e 3 flowey_lib_common::download_cargo_nextest 3
    displayName: create cargo-nextest cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::cache 0
      $FLOWEY_BIN v 3 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 3 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: cargo-nextest'
  - bash: |-
      set -e
      $FLOWEY_BIN v 3 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 3 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_common::download_cargo_nextest 4
    displayName: downloading cargo-nextest
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_common::install_rust 2
    displayName: report $CARGO_HOME
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::install_cargo_nextest 0
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 0
    displayName: installing cargo-nextest
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_nextest_archive 0
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_nextest_vmm_tests 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 1
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 5
    displayName: build + archive 'vmm_tests' nextests
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 0
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_openvmm 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 2
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::init_cross_build 6
    displayName: cargo build openvmm
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 3 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 3 flowey_lib_hvlite::build_pipette 0
      $(FLOWEY_BIN) e 3 flowey_core::pipeline::artifact::publish 3
    displayName: cargo build pipette
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_common::cache 3
    displayName: 'validate cache entry: cargo-nextest'
  - bash: $(FLOWEY_BIN) e 3 flowey_lib_common::cache 7
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-openvmm
    displayName: 🌼📦 Publish aarch64-windows-openvmm
    artifact: aarch64-windows-openvmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-pipette
    displayName: 🌼📦 Publish aarch64-windows-pipette
    artifact: aarch64-windows-pipette
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-prep_steps
    displayName: 🌼📦 Publish aarch64-windows-prep_steps
    artifact: aarch64-windows-prep_steps
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-test_igvm_agent_rpc_server
    displayName: 🌼📦 Publish aarch64-windows-test_igvm_agent_rpc_server
    artifact: aarch64-windows-test_igvm_agent_rpc_server
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-tmk_vmm
    displayName: 🌼📦 Publish aarch64-windows-tmk_vmm
    artifact: aarch64-windows-tmk_vmm
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-tpm_guest_tests
    displayName: 🌼📦 Publish aarch64-windows-tpm_guest_tests
    artifact: aarch64-windows-tpm_guest_tests
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-vmgstool
    displayName: 🌼📦 Publish aarch64-windows-vmgstool
    artifact: aarch64-windows-vmgstool
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-vmm-tests-archive
    displayName: 🌼📦 Publish aarch64-windows-vmm-tests-archive
    artifact: aarch64-windows-vmm-tests-archive
- job: job2
  displayName: build artifacts (not for VMM tests) [aarch64-windows]
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - bash: |
      set -x
      i=0; while [ $i -lt 5 ] && ! sudo apt-get update; do let "i=i+1"; sleep 1; done;
      sudo apt-get -o DPkg::Lock::Timeout=60 install gcc -y
      curl --fail --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.94.0 -y
      . "$HOME/.cargo/env"
      echo '##vso[task.prependpath]$(HOME)/.cargo/bin'
    condition: eq(variables['Agent.OS'], 'Linux')
    displayName: rustup (Linux)
  - bash: |
      set -x
      curl --fail -sSfLo rustup-init.exe https://win.rustup.rs/x86_64 --output rustup-init
      ./rustup-init.exe -y --default-toolchain=1.94.0
      echo '##vso[task.prependpath]$(USERPROFILE)\\.cargo\\bin'
    condition: eq(variables['Agent.OS'], 'Windows_NT')
    displayName: rustup (Windows X64)
  - bash: |
      set -x
      rustup show
    displayName: Verify rustup installation
  - checkout: self
    fetchTags: false
    fetchDepth: 1
    path: flowey_bootstrap
  - bash: CARGO_INCREMENTAL=0 RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z threads=8" cargo build -p flowey_hvlite --target x86_64-pc-windows-msvc --profile flowey-ci
    workingDirectory: ../flowey_bootstrap
    displayName: Build flowey
  - bash: |
      mkdir ./flowey_bootstrap_temp
      mv ./ci-flowey/openvmm-pr.yaml ./flowey_bootstrap_temp/pipeline.yaml
      mv ./ci-flowey/openvmm-pr.json ./flowey_bootstrap_temp/pipeline.json
      mv target/x86_64-pc-windows-msvc/flowey-ci/flowey_hvlite.exe ./flowey_bootstrap_temp/flowey.exe
    workingDirectory: ../flowey_bootstrap
    displayName: Stage flowey artifact
  - task: CopyFiles@2
    displayName: Copy flowey artifact
    inputs:
      SourceFolder: ../flowey_bootstrap/flowey_bootstrap_temp
      TargetFolder: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: rm -rf ./flowey_bootstrap_temp
    workingDirectory: ../flowey_bootstrap
    displayName: Cleanup staged flowey artifact
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |-
      ESCAPED_AGENT_TEMPDIR=$(
      cat <<'EOF' | sed 's/\\/\\\\/g'
      $(FLOWEY_TEMP_DIR)
      EOF
      )
      $(FLOWEY_BIN) pipeline ado --runtime $ESCAPED_AGENT_TEMPDIR\\bootstrapped-flowey\\pipeline.yaml --out ci-flowey/openvmm-pr.yaml ci checkin-gates --config=pr
    displayName: 🌼🔎 Self-check YAML
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 2 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 2 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 2 'verbose' update
      ${{ parameters.verbose }}
      EOF
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-hypestv"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-hypestv" | $FLOWEY_BIN v 2 'artifact_publish_from_aarch64-windows-hypestv' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-igvmfilegen"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-igvmfilegen" | $FLOWEY_BIN v 2 'artifact_publish_from_aarch64-windows-igvmfilegen' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-ohcldiag-dev"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-ohcldiag-dev" | $FLOWEY_BIN v 2 'artifact_publish_from_aarch64-windows-ohcldiag-dev' --is-raw-string update
      mkdir -p "$(AgentTempDirNormal)/publish_artifacts/aarch64-windows-vmgs_lib"
      echo "$(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-vmgs_lib" | $FLOWEY_BIN v 2 'artifact_publish_from_aarch64-windows-vmgs_lib' --is-raw-string update
    displayName: 🌼🛫 Initialize job
  - bash: $(FLOWEY_BIN) e 2 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 2 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 2 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 2 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 2 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 2 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::cache 0
      $FLOWEY_BIN v 2 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 2 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 2 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 2 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 2 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::init_cross_build 1
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::run_cargo_build 0
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::build_hypestv 0
      $(FLOWEY_BIN) e 2 flowey_core::pipeline::artifact::publish 0
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::init_cross_build 0
    displayName: cargo build hypestv
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::run_cargo_build 3
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::run_cargo_build 3
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::build_and_test_vmgs_lib 0
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::build_and_test_vmgs_lib 1
      $(FLOWEY_BIN) e 2 flowey_core::pipeline::artifact::publish 1
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::init_cross_build 2
    displayName: cargo build vmgs_lib
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::run_cargo_build 1
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::run_cargo_build 1
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::build_igvmfilegen 0
      $(FLOWEY_BIN) e 2 flowey_core::pipeline::artifact::publish 2
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::init_cross_build 3
    displayName: cargo build igvmfilegen
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 2 flowey_lib_common::run_cargo_build 2
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::run_cargo_build 2
      $(FLOWEY_BIN) e 2 flowey_lib_hvlite::build_ohcldiag_dev 0
      $(FLOWEY_BIN) e 2 flowey_core::pipeline::artifact::publish 3
    displayName: cargo build ohcldiag-dev
  - bash: $(FLOWEY_BIN) e 2 flowey_lib_common::cache 3
    displayName: 'validate cache entry: gh-release-download'
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-hypestv
    displayName: 🌼📦 Publish aarch64-windows-hypestv
    artifact: aarch64-windows-hypestv
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-igvmfilegen
    displayName: 🌼📦 Publish aarch64-windows-igvmfilegen
    artifact: aarch64-windows-igvmfilegen
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-ohcldiag-dev
    displayName: 🌼📦 Publish aarch64-windows-ohcldiag-dev
    artifact: aarch64-windows-ohcldiag-dev
  - publish: $(FLOWEY_TEMP_DIR)/publish_artifacts/aarch64-windows-vmgs_lib
    displayName: 🌼📦 Publish aarch64-windows-vmgs_lib
    artifact: aarch64-windows-vmgs_lib
- job: job1
  displayName: xtask fmt (windows)
  pool: HvLite-CI-Win-Pool
  dependsOn:
  - job0
  condition: and(succeeded(), not(canceled()))
  variables:
  - name: FLOWEY_TEMP_DIR
    value: $(Build.StagingDirectory)/.flowey-internal
  steps:
  - bash: |
      set -x
      i=0; while [ $i -lt 5 ] && ! sudo apt-get update; do let "i=i+1"; sleep 1; done;
      sudo apt-get -o DPkg::Lock::Timeout=60 install gcc -y
      curl --fail --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.94.0 -y
      . "$HOME/.cargo/env"
      echo '##vso[task.prependpath]$(HOME)/.cargo/bin'
    condition: eq(variables['Agent.OS'], 'Linux')
    displayName: rustup (Linux)
  - bash: |
      set -x
      curl --fail -sSfLo rustup-init.exe https://win.rustup.rs/x86_64 --output rustup-init
      ./rustup-init.exe -y --default-toolchain=1.94.0
      echo '##vso[task.prependpath]$(USERPROFILE)\\.cargo\\bin'
    condition: eq(variables['Agent.OS'], 'Windows_NT')
    displayName: rustup (Windows X64)
  - bash: |
      set -x
      rustup show
    displayName: Verify rustup installation
  - checkout: self
    fetchTags: false
    fetchDepth: 1
    path: flowey_bootstrap
  - bash: CARGO_INCREMENTAL=0 RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z threads=8" cargo build -p flowey_hvlite --target x86_64-pc-windows-msvc --profile flowey-ci
    workingDirectory: ../flowey_bootstrap
    displayName: Build flowey
  - bash: |
      mkdir ./flowey_bootstrap_temp
      mv ./ci-flowey/openvmm-pr.yaml ./flowey_bootstrap_temp/pipeline.yaml
      mv ./ci-flowey/openvmm-pr.json ./flowey_bootstrap_temp/pipeline.json
      mv target/x86_64-pc-windows-msvc/flowey-ci/flowey_hvlite.exe ./flowey_bootstrap_temp/flowey.exe
    workingDirectory: ../flowey_bootstrap
    displayName: Stage flowey artifact
  - task: CopyFiles@2
    displayName: Copy flowey artifact
    inputs:
      SourceFolder: ../flowey_bootstrap/flowey_bootstrap_temp
      TargetFolder: $(FLOWEY_TEMP_DIR)/bootstrapped-flowey
  - bash: rm -rf ./flowey_bootstrap_temp
    workingDirectory: ../flowey_bootstrap
    displayName: Cleanup staged flowey artifact
  - bash: |
      set -e
      AgentTempDirNormal="$(FLOWEY_TEMP_DIR)"
      AgentTempDirNormal=$(echo "$AgentTempDirNormal" | sed -e 's|\\|\/|g' -e 's|^\([A-Za-z]\)\:/\(.*\)|/\L\1\E/\2|')
      echo "##vso[task.setvariable variable=AgentTempDirNormal;]$AgentTempDirNormal"

      chmod +x $AgentTempDirNormal/bootstrapped-flowey/flowey.exe
      FLOWEY_BIN="$AgentTempDirNormal/bootstrapped-flowey/flowey.exe"
      echo "##vso[task.setvariable variable=FLOWEY_BIN;]$FLOWEY_BIN"
    displayName: Set flowey path
  - bash: |-
      ESCAPED_AGENT_TEMPDIR=$(
      cat <<'EOF' | sed 's/\\/\\\\/g'
      $(FLOWEY_TEMP_DIR)
      EOF
      )
      $(FLOWEY_BIN) pipeline ado --runtime $ESCAPED_AGENT_TEMPDIR\\bootstrapped-flowey\\pipeline.yaml --out ci-flowey/openvmm-pr.yaml ci checkin-gates --config=pr
    displayName: 🌼🔎 Self-check YAML
  - bash: |
      set -e
      echo '"debug"' | $FLOWEY_BIN v 1 'FLOWEY_LOG' update
      echo "$(FLOWEY_TEMP_DIR)/work" | $FLOWEY_BIN v 1 '_internal_WORKING_DIR' --is-raw-string update

      cat <<'EOF' | tr '[:upper:]' '[:lower:]' | $FLOWEY_BIN v 1 'verbose' update
      ${{ parameters.verbose }}
      EOF
    displayName: 🌼🛫 Initialize job
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 1 flowey_lib_common::git_checkout 0
      $FLOWEY_BIN v 1 'flowey_lib_common::git_checkout:0:flowey_lib_common/src/git_checkout.rs:299:80' --is-raw-string --condvar flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46 write-to-env ado floweyvar1
      $FLOWEY_BIN v 1 'flowey_lib_common::git_checkout:1:flowey_lib_common/src/git_checkout.rs:300:46' write-to-env ado FLOWEY_CONDITION
    displayName: check if openvmm needs to be cloned
  - checkout: self
    path: repo0
    fetchTags: false
    fetchDepth: 1
    persistCredentials: $(floweyvar1)
    submodules: recursive
    displayName: checkout repo openvmm
    condition: and(eq(variables['FLOWEY_CONDITION'], true), succeeded(), not(canceled()))
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 1 flowey_lib_common::git_checkout 2
      $(FLOWEY_BIN) e 1 flowey_lib_hvlite::git_checkout_openvmm_repo 0
    displayName: report cloned repo directories
  - bash: $(FLOWEY_BIN) e 1 flowey_lib_common::install_rust 0
    displayName: install Rust
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 1 flowey_lib_common::install_rust 1
      $(FLOWEY_BIN) e 1 flowey_lib_common::cfg_cargo_common_flags 0
    displayName: detect active toolchain
  - bash: $(FLOWEY_BIN) e 1 flowey_lib_hvlite::init_openvmm_cargo_config_deny_warnings 0
    displayName: set '-Dwarnings' in .cargo/config.toml
  - bash: $(FLOWEY_BIN) e 1 flowey_lib_common::download_gh_release 0
    displayName: create gh-release-download cache dir
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 1 flowey_lib_common::cache 0
      $FLOWEY_BIN v 1 'flowey_lib_common::cache:1:flowey_lib_common/src/cache.rs:236:72' --is-raw-string write-to-env ado floweyvar2
      $FLOWEY_BIN v 1 'flowey_lib_common::cache:2:flowey_lib_common/src/cache.rs:237:72' --is-raw-string write-to-env ado floweyvar3
    displayName: Pre-processing cache vars
  - task: Cache@2
    inputs:
      key: $(floweyvar3)
      path: $(floweyvar2)
      cacheHitVar: FLOWEY_CACHE_HITVAR
    displayName: 'Restore cache: gh-release-download'
  - bash: |-
      set -e
      $FLOWEY_BIN v 1 'flowey_lib_common::cache:4:flowey_lib_common/src/cache.rs:300:70' --is-raw-string update --env-source FLOWEY_CACHE_HITVAR <<'EOF'
      $(FLOWEY_CACHE_HITVAR)
      EOF
      $(FLOWEY_BIN) e 1 flowey_lib_common::cache 2
    displayName: map ADO hitvar to flowey
  - bash: $(FLOWEY_BIN) e 1 flowey_lib_common::download_gh_release 1
    displayName: download artifacts from github releases
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 1 flowey_lib_common::resolve_protoc 0
      $(FLOWEY_BIN) e 1 flowey_lib_hvlite::cfg_openvmm_magicpath 0
    displayName: unpack protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 1 flowey_lib_hvlite::init_openvmm_magicpath_protoc 0
      $(FLOWEY_BIN) e 1 flowey_lib_hvlite::init_cross_build 0
    displayName: symlink protoc
  - bash: |-
      set -e
      $(FLOWEY_BIN) e 1 flowey_lib_common::run_cargo_build 0
      $(FLOWEY_BIN) e 1 flowey_lib_hvlite::run_cargo_build 0
      $(FLOWEY_BIN) e 1 flowey_lib_hvlite::build_xtask 0
    displayName: cargo build xtask
  - bash: $(FLOWEY_BIN) e 1 flowey_lib_hvlite::_jobs::check_xtask_fmt 0
    displayName: run xtask fmt
  - bash: $(FLOWEY_BIN) e 1 flowey_lib_common::cache 3
    displayName: 'validate cache entry: gh-release-download'
