diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fcf73b5d58..37d8670553 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,6 +40,7 @@ jobs: CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_DIR: ${{ github.workspace }}/.ccache CCACHE_MAXSIZE: 500M + DOWNLOAD_CACHE: ${{ github.workspace }}/.ccache/downloads TARGET: ${{ matrix.arch }}-w64-mingw32 RUST_TARGET: ${{ matrix.arch }}-pc-windows-gnu strategy: diff --git a/ci/build-mingw64.sh b/ci/build-mingw64.sh index 1687de287b..9139b3955c 100755 --- a/ci/build-mingw64.sh +++ b/ci/build-mingw64.sh @@ -108,12 +108,23 @@ function gettar { local dname="$2" [ -z "$dname" ] && dname="${fname%.tar.*}" [ -d "$dname" ] && return 0 - $wget "$1" -O "$fname" + local cachename="$(md5sum <<<"$1" | cut -d " " -f 1)" + if [[ -n "$DOWNLOAD_CACHE" && -s "$DOWNLOAD_CACHE/$cachename" ]]; then + cp -v "$DOWNLOAD_CACHE/$cachename" "$fname" + cachename= + else + $wget "$1" -O "$fname" + fi tar -xaf "$fname" if [ ! -d "$dname" ]; then echo "Error: expected $fname to extract to $dname but it was not created" >&2 return 2 fi + if [[ -n "$DOWNLOAD_CACHE" && -n "$cachename" ]]; then + # assume successful extraction means the file was fine + mkdir -p "$DOWNLOAD_CACHE" + cp -v "$fname" "$DOWNLOAD_CACHE/$cachename" + fi } function build_if_missing {