Skip to content

Commit bb77de0

Browse files
committed
tools: add an option to generate lighter archives
1 parent d18327e commit bb77de0

File tree

2 files changed

+80
-11
lines changed

2 files changed

+80
-11
lines changed

.github/workflows/test-shared.yml

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,46 @@ permissions:
5959
contents: read
6060

6161
jobs:
62+
build-tarball:
63+
if: github.event.pull_request.draft == false
64+
name: ${{ github.event_name == 'workflow_dispatch' && 'Skipped job' || 'Build slim tarball' }}
65+
runs-on: ubuntu-24.04-arm
66+
steps:
67+
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
68+
if: ${{ github.event_name != 'workflow_dispatch' }}
69+
with:
70+
persist-credentials: false
71+
72+
- name: Patch npm gyp (to be able to build addons for the tests)
73+
if: ${{ github.event_name != 'workflow_dispatch' }}
74+
run: |
75+
curl -L https://github.com/nodejs/gyp-next/commit/8224deef984add7e7afe846cfb82c9d3fa6da1fb.diff \
76+
| git apply --directory=deps/npm/node_modules/node-gyp/gyp
77+
git add deps/npm/node_modules/node-gyp/gyp
78+
git config --local user.email "[email protected]"
79+
git config --local user.name "Node.js GitHub Bot"
80+
git commit --fixup HEAD
81+
82+
- name: Make tarball
83+
if: ${{ github.event_name != 'workflow_dispatch' }}
84+
run: |
85+
export DATESTRING=$(date "+%Y-%m-%d")
86+
export COMMIT=$(git rev-parse --short=10 "$GITHUB_SHA")
87+
./configure && make tar -j4 SKIP_XZ=1 SKIP_SHARED_DEPS=1
88+
env:
89+
DISTTYPE: nightly
90+
91+
92+
- name: Upload tarball artifact
93+
if: ${{ github.event_name != 'workflow_dispatch' }}
94+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
95+
with:
96+
name: tarballs
97+
path: '*.tar.gz'
98+
compression-level: 0
99+
62100
build:
101+
needs: build-tarball
63102
strategy:
64103
fail-fast: false
65104
matrix:
@@ -75,10 +114,17 @@ jobs:
75114
name: '${{ matrix.system }}: with shared libraries'
76115
runs-on: ${{ matrix.runner }}
77116
steps:
78-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
117+
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
79118
if: ${{ github.event_name != 'workflow_dispatch' }}
80119
with:
81-
persist-credentials: false
120+
name: tarballs
121+
path: tarballs
122+
123+
- name: Extract tarball
124+
if: ${{ github.event_name != 'workflow_dispatch' }}
125+
run: |
126+
tar xzf tarballs/*.tar.gz -C "$RUNNER_TEMP"
127+
echo "TAR_DIR=$RUNNER_TEMP/$(basename tarballs/*.tar.gz .tar.gz)" >> "$GITHUB_ENV"
82128
83129
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
84130
if: ${{ github.event_name == 'workflow_dispatch' }}
@@ -109,30 +155,28 @@ jobs:
109155
core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || '');
110156
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
111157
158+
- name: Load shell.nix
159+
if: github.event_name != 'workflow_dispatch'
160+
run: mv "$TAR_DIR"/*.nix .
161+
112162
- name: Load shell.nix
113163
if: github.event_name == 'workflow_dispatch'
114164
run: |
115165
[ -f shell.nix ] || curl -fsLSO https://github.com/${GITHUB_REPOSITORY}/raw/${GITHUB_SHA}/shell.nix
116166
[ -f nixpkgs.nix ] || curl -fsLSO https://github.com/${GITHUB_REPOSITORY}/raw/${GITHUB_SHA}/nixpkgs.nix
117167
118-
- name: Patch npm gyp
119-
if: github.event_name != 'workflow_dispatch'
120-
run: |
121-
curl -L https://github.com/nodejs/gyp-next/commit/8224deef984add7e7afe846cfb82c9d3fa6da1fb.diff \
122-
| git apply --directory=deps/npm/node_modules/node-gyp/gyp
123-
124168
- name: Build Node.js ${{ github.event_name == 'workflow_dispatch' && 'on the base commit' || 'and run tests' }}
125169
run: |
126170
nix-shell \
127171
-I nixpkgs=./nixpkgs.nix \
128-
--pure --keep FLAKY_TESTS \
172+
--pure --keep TAR_DIR --keep FLAKY_TESTS \
129173
--keep SCCACHE_GHA_VERSION --keep ACTIONS_CACHE_SERVICE_V2 --keep ACTIONS_RESULTS_URL --keep ACTIONS_RUNTIME_TOKEN \
130174
--arg loadJSBuiltinsDynamically false \
131175
--arg ccache '(import <nixpkgs> {}).sccache' \
132176
--arg devTools '[]' \
133177
--arg benchmarkTools '[]' \
134178
--run '
135-
make ${{ github.event_name == 'workflow_dispatch' && 'build' || 'run' }}-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS"
179+
make ${{ github.event_name == 'workflow_dispatch' && 'build' || '-C "$TAR_DIR" run' }}-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS"
136180
'
137181
138182
- name: Re-build Node.js on the merge commit

Makefile

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ ADDONS_HEADERS_PREREQS := tools/install.py \
399399
$(wildcard deps/uv/include/*/*.h) \
400400
$(wildcard deps/v8/include/*.h) \
401401
$(wildcard deps/v8/include/*/*.h) \
402-
deps/zlib/zconf.h deps/zlib/zlib.h \
402+
$(wildcard deps/zlib/z*.h) \
403403
src/node.h src/node_api.h src/js_native_api.h src/js_native_api_types.h \
404404
src/node_api_types.h src/node_buffer.h src/node_object_wrap.h \
405405
src/node_version.h
@@ -1032,6 +1032,11 @@ override DESTCPU=x86
10321032
endif
10331033

10341034
TARNAME=node-$(FULLVERSION)
1035+
# Supply SKIP_SHARED_DEPS=1 to explicitly skip all dependencies that can be included as shared deps
1036+
SKIP_SHARED_DEPS ?= 0
1037+
ifeq ($(SKIP_SHARED_DEPS), 1)
1038+
TARNAME:=$(TARNAME)-slim
1039+
endif
10351040
TARBALL=$(TARNAME).tar
10361041
# Custom user-specified variation, use it directly
10371042
ifdef VARIATION
@@ -1213,12 +1218,31 @@ $(TARBALL): release-only doc-only
12131218
$(RM) -r $(TARNAME)/.editorconfig
12141219
$(RM) -r $(TARNAME)/.git*
12151220
$(RM) -r $(TARNAME)/.mailmap
1221+
ifeq ($(SKIP_SHARED_DEPS), 1)
1222+
$(RM) -r $(TARNAME)/deps/ada
1223+
$(RM) -r $(TARNAME)/deps/brotli
1224+
$(RM) -r $(TARNAME)/deps/cares
1225+
$(RM) -r $(TARNAME)/deps/icu-small
1226+
$(RM) -r $(TARNAME)/deps/icu-tmp
1227+
$(RM) -r $(TARNAME)/deps/llhttp
1228+
$(RM) -r $(TARNAME)/deps/nghttp2
1229+
$(RM) -r $(TARNAME)/deps/ngtcp2
1230+
find $(TARNAME)/deps/openssl -maxdepth 1 -type f ! -name 'nodejs-openssl.cnf' -exec $(RM) {} +
1231+
find $(TARNAME)/deps/openssl -mindepth 1 -maxdepth 1 -type d -exec $(RM) -r {} +
1232+
$(RM) -r $(TARNAME)/deps/simdjson
1233+
$(RM) -r $(TARNAME)/deps/sqlite
1234+
$(RM) -r $(TARNAME)/deps/uv
1235+
$(RM) -r $(TARNAME)/deps/uvwasi
1236+
$(RM) -r $(TARNAME)/deps/zlib
1237+
$(RM) -r $(TARNAME)/deps/zstd
1238+
else
12161239
$(RM) -r $(TARNAME)/deps/openssl/openssl/demos
12171240
$(RM) -r $(TARNAME)/deps/openssl/openssl/doc
12181241
$(RM) -r $(TARNAME)/deps/openssl/openssl/test
12191242
$(RM) -r $(TARNAME)/deps/uv/docs
12201243
$(RM) -r $(TARNAME)/deps/uv/samples
12211244
$(RM) -r $(TARNAME)/deps/uv/test
1245+
endif
12221246
$(RM) -r $(TARNAME)/deps/v8/samples
12231247
$(RM) -r $(TARNAME)/deps/v8/tools/profviz
12241248
$(RM) -r $(TARNAME)/deps/v8/tools/run-tests.py
@@ -1227,6 +1251,7 @@ $(TARBALL): release-only doc-only
12271251
$(RM) -r $(TARNAME)/tools/cpplint.py
12281252
$(RM) -r $(TARNAME)/tools/eslint
12291253
$(RM) -r $(TARNAME)/tools/eslint-rules
1254+
$(RM) -r $(TARNAME)/test/parallel/test-eslint-*
12301255
$(RM) -r $(TARNAME)/tools/license-builder.sh
12311256
$(RM) -r $(TARNAME)/tools/eslint/node_modules
12321257
$(RM) -r $(TARNAME)/tools/osx-*

0 commit comments

Comments
 (0)