k2hdkc 1.0.12 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,361 @@
1
+ #!/bin/sh
2
+ #
3
+ # Utility helper tools for Github Actions by AntPickax
4
+ #
5
+ # Copyright 2025 Yahoo Japan Corporation.
6
+ #
7
+ # AntPickax provides utility tools for supporting nodejs addon.
8
+ #
9
+ # These tools retrieve the necessary information from the
10
+ # repository and appropriately set the setting values of
11
+ # configure, Makefile, spec,etc file and so on.
12
+ # These tools were recreated to reduce the number of fixes and
13
+ # reduce the workload of developers when there is a change in
14
+ # the project configuration.
15
+ #
16
+ # For the full copyright and license information, please view
17
+ # the license file that was distributed with this source code.
18
+ #
19
+ # AUTHOR: Takeshi Nakatani
20
+ # CREATE: Wed 19 Nov 2025
21
+ # REVISION:
22
+ #
23
+
24
+ #---------------------------------------------------------------
25
+ # About this script
26
+ #---------------------------------------------------------------
27
+ # This script outputs parameters for the prebuild command according
28
+ # to the environment.
29
+ # The script will output the result corresponding to the specified
30
+ # option to stdout. If a value does not exist, an empty string
31
+ # will be returned. If an option is not specified, an error will
32
+ # be output to stderr.
33
+ #
34
+ # This script is used as follows:
35
+ # CPU_ARCH_NAME=$(make_node_variables.sh --architecture-name)
36
+ # PREBUILD_PARAMTERS=$(make_node_variables.sh -rp)
37
+ #
38
+ #---------------------------------------------------------------
39
+
40
+ #---------------------------------------------------------------
41
+ # Common Variables
42
+ #---------------------------------------------------------------
43
+ PRGNAME=$(basename "$0")
44
+ SCRIPTDIR=$(dirname "$0")
45
+ SCRIPTDIR=$(cd "${SCRIPTDIR}" || exit 1; pwd)
46
+ SRCTOP=$(cd "${SCRIPTDIR}/.." || exit 1; pwd)
47
+
48
+ OS_RELEASE_FILE="/etc/os-release"
49
+ PACKAGE_JSON_FILE="package.json"
50
+ OUTPUT_BASE_DIR="prebuilds"
51
+
52
+ #---------------------------------------------------------------
53
+ # Package name and Package version, Github repository (for asset url)
54
+ #---------------------------------------------------------------
55
+ PKG_NAME=""
56
+ PKG_VERSION=""
57
+ GITHUB_DOMAIN_NAME=""
58
+ GITHUB_API_DOMAIN_NAME=""
59
+ GITHUB_OWNER_NAME=""
60
+ GITHUB_REPO_NAME=""
61
+ if [ ! -f "${SRCTOP}/${PACKAGE_JSON_FILE}" ]; then
62
+ echo "Not found ${PACKAGE_JSON_FILE} file" 1>&2
63
+ exit 1
64
+ else
65
+ PKG_NAME=$(grep -i '"name"' "${SRCTOP}/${PACKAGE_JSON_FILE}" | sed -e 's|[,"]||g' | awk '{print $2}')
66
+ PKG_VERSION=$(grep -i '"version"' "${SRCTOP}/${PACKAGE_JSON_FILE}" | sed -e 's|[,"]||g' | awk '{print $2}')
67
+
68
+ _TMP_REPO_URL=$(tr -d '\n' < "${SRCTOP}/${PACKAGE_JSON_FILE}" 2>/dev/null | sed -e 's#^.*\"repository\"[[:space:]]*:##g' -e 's#}.*$##g' -e 's#.*\"url\"[[:space:]]*:[[:space:]]*##g' -e 's#"##g' -e 's#^[[:space:]]*##g' -e 's#[[:space:]]*$##g')
69
+ GITHUB_DOMAIN_NAME=$(printf '%s' "${_TMP_REPO_URL}" | sed -e 's#git@##g' -e 's#http.*://##g' -e 's#:.*$##g' -e 's#/.*$##g')
70
+ GITHUB_API_DOMAIN_NAME="api.${GITHUB_DOMAIN_NAME}"
71
+ GITHUB_OWNER_NAME=$(printf '%s' "${_TMP_REPO_URL}" | awk -F'[/.:]' '{print $(NF-2)}')
72
+ GITHUB_REPO_NAME=$(printf '%s' "${_TMP_REPO_URL}" | awk -F'[/.:]' '{print $(NF-1)}')
73
+ fi
74
+
75
+ #---------------------------------------------------------------
76
+ # Libc type
77
+ #---------------------------------------------------------------
78
+ LIBC_TYPE=""
79
+ if [ ! -f "${OS_RELEASE_FILE}" ]; then
80
+ LIBC_TYPE=""
81
+ PREBUILD_LIBC_PARAM=""
82
+ FILE_LIBC_PARAM=""
83
+ elif grep -q -i '^ID=[[:space:]]*alpine[[:space:]]*$' "${OS_RELEASE_FILE}"; then
84
+ LIBC_TYPE="musl"
85
+ PREBUILD_LIBC_PARAM="--libc ${LIBC_TYPE}"
86
+ FILE_LIBC_PARAM="-${LIBC_TYPE}"
87
+ else
88
+ LIBC_TYPE="glibc"
89
+ PREBUILD_LIBC_PARAM="--libc ${LIBC_TYPE}"
90
+ FILE_LIBC_PARAM="-${LIBC_TYPE}"
91
+ fi
92
+
93
+ #---------------------------------------------------------------
94
+ # Platform name
95
+ #---------------------------------------------------------------
96
+ PLATFORM_NAME=""
97
+ if command -v uname >/dev/null 2>&1; then
98
+ PLATFORM_NAME=$(uname -s 2>/dev/null | tr '[:upper:]' '[:lower:]' 2>/dev/null)
99
+ fi
100
+ if [ -z "${PLATFORM_NAME}" ]; then
101
+ PLATFORM_NAME="unknown"
102
+ PREBUILD_PLATFORM_PARAM=""
103
+ FILE_PLATFORM_PARAM="-${PLATFORM_NAME}"
104
+ else
105
+ PREBUILD_PLATFORM_PARAM="--platform ${PLATFORM_NAME}"
106
+ FILE_PLATFORM_PARAM="-${PLATFORM_NAME}"
107
+ fi
108
+
109
+ #---------------------------------------------------------------
110
+ # Distribution
111
+ #---------------------------------------------------------------
112
+ #
113
+ # Distribution name
114
+ #
115
+ DISTRO_NAME=""
116
+ if [ -f "${OS_RELEASE_FILE}" ]; then
117
+ DISTRO_NAME=$(grep -i '^ID=[[:space:]]*.*$' "${OS_RELEASE_FILE}" 2>/dev/null | sed -e 's#^ID=[[:space:]]*##g' -e 's#"##g' -e 's#^[[:space:]]*##g' -e 's#[[:space:]]*$##g' | tr -d '\n' 2>/dev/null)
118
+ fi
119
+
120
+ #
121
+ # Distribution Version
122
+ #
123
+ DISTRO_VERSION=""
124
+ DISTRO_MAJOR_VERSION=""
125
+ if [ -n "${DISTRO_NAME}" ]; then
126
+ DISTRO_VERSION=$(grep -i '^VERSION_ID=[[:space:]]*.*$' "${OS_RELEASE_FILE}" 2>/dev/null | sed -e 's#^VERSION_ID=[[:space:]]*##g' -e 's#"##g' -e 's#^[[:space:]]*##g' -e 's#[[:space:]]*$##g' | tr -d '\n' 2>/dev/null)
127
+
128
+ # [NOTE]
129
+ # For ALPINE, we must assign not only the major number but also the minor number.
130
+ #
131
+ if echo "${DISTRO_NAME}" | grep -q -i 'alpine'; then
132
+ DISTRO_MAJOR_VERSION=$(printf '%s' "${DISTRO_VERSION}" 2>/dev/null | sed -e 's#^\([0-9]\+\)\.\?\([0-9]\+\)\?\.\?.*#\1.\2#g' -e 's#\.$##g' 2>/dev/null)
133
+ else
134
+ DISTRO_MAJOR_VERSION=$(printf '%s' "${DISTRO_VERSION}" 2>/dev/null | sed -e 's#[\.].*##g' | tr -d '\n' 2>/dev/null)
135
+ fi
136
+ fi
137
+
138
+ #---------------------------------------------------------------
139
+ # CPU Architecture
140
+ #---------------------------------------------------------------
141
+ CPU_ARCH_NAME=""
142
+ if command -v uname >/dev/null 2>&1; then
143
+ CPU_ARCH_NAME=$(uname -m 2>/dev/null)
144
+ fi
145
+ if [ -z "${CPU_ARCH_NAME}" ]; then
146
+ CPU_ARCH_NAME=""
147
+ PREBUILD_ARCH_PARAM=""
148
+ FILE_ARCH_PARAM=""
149
+ elif echo "${CPU_ARCH_NAME}" | grep -q -i "^x86[_]*64$"; then
150
+ CPU_ARCH_NAME="x86_64"
151
+ PREBUILD_ARCH_PARAM="--arch ${CPU_ARCH_NAME}"
152
+ FILE_ARCH_PARAM="-${CPU_ARCH_NAME}"
153
+ else
154
+ CPU_ARCH_NAME=""
155
+ PREBUILD_ARCH_PARAM=""
156
+ FILE_ARCH_PARAM=""
157
+ fi
158
+
159
+ #---------------------------------------------------------------
160
+ # Node version and Node ABI version and N-API version
161
+ #---------------------------------------------------------------
162
+ NODE_VER_FULL=""
163
+ NODE_VER_MAJOR=""
164
+ NODE_ABI_VER=""
165
+ NAPI_VER=""
166
+ if command -v node >/dev/null 2>&1; then
167
+ NODE_VER_FULL=$(node -v 2>/dev/null | sed 's/^v//' 2>/dev/null)
168
+ NODE_VER_MAJOR=$(printf '%s' "${NODE_VER_FULL}" 2>/dev/null | cut -d. -f1 2>/dev/null)
169
+ NODE_ABI_VER=$(node -e "console.log(require('node-abi').getAbi('${NODE_VER_FULL}', 'node'))" 2>/dev/null)
170
+ NAPI_VER=$(node -p "process.versions.napi" 2>/dev/null)
171
+ fi
172
+ if [ -z "${NODE_VER_FULL}" ] || [ -z "${NODE_VER_MAJOR}" ] || [ -z "${NODE_ABI_VER}" ]; then
173
+ NODE_VER_FULL=0
174
+ NODE_VER_MAJOR=0.0.0
175
+ NODE_ABI_VER=0
176
+ PREBUILD_TARGET_PARAM=""
177
+ FILE_TARGET_PARAM=""
178
+ FILE_ABI_PARAM=""
179
+ else
180
+ PREBUILD_TARGET_PARAM="--target ${NODE_VER_FULL}"
181
+ FILE_TARGET_PARAM="-node${NODE_VER_MAJOR}"
182
+ FILE_ABI_PARAM="-node-v${NODE_ABI_VER}"
183
+ fi
184
+ if [ -z "${NAPI_VER}" ]; then
185
+ NAPI_VER=0
186
+ FILE_NAPI_PARAM=""
187
+ else
188
+ FILE_NAPI_PARAM="-napi${NAPI_VER}"
189
+ fi
190
+ if [ -z "${DISTRO_NAME}" ] || [ -z "${DISTRO_VERSION}" ] || [ -z "${DISTRO_MAJOR_VERSION}" ]; then
191
+ FILE_DISTRO_PARAM=""
192
+ else
193
+ FILE_DISTRO_PARAM="-${DISTRO_NAME}${DISTRO_MAJOR_VERSION}"
194
+ fi
195
+
196
+ #---------------------------------------------------------------
197
+ # Create a variables
198
+ #---------------------------------------------------------------
199
+ # Output directory:
200
+ # prebuilds
201
+ # prebuilds/<scope> : when package name has scope
202
+ #
203
+ # Output filename(created by prebuild):
204
+ # <pkgname(no scope)>-v<pkg version>-node-v<ABI version>-<platform name><libc type>-<arch name>.tar.gz
205
+ # pkgname-v1.0.0-node-v137-linuxglibc-x86_64.tar.gz
206
+ #
207
+ # Final filename(rename from output filename)
208
+ # <pkgname(no scope)>-v<pkg version>-node-v<ABI version>-node<node major version>-napi<N-API version>-<platform name>-<distro name><distro major version>-<arch name>-<libc type>.tar.gz
209
+ # pkgname-v1.0.0-node-v137-node22-napi10-linux-ubuntu24-x86_64-glibc.tar.gz
210
+ #
211
+ # Prebuild command parameters:
212
+ # --strip --napi --platform <platform name> --arch <arch name> --target <node full version> --libc <libc type>
213
+ # --strip --napi --platform linux --arch x86_64 --target 24.11.1 --libc glibc
214
+ #
215
+ if echo "${PKG_NAME}" | grep -q '/'; then
216
+ PKG_SCOPE_NAME=$(echo "${PKG_NAME}" | sed 's:/[^/]*$::')
217
+ PKG_NOSCOPE_NAME=$(echo "${PKG_NAME}" | sed 's:.*/::')
218
+ OUTPUT_SUBDIR="/${PKG_SCOPE_NAME}"
219
+ else
220
+ PKG_SCOPE_NAME=""
221
+ PKG_NOSCOPE_NAME="${PKG_NAME}"
222
+ OUTPUT_SUBDIR=""
223
+ fi
224
+
225
+ SHAR256_FILE_SUFFIX=".sha256"
226
+ OUTDIR_PATH="${OUTPUT_BASE_DIR}${OUTPUT_SUBDIR}"
227
+ PREBUILD_OUTPUT_TGZ="${PKG_NOSCOPE_NAME}-v${PKG_VERSION}${FILE_ABI_PARAM}${FILE_PLATFORM_PARAM}${LIBC_TYPE}${FILE_ARCH_PARAM}.tar.gz"
228
+ RENAME_PKG_TGZ="${PKG_NOSCOPE_NAME}-v${PKG_VERSION}${FILE_ABI_PARAM}${FILE_TARGET_PARAM}${FILE_NAPI_PARAM}${FILE_PLATFORM_PARAM}${FILE_DISTRO_PARAM}${FILE_ARCH_PARAM}${FILE_LIBC_PARAM}.tar.gz"
229
+ RENAME_PKG_SHA256="${RENAME_PKG_TGZ}${SHAR256_FILE_SUFFIX}"
230
+ PREBUILD_PARAMTERS="--strip --napi ${PREBUILD_PLATFORM_PARAM} ${PREBUILD_ARCH_PARAM} ${PREBUILD_TARGET_PARAM} ${PREBUILD_LIBC_PARAM}"
231
+
232
+ #---------------------------------------------------------------
233
+ # Github asset urls
234
+ #---------------------------------------------------------------
235
+ # URL:
236
+ # https://github.com/<owner>/<repo>/releases/download/v<version>/<tgz file name>
237
+ # https://github.com/<owner>/<repo>/releases/download/v<version>/<sha256 file name>
238
+ #
239
+ GITHUB_ASSET_TGZ_URL="https://${GITHUB_DOMAIN_NAME}/${GITHUB_OWNER_NAME}/${GITHUB_REPO_NAME}/releases/download/v${PKG_VERSION}/${RENAME_PKG_TGZ}"
240
+ GITHUB_ASSET_SHA256_URL="https://${GITHUB_DOMAIN_NAME}/${GITHUB_OWNER_NAME}/${GITHUB_REPO_NAME}/releases/download/v${PKG_VERSION}/${RENAME_PKG_SHA256}"
241
+
242
+ #---------------------------------------------------------------
243
+ # Main process
244
+ #---------------------------------------------------------------
245
+ if [ $# -ne 1 ]; then
246
+ echo "No parameters specified.(see --help option)" 1>&2
247
+ exit 1
248
+
249
+ elif echo "$1" | grep -q -i -e "^--help$" -e "^-h$"; then
250
+ echo ""
251
+ echo "${PRGNAME}"
252
+ echo " This is a helper script that returns the current environment variables required when running the prebuild command to create a Nodejs addon package."
253
+ echo ""
254
+ echo "Usage: ${PRGNAME} [options]"
255
+ echo ""
256
+ echo "Option:"
257
+ echo " --package-name(-pk) : Get package name from package.json(ex. pkgname)"
258
+ echo " --package-version(-pv) : Get package version from package.json(ex. 1.0.0)"
259
+ echo " --libc-type(-lt) : Get LIBC type(ex. glibc or musl)"
260
+ echo " --platform-name(-pn) : Get platform name(ex. linux, etc)"
261
+ echo " --distro-name(-dn) : Get OS distribution name(ex. ubuntu, etc)"
262
+ echo " --distro-version(-dv) : Get OS distribution version(ex. 24.04, etc)"
263
+ echo " --distro-major-version(-dm) : Get OS distribution major version(ex. 24, etc)"
264
+ echo " --architecture-name(-an) : Get CPU architecture(ex. x86_64, etc)"
265
+ echo " --node-version(-nv) : Get node full version(ex, 24.0.0)"
266
+ echo " --node-major-version(-nm) : Get node mahor version(ex, 24)"
267
+ echo " --node-abi-version(-av) : Get node ABI version(ex, 137)"
268
+ echo " --napi-version(-na) : Get N-API library version(ex, 10)"
269
+ echo " --output-dirname(-od) : Get directory name for prebuild output(ex, prebuilds or prebuilds/<scope>)"
270
+ echo " --prebuild-parameters(-pp) : Get all prebuild command parameters(ex, --strip --napi --platform linux --arch x86_64 --target 24.11.1 --libc glibc)"
271
+ echo " --prebuild-filename(-pf) : Get output filename created by prebuild under output directory(ex, <pkgname>-v1.0.0-node-v137-linuxglibc-x86_64.tar.gz)"
272
+ echo " --tgz-filename(-tf) : Get the filename to rename the file created by prebuild(e.g. pkgname-v1.0.0-node-v137-node22-napi10-linux-x86_64-glibc.tar.gz)"
273
+ echo " --sha256-filename(-tf) : Get the filename to sha256 file for renamed tgz file(e.g. pkgname-v1.0.0-node-v137-node22-napi10-linux-x86_64-glibc.tar.gz.sha256)"
274
+ echo " --tgz-download-url(-td) : Get download URL for tgz asset file(e.g. https://github.com/<owner>/<repo>/releases/download/v<version>/<tgz file name>)"
275
+ echo " --sha256-download-url(-sd) : Get download URL for sha256 asset file(e.g. https://github.com/<owner>/<repo>/releases/download/v<version>/<sha256 file name>)"
276
+ echo " --github-domain(-gd) : Get github domain name(ex, github.com)"
277
+ echo " --github-api-domain(-ad) : Get github api domain name(ex, api.github.com)"
278
+ echo " --package-owner(-po) : Get github owner(organaization) name(ex, antpickax)"
279
+ echo " --package-repogitry(-pr) : Get github repository name(ex, myrepository)"
280
+ echo ""
281
+
282
+ elif echo "$1" | grep -q -i -e "^--package-name$" -e "^-pk$"; then
283
+ printf '%s' "${PKG_NAME}" 2>/dev/null
284
+
285
+ elif echo "$1" | grep -q -i -e "^--package-version$" -e "^-pv$"; then
286
+ printf '%s' "${PKG_VERSION}" 2>/dev/null
287
+
288
+ elif echo "$1" | grep -q -i -e "^--libc-type$" -e "^-lt$"; then
289
+ printf '%s' "${LIBC_TYPE}" 2>/dev/null
290
+
291
+ elif echo "$1" | grep -q -i -e "^--platform-name$" -e "^-pn$"; then
292
+ printf '%s' "${PLATFORM_NAME}" 2>/dev/null
293
+
294
+ elif echo "$1" | grep -q -i -e "^--distro-name$" -e "^--distribution-name$" -e "^-dn$"; then
295
+ printf '%s' "${DISTRO_NAME}" 2>/dev/null
296
+
297
+ elif echo "$1" | grep -q -i -e "^--distro-version$" -e "^--distribution-version$" -e "^-dv$"; then
298
+ printf '%s' "${DISTRO_VERSION}" 2>/dev/null
299
+
300
+ elif echo "$1" | grep -q -i -e "^--distro-major-version$" -e "^--distribution-major-version$" -e "^-dm$"; then
301
+ printf '%s' "${DISTRO_MAJOR_VERSION}" 2>/dev/null
302
+
303
+ elif echo "$1" | grep -q -i -e "^--architecture-name$" -e "^-an$"; then
304
+ printf '%s' "${CPU_ARCH_NAME}" 2>/dev/null
305
+
306
+ elif echo "$1" | grep -q -i -e "^--node-version$" -e "^-nv$"; then
307
+ printf '%s' "${NODE_VER_FULL}" 2>/dev/null
308
+
309
+ elif echo "$1" | grep -q -i -e "^--node-major-version$" -e "^-nm$"; then
310
+ printf '%s' "${NODE_VER_MAJOR}" 2>/dev/null
311
+
312
+ elif echo "$1" | grep -q -i -e "^--node-abi-version$" -e "^-av$"; then
313
+ printf '%s' "${NODE_ABI_VER}" 2>/dev/null
314
+
315
+ elif echo "$1" | grep -q -i -e "^--napi-version$" -e "^-na$"; then
316
+ printf '%s' "${NAPI_VER}" 2>/dev/null
317
+
318
+ elif echo "$1" | grep -q -i -e "^--output-dirname$" -e "^-od$"; then
319
+ printf '%s' "${OUTDIR_PATH}" 2>/dev/null
320
+
321
+ elif echo "$1" | grep -q -i -e "^--prebuild-parameters$" -e "^-pp$"; then
322
+ printf '%s' "${PREBUILD_PARAMTERS}" 2>/dev/null
323
+
324
+ elif echo "$1" | grep -q -i -e "^--prebuild-filename$" -e "^-pf$"; then
325
+ printf '%s' "${PREBUILD_OUTPUT_TGZ}" 2>/dev/null
326
+
327
+ elif echo "$1" | grep -q -i -e "^--tgz-filename$" -e "^-rf$"; then
328
+ printf '%s' "${RENAME_PKG_TGZ}" 2>/dev/null
329
+
330
+ elif echo "$1" | grep -q -i -e "^--sha256-filename$" -e "^-sf$"; then
331
+ printf '%s' "${RENAME_PKG_SHA256}" 2>/dev/null
332
+
333
+ elif echo "$1" | grep -q -i -e "^--tgz-download-url$" -e "^-td$"; then
334
+ printf '%s' "${GITHUB_ASSET_TGZ_URL}" 2>/dev/null
335
+
336
+ elif echo "$1" | grep -q -i -e "^--sha256-download-url$" -e "^-sd$"; then
337
+ printf '%s' "${GITHUB_ASSET_SHA256_URL}" 2>/dev/null
338
+
339
+ elif echo "$1" | grep -q -i -e "^--github-domain$" -e "^-gd$"; then
340
+ printf '%s' "${GITHUB_DOMAIN_NAME}" 2>/dev/null
341
+
342
+ elif echo "$1" | grep -q -i -e "^--github-api-domain$" -e "^-ad$"; then
343
+ printf '%s' "${GITHUB_API_DOMAIN_NAME}" 2>/dev/null
344
+
345
+ elif echo "$1" | grep -q -i -e "^--package-owner$" -e "^-po$"; then
346
+ printf '%s' "${GITHUB_OWNER_NAME}" 2>/dev/null
347
+
348
+ elif echo "$1" | grep -q -i -e "^--package-repogitry$" -e "^-pr$"; then
349
+ printf '%s' "${GITHUB_REPO_NAME}" 2>/dev/null
350
+ fi
351
+
352
+ exit 0
353
+
354
+ #
355
+ # Local variables:
356
+ # tab-width: 4
357
+ # c-basic-offset: 4
358
+ # End:
359
+ # vim600: noexpandtab sw=4 ts=4 fdm=marker
360
+ # vim<600: noexpandtab sw=4 ts=4
361
+ #