Skip to content

Commit

Permalink
doc,test: extend the list of platforms supported by single-executables
Browse files Browse the repository at this point in the history
Now that #46934 has landed, we can
extend the list of platforms and architectures where we can run the
single-executable test.

Signed-off-by: Darshan Sen <raisinten@gmail.com>
PR-URL: #47026
Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
  • Loading branch information
RaisinTen authored and targos committed Nov 10, 2023
1 parent 67fe7d8 commit 8a57182
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 11 deletions.
4 changes: 3 additions & 1 deletion doc/api/single-executable-applications.md
Expand Up @@ -159,7 +159,8 @@ platforms:

* Windows
* macOS
* Linux (AMD64 only)
* Linux (all distributions [supported by Node.js][] except Alpine and all
architectures [supported by Node.js][] except s390x and ppc64)

This is due to a lack of better tools to generate single-executables that can be
used to test this feature on other platforms.
Expand All @@ -180,3 +181,4 @@ to help us document them.
[postject]: https://github.com/nodejs/postject
[signtool]: https://learn.microsoft.com/en-us/windows/win32/seccrypto/signtool
[single executable applications]: https://github.com/nodejs/single-executable
[supported by Node.js]: https://github.com/nodejs/node/blob/main/BUILDING.md#platform-list
Expand Up @@ -54,7 +54,9 @@ for the following features are in the list of work we'd like to get to:
* Running an archive of multiple files.
* Embedding [Node.js CLI options][] into the binary.
* [XCOFF][] executable format.
* Run tests on Linux architectures/distributions other than AMD64 Ubuntu.
* Run tests on Alpine Linux.
* Run tests on s390x Linux.
* Run tests on ppc64 Linux.

## Disabling single executable application support

Expand Down
22 changes: 13 additions & 9 deletions test/parallel/test-single-executable-application.js
Expand Up @@ -16,6 +16,11 @@ if (!process.config.variables.single_executable_application)
if (!['darwin', 'win32', 'linux'].includes(process.platform))
common.skip(`Unsupported platform ${process.platform}.`);

if (process.platform === 'linux' && process.config.variables.asan) {
// Source of the memory leak - https://github.com/nodejs/node/blob/da0bc6db98cef98686122ea1e2cd2dbd2f52d123/src/node_sea.cc#L94.
common.skip('Running the resultant binary fails because of a memory leak ASAN error.');
}

if (process.platform === 'linux' && process.config.variables.is_debug === 1)
common.skip('Running the resultant binary fails with `Couldn\'t read target executable"`.');

Expand All @@ -36,17 +41,16 @@ if (process.config.variables.want_separate_host_toolset !== 0)
common.skip('Running the resultant binary fails with `Segmentation fault (core dumped)`.');

if (process.platform === 'linux') {
try {
const osReleaseText = readFileSync('/etc/os-release', { encoding: 'utf-8' });
if (!/^NAME="Ubuntu"/m.test(osReleaseText)) {
throw new Error('Not Ubuntu.');
}
} catch {
common.skip('Only supported Linux distribution is Ubuntu.');
const osReleaseText = readFileSync('/etc/os-release', { encoding: 'utf-8' });
const isAlpine = /^NAME="Alpine Linux"/m.test(osReleaseText);
if (isAlpine) common.skip('Alpine Linux is not supported.');

if (process.arch === 's390x') {
common.skip('On s390x, postject fails with `memory access out of bounds`.');
}

if (process.arch !== 'x64') {
common.skip(`Unsupported architecture for Linux - ${process.arch}.`);
if (process.arch === 'ppc64') {
common.skip('On ppc64, this test times out.');
}
}

Expand Down

0 comments on commit 8a57182

Please sign in to comment.