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