Skip to content

Commit 96afc02

Browse files
committed
Fix library cache on macOS
1 parent 024a2e7 commit 96afc02

File tree

2 files changed

+63
-15
lines changed

2 files changed

+63
-15
lines changed

src/scripts/cache.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ data() {
8989
api_version=$(get_api_version)
9090
dir=$(extension_dir_darwin "$api_version")
9191
sudo mkdir -p "$dir/deps" && fix_ownership "$dir"
92-
[[ "$extensions" == *"imagick"* ]] && date='20210703'
92+
date='20210707'
9393
else
9494
os="Windows"
9595
dir='C:\\tools\\php\\ext'

src/scripts/darwin.sh

+62-14
Original file line numberDiff line numberDiff line change
@@ -63,27 +63,75 @@ setup_extensions() {
6363
add_log "${tick:?}" "${dependency_extensions_array[@]}"
6464
}
6565

66+
add_library_helper() {
67+
dep_name=$1
68+
cache_dir=$2
69+
sudo cp -R "$brew_cellar/$dep_name" "$cache_dir/"
70+
sudo chmod -R 777 "$cache_dir/$dep_name"
71+
echo "$dep_name" | sudo tee -a "$cache_dir"/list >/dev/null 2>&1
72+
(
73+
cd "$cache_dir" || exit 1
74+
if command -v gtar >/dev/null; then
75+
sudo gtar -I "zstd -T0" -cf "$cache_dir"/"$dep_name".tar.zst "$dep_name"
76+
else
77+
sudo tar -cf - "$dep_name" | zstd -T0 > "$cache_dir"/"$dep_name".tar.zst
78+
fi
79+
)
80+
}
81+
82+
add_library() {
83+
lib=$1
84+
cache_dir=$2
85+
brew list "$lib" &>/dev/null || brew install "$lib"
86+
IFS=' ' read -r -a deps_array <<<"$(brew deps "$lib" | tr '\n' ' ')"
87+
to_wait=()
88+
for dep_name in "$lib" "${deps_array[@]}"; do
89+
add_library_helper "$dep_name" "$cache_dir" &
90+
to_wait+=($!)
91+
done
92+
wait "${to_wait[@]}"
93+
sudo rm -R -- "${cache_dir:?}"/*/
94+
}
95+
96+
restore_library_helper() {
97+
dep_name=$1
98+
cache_dir=$2
99+
if command -v gtar >/dev/null; then
100+
sudo gtar -I "zstd -d" -xf "$cache_dir"/"$dep_name".tar.zst -C "$brew_cellar"
101+
else
102+
sudo zstd -dq "$cache_dir"/"$dep_name".tar.zst && sudo tar -xf "$cache_dir"/"$dep_name".tar -C "$brew_cellar"
103+
fi
104+
if ! [ -d "$brew_prefix/opt/$dep_name" ]; then
105+
brew link --force --overwrite "$dep_name" 2>/dev/null || true
106+
fi
107+
}
108+
109+
restore_library() {
110+
cache_dir=$1
111+
to_wait=()
112+
while read -r dep_name; do
113+
restore_library_helper "$dep_name" "$cache_dir" &
114+
to_wait+=($!)
115+
done <"$cache_dir"/list
116+
wait "${to_wait[@]}"
117+
}
118+
66119
setup_libraries() {
67120
extension=$1
68121
shift 1
69122
libraries_array=("$@")
70123
ext_deps_dir="$deps_cache_directory/$extension"
71124
sudo cp -a "$tap_dir"/shivammathur/homebrew-extensions/.github/deps/"$extension"/*.rb "$tap_dir"/homebrew/homebrew-core/Formula/
72125
sudo mkdir -p "$ext_deps_dir"
73-
libs_count="$(find "$ext_deps_dir" -maxdepth 1 -name "*.dylib" | wc -l | sed 's/^ *//')"
74-
if [ "$libs_count" = "0" ]; then
75-
echo "::group::Logs to set up libraries required for $extension"
76-
for lib in "${libraries_array[@]}"; do
77-
brew list "$lib" &>/dev/null || brew install "$lib"
78-
IFS=' ' read -r -a deps_array <<<"$(brew deps "$lib" | tr '\n' ' ')"
79-
for dep in "$lib" "${deps_array[@]}"; do
80-
sudo find "$brew_cellar/$dep" -name "*.dylib" -exec cp "{}" "$ext_deps_dir/" \;
81-
done
82-
done
83-
echo "::endgroup::"
84-
else
85-
sudo find "$ext_deps_dir" -name "*.dylib" -exec cp "{}" "$brew_prefix/lib/" \;
86-
fi
126+
echo "::group::Logs to set up libraries required for $extension"
127+
for lib in "${libraries_array[@]}"; do
128+
if ! [ -e "$ext_deps_dir"/list ]; then
129+
add_library "$lib" "$ext_deps_dir"
130+
else
131+
restore_library "$ext_deps_dir"
132+
fi
133+
done
134+
echo "::endgroup::"
87135
add_log "$tick" "${libraries_array[@]}"
88136
}
89137

0 commit comments

Comments
 (0)