blob: 91408fd68aa14f9268204530f283797f61cbbd7e [file] [log] [blame]
Brian Silvermancc09f182022-03-09 15:40:20 -08001#!/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
Brian Silverman5f6f2762022-08-13 19:30:05 -070021EXTENSIONS=(
22 tar.gz
23 tar.xz
24)
25
26function enumerate_keys() {
Brian Silvermancc09f182022-03-09 15:40:20 -080027 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
Brian Silverman5f6f2762022-08-13 19:30:05 -070057function 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
Brian Silvermancc09f182022-03-09 15:40:20 -080080
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 = {"
Brian Silverman5f6f2762022-08-13 19:30:05 -070087 cat "${TMPDIR}/shas.txt" | sed '/^[[:space:]]*$/d' | sort | awk '{print " \"" $1 "\": \"" $2 "\","}'
Brian Silvermancc09f182022-03-09 15:40:20 -080088 echo "}"
Brian Silvermancc09f182022-03-09 15:40:20 -080089}
90
Adam Snaider1c095c92023-07-08 02:09:58 -040091export TMPDIR="$(mktemp -d -t bazel_reload_shas_shalists.XXXXXXXXXX)"
Brian Silverman5f6f2762022-08-13 19:30:05 -070092echo "Fetching known shas..."
Brian Silvermancc09f182022-03-09 15:40:20 -080093echo "$(emit_bzl_file_contents $(enumerate_keys))" > "${BUILD_WORKSPACE_DIRECTORY}/rust/known_shas.bzl"
Brian Silverman5f6f2762022-08-13 19:30:05 -070094echo "Done"
95rm -rf "${TMPDIR}"