1#!/usr/bin/env bash 2 3# Enumerates the list of expected downloadable files, loads the SHAs for each file, then 4# dumps the result to //rust:known_shas.bzl 5 6export LC_ALL=C 7 8# Detect workspace root 9if [[ -z "${BUILD_WORKSPACE_DIRECTORY}" ]]; then 10 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 11 BUILD_WORKSPACE_DIRECTORY="$( dirname "${SCRIPT_DIR}")" 12fi 13 14TOOLS="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_TOOLS.txt")" 15HOST_TOOLS="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_HOST_TOOLS.txt")" 16TARGETS="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_TARGETS.txt")" 17VERSIONS="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_VERSIONS.txt")" 18BETA_ISO_DATES="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_BETA_ISO_DATES.txt")" 19NIGHTLY_ISO_DATES="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_NIGHTLY_ISO_DATES.txt")" 20 21EXTENSIONS=( 22 tar.gz 23 tar.xz 24) 25 26function enumerate_keys() { 27 for TOOL in $TOOLS 28 do 29 for TARGET in $TARGETS 30 do 31 for VERSION in $VERSIONS 32 do 33 echo "$TOOL-$VERSION-$TARGET" 34 done 35 36 for ISO_DATE in $BETA_ISO_DATES 37 do 38 echo "$ISO_DATE/$TOOL-beta-$TARGET" 39 done 40 41 for ISO_DATE in $NIGHTLY_ISO_DATES 42 do 43 echo "$ISO_DATE/$TOOL-nightly-$TARGET" 44 done 45 done 46 done 47 48 for HOST_TOOL in $HOST_TOOLS 49 do 50 for VERSION in $VERSIONS 51 do 52 echo "$HOST_TOOL-$VERSION" 53 done 54 done 55} 56 57function emit_bzl_file_contents() { 58 local out_dir="${TMPDIR}/outs" 59 mkdir "${out_dir}" 60 61 echo "--parallel" >> "${TMPDIR}/curl_config" 62 echo "--fail" >> "${TMPDIR}/curl_config" 63 echo "--silent" >> "${TMPDIR}/curl_config" 64 echo "--create-dirs" >> "${TMPDIR}/curl_config" 65 for key in "$@"; do 66 for ext in "${EXTENSIONS[@]}"; do 67 echo "--output ${out_dir}/${key}.${ext}" >> "${TMPDIR}/curl_config" 68 echo "--url https://static.rust-lang.org/dist/${key}.${ext}.sha256" >> "${TMPDIR}/curl_config" 69 done 70 done 71 curl --config "${TMPDIR}/curl_config" 72 73 pushd "${out_dir}" > /dev/null 74 for file in $(find . -type f) 75 do 76 echo "$(echo ${file} | sed 's|./||') $(cat ${file} | awk '{ print $1 }')" >> "${TMPDIR}/shas.txt" 77 done 78 79 popd > /dev/null 80 81 echo "\"\"\"A module containing a mapping of Rust tools to checksums" 82 echo "" 83 echo "This is a generated file -- see //util:fetch_shas" 84 echo "\"\"\"" 85 echo "" 86 echo "FILE_KEY_TO_SHA = {" 87 cat "${TMPDIR}/shas.txt" | sed '/^[[:space:]]*$/d' | sort | awk '{print " \"" $1 "\": \"" $2 "\","}' 88 echo "}" 89} 90 91export TMPDIR="$(mktemp -d -t bazel_reload_shas_shalists.XXXXXXXXXX)" 92echo "Fetching known shas..." 93echo "$(emit_bzl_file_contents $(enumerate_keys))" > "${BUILD_WORKSPACE_DIRECTORY}/rust/known_shas.bzl" 94echo "Done" 95rm -rf "${TMPDIR}" 96