@@ -63,27 +63,75 @@ setup_extensions() {
63
63
add_log " ${tick:? } " " ${dependency_extensions_array[@]} "
64
64
}
65
65
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
+
66
119
setup_libraries () {
67
120
extension=$1
68
121
shift 1
69
122
libraries_array=(" $@ " )
70
123
ext_deps_dir=" $deps_cache_directory /$extension "
71
124
sudo cp -a " $tap_dir " /shivammathur/homebrew-extensions/.github/deps/" $extension " /* .rb " $tap_dir " /homebrew/homebrew-core/Formula/
72
125
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::"
87
135
add_log " $tick " " ${libraries_array[@]} "
88
136
}
89
137
0 commit comments