Skip to content

Instantly share code, notes, and snippets.

@ilap
Last active May 24, 2022 08:35
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ilap/02c4aa6d8c9507f3b8a9c20a85a07a64 to your computer and use it in GitHub Desktop.
Save ilap/02c4aa6d8c9507f3b8a9c20a85a07a64 to your computer and use it in GitHub Desktop.
Retrieve Hydra Build based on Git tag

Introduction

This gist describes how we can retrieve the cardano-node's build based on Github tags. Unfortunately Hydra's API does not provide any easy way to get a build based on a git commit.

The first step is to

  • retrieve the commit from a tag, then
  • find that commit in the Hydra's eval paging through all evaluations.

Each evaluations should have builds in whihc we need to find the one has the commits number.

#!/bin/bash

# Get the commit
github_url="https://api.github.com/repos/input-output-hk/cardano-node/tags"

tag="1.29.0"

commit=$( curl -s "$github_url" | jq -r  ".[] | select( .name == \"$tag\" ) | .commit.sha " )

# Get the evualuation and its builds

project="Cardano"
jobset="cardano-node"
job="cardano-node-linux"

evals_url="https://hydra.iohk.io/jobset/$project/$jobset/evals"
build_url="https://hydra.iohk.io/build"

api_header="Accept: application/json"

# Unfortunately Hydra's API is very limited, so we need to page through all evaluations.
page=1
last_page=$( curl -s -H "$api_header" "$evals_url" |  jq -r ".last" | sed 's@.*=@@')
builds=""

while [[ $page -lt $last_page  &&  -z "$builds"  ]]
do
  echo "Finding builds for \"$commit\" of $jobset on evaluation page($page)"

  builds=$(
    curl -s -H "$api_header" "$evals_url/?page=$page" |\
    jq ".evals[] | select( .jobsetevalinputs.\"$jobset\".revision == \"$commit\" ) | .builds | sort"
  )


  page=$(( page + 1 ))
done

[ -z "builds" ] && { echo "Could not find cardano-node build for \"$tag\"" ; exit 127; }

# Found builds we need to go through all the builds

echo "Builds have found..."

jq '.[]' <<< "$builds" | while read build
do
  count=$(( ${count:0} + 1 ))
  echo "Processing($count) build $build..."

  res=( $( curl -s -H "$api_header" "$build_url/$build" | jq -r ' .job, .buildproducts."1".name ' ) )

  if [[ "$job" == ${res[0]} ]]
  then
    echo "$job has found. Downloading..."
    curl -s -o "${res[1]}" "$build_url/$build/download/1/${res[1]}"
    break
  fi
done

And example output of the saved script above.

$ ./do_it.sh 
Finding builds for "4c59442958072657812c6c0bb8e0b4ab85ce1ba2" of cardano-node on evaluation page(1)
Builds have found...
Processing(1) build 7019217...
Processing(2) build 7019222...
Processing(3) build 7019223...
Processing(4) build 7019226...
Processing(5) build 7019234...
Processing(6) build 7019239...
Processing(7) build 7019240...
Processing(8) build 7019250...
Processing(9) build 7019266...
Processing(10) build 7019270...
Processing(11) build 7019272...
Processing(12) build 7019277...
Processing(13) build 7019305...
Processing(14) build 7019311...
Processing(15) build 7019364...
Processing(16) build 7019368...
Processing(17) build 7019394...
Processing(18) build 7019395...
Processing(19) build 7019410...
Processing(20) build 7019423...
Processing(21) build 7019430...
Processing(22) build 7019434...
Processing(23) build 7019436...
Processing(24) build 7019463...
Processing(25) build 7019468...
Processing(26) build 7019470...
Processing(27) build 7019494...
Processing(28) build 7019499...
Processing(29) build 7019508...
Processing(30) build 7019510...
Processing(31) build 7019513...
Processing(32) build 7019520...
Processing(33) build 7263420...
Processing(34) build 7263480...
Processing(35) build 7263550...
Processing(36) build 7370192...
Processing(37) build 7372949...
Processing(38) build 7372986...
Processing(39) build 7373007...
Processing(40) build 7373011...
Processing(41) build 7373061...
Processing(42) build 7373072...
Processing(43) build 7373079...
Processing(44) build 7373092...
Processing(45) build 7373098...
Processing(46) build 7373116...
Processing(47) build 7373118...
Processing(48) build 7373139...
Processing(49) build 7373158...
Processing(50) build 7373165...
Processing(51) build 7373181...
Processing(52) build 7373186...
Processing(53) build 7378982...
Processing(54) build 7378998...
Processing(55) build 7379000...
Processing(56) build 7379028...
Processing(57) build 7379034...
Processing(58) build 7379052...
Processing(59) build 7379056...
Processing(60) build 7379068...
Processing(61) build 7379070...
Processing(62) build 7379072...
Processing(63) build 7379086...
Processing(64) build 7379097...
Processing(65) build 7379124...
Processing(66) build 7379162...
Processing(67) build 7379186...
Processing(68) build 7379210...
Processing(69) build 7379221...
Processing(70) build 7379224...
Processing(71) build 7379243...
Processing(72) build 7379254...
Processing(73) build 7385658...
Processing(74) build 7385669...
Processing(75) build 7385731...
Processing(76) build 7385794...
Processing(77) build 7385849...
Processing(78) build 7385864...
Processing(79) build 7394025...
Processing(80) build 7394073...
Processing(81) build 7394154...
Processing(82) build 7394157...
Processing(83) build 7402887...
Processing(84) build 7408398...
Processing(85) build 7408399...
Processing(86) build 7408400...
Processing(87) build 7408401...
Processing(88) build 7408402...
Processing(89) build 7408403...
Processing(90) build 7408404...
Processing(91) build 7408405...
Processing(92) build 7408406...
Processing(93) build 7408407...
Processing(94) build 7408408...
Processing(95) build 7408409...
Processing(96) build 7408410...
Processing(97) build 7408411...
Processing(98) build 7408412...
Processing(99) build 7408413...
Processing(100) build 7408414...
Processing(101) build 7408415...
Processing(102) build 7408416...
Processing(103) build 7408417...
Processing(104) build 7408418...
Processing(105) build 7408419...
Processing(106) build 7408420...
Processing(107) build 7408421...
Processing(108) build 7408422...
Processing(109) build 7408423...
Processing(110) build 7408424...
Processing(111) build 7408425...
Processing(112) build 7408426...
Processing(113) build 7408427...
Processing(114) build 7408428...
Processing(115) build 7408429...
Processing(116) build 7408430...
Processing(117) build 7408431...
Processing(118) build 7408432...
Processing(119) build 7408433...
Processing(120) build 7408434...
Processing(121) build 7408435...
Processing(122) build 7408436...
Processing(123) build 7408437...
Processing(124) build 7408438...
cardano-node-linux has found. Downloading...

References

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment