mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00

Because Zig does not fetch recursive dependencies when you run `zig build --fetch` (see https://github.com/ziglang/zig/issues/20976) we need to do some extra work to fetch everything that we actually need to build without Internet access (such as when building a Nix package). An example of this happening: ``` error: builder for '/nix/store/cx8qcwrhjmjxik2547fw99v5j6np5san-ghostty-0.1.0.drv' failed with exit code 1; la/build/tmp.xgHOheUF7V/p/12208cfdda4d5fdbc81b0c44b82e4d6dba2d4a86bff644a153e026fdfc80f8469133/build.zig.zon:7:20: error: unable to discover remote git server capabilities: TemporaryNameServerFailure > .url = "git+https://github.com/zigimg/zigimg#3a667bdb3d7f0955a5a51c8468eac83210c1439e", > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > /build/tmp.xgHOheUF7V/p/12208cfdda4d5fdbc81b0c44b82e4d6dba2d4a86bff644a153e026fdfc80f8469133/build.zig.zon:16:20: error: unable to discover remote git server capabilities: TemporaryNameServerFailure > .url = "git+https://github.com/mitchellh/libxev#f6a672a78436d8efee1aa847a43a900ad773618b", > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > For full logs, run 'nix log /nix/store/cx8qcwrhjmjxik2547fw99v5j6np5san-ghostty-0.1.0.drv'. ``` To update this script, add any failing URLs with a line like this: ``` zig fetch <url> ``` Periodically old URLs may need to be cleaned out. Hopefully when the Zig issue is fixed this script can be eliminated in favor of a plain `zig build --fetch`.
66 lines
1.8 KiB
Bash
Executable File
66 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Nothing in this script should fail.
|
|
set -e
|
|
|
|
CACHE_HASH_FILE="$(realpath "$(dirname "$0")/../zigCacheHash.nix")"
|
|
|
|
help() {
|
|
echo ""
|
|
echo "To fix, please (manually) re-run the script from the repository root,"
|
|
echo "commit, and push the update:"
|
|
echo ""
|
|
echo " ./nix/build-support/check-zig-cache-hash.sh --update"
|
|
echo " git add nix/zigCacheHash.nix"
|
|
echo " git commit -m \"nix: update Zig cache hash\""
|
|
echo " git push"
|
|
echo ""
|
|
}
|
|
|
|
if [ -f "${CACHE_HASH_FILE}" ]; then
|
|
OLD_CACHE_HASH="$(nix eval --raw --file "${CACHE_HASH_FILE}")"
|
|
elif [ "$1" != "--update" ]; then
|
|
echo -e "\nERROR: Zig cache hash file missing."
|
|
help
|
|
exit 1
|
|
fi
|
|
|
|
ZIG_GLOBAL_CACHE_DIR="$(mktemp --directory --suffix nix-zig-cache)"
|
|
ZIG_LOCAL_CACHE_DIR="${ZIG_GLOBAL_CACHE_DIR}"
|
|
export ZIG_GLOBAL_CACHE_DIR
|
|
export ZIG_LOCAL_CACHE_DIR
|
|
|
|
# This is not 100% necessary in CI but is helpful when running locally to keep
|
|
# a local workstation clean.
|
|
trap 'rm -rf "${ZIG_GLOBAL_CACHE_DIR}"' EXIT
|
|
|
|
# Run Zig and download the cache to the temporary directory.
|
|
|
|
sh ./fetch-zig-cache.sh
|
|
|
|
# Now, calculate the hash.
|
|
ZIG_CACHE_HASH="sha256-$(nix-hash --type sha256 --to-base64 "$(nix-hash --type sha256 "${ZIG_GLOBAL_CACHE_DIR}")")"
|
|
|
|
if [ "${OLD_CACHE_HASH}" == "${ZIG_CACHE_HASH}" ]; then
|
|
echo -e "\nOK: Zig cache store hash unchanged."
|
|
exit 0
|
|
elif [ "$1" != "--update" ]; then
|
|
echo -e "\nERROR: The Zig cache store hash has updated."
|
|
echo ""
|
|
echo " * Old hash: ${OLD_CACHE_HASH}"
|
|
echo " * New hash: ${ZIG_CACHE_HASH}"
|
|
help
|
|
exit 1
|
|
else
|
|
echo -e "\nNew Zig cache store hash: ${ZIG_CACHE_HASH}"
|
|
fi
|
|
|
|
# Write out the cache file
|
|
cat > "${CACHE_HASH_FILE}" <<EOS
|
|
# This file is auto-generated! check build-support/check-zig-cache-hash.sh for
|
|
# more details.
|
|
"${ZIG_CACHE_HASH}"
|
|
EOS
|
|
|
|
echo -e "\nOK: Wrote new hash to file: ${CACHE_HASH_FILE}"
|