ci_helpers.sh raw
1 #!/usr/bin/env bash
2
3 export LC_ALL=C
4
5 set -o errexit -o nounset -o pipefail -o xtrace
6
7 write_env_var() {
8 local key="$1"
9 local value="$2"
10
11 if [[ -n "${GITHUB_ENV:-}" ]]; then
12 echo "${key}=${value}" >> "${GITHUB_ENV}"
13 else
14 export "${key}=${value}"
15 fi
16 }
17
18 write_output_var() {
19 local key="$1"
20 local value="$2"
21
22 if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
23 echo "${key}=${value}" >> "${GITHUB_OUTPUT}"
24 else
25 echo "${key}=${value}"
26 fi
27 }
28
29 available_nproc() {
30 if command -v nproc >/dev/null 2>&1; then
31 nproc
32 else
33 sysctl -n hw.logicalcpu
34 fi
35 }
36
37 determine_parallelism() {
38 local multiplier="$1"
39 local available
40
41 available="$(available_nproc)"
42 write_env_var BUILD_PARALLEL "${available}"
43 write_env_var PARALLEL "$((available * multiplier))"
44 }
45
46 reset_ccache_stats() {
47 which ccache
48 ccache --version
49 ccache --zero-stats
50 }
51
52 show_ccache_stats() {
53 ccache --show-stats
54 }
55
56 install_apt_packages() {
57 sudo apt-get install --no-install-recommends -y "$@"
58 }
59
60 install_homebrew_packages() {
61 HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install --quiet "$@"
62 }
63
64 install_pip_packages() {
65 pip3 install "$@"
66 }
67
68 determine_host() {
69 local config_guess="${1:-./depends/config.guess}"
70 local output_key="${2:-host}"
71
72 write_output_var "${output_key}" "$("${config_guess}")"
73 }
74
75 ci_helpers_main() {
76 local command="${1:?missing command}"
77 shift
78
79 [[ "${command}" =~ ^[a-z_][a-z0-9_]*$ ]] || {
80 echo "Invalid command: ${command}" >&2
81 exit 1
82 }
83
84 if declare -F "${command}" >/dev/null; then
85 "${command}" "$@"
86 else
87 echo "Unknown command: ${command}" >&2
88 exit 1
89 fi
90 }
91
92 if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
93 ci_helpers_main "$@"
94 fi
95