FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Merge pull request #2033 from zawata/linux-electron-update · iggue/nodegit@4e3817d · GitHub

Repository navigation

Commit 4e3817d

Browse files
John Alden
authored
Merge pull request nodegit#2033 from zawata/linux-electron-update
Use custom electron for non-static builds on linux and fix cross-compilation
2 parents 03b3c88 + 9977abb commit 4e3817d

18 files changed

Lines changed: 143 additions & 157 deletions

File tree

‎.github/workflows/tests.yml‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,16 @@ jobs:
161161
run: npm install
162162

163163
- name: Test
164+
# need arm64 runners or an emulator to run tests
164165
if: matrix.arch != 'arm64'
165166
env:
166167
GIT_SSH: ${{ github.workspace }}\vendor\plink.exe
167168
run: |
168-
powershell -command "Start-Process ${{ github.workspace }}\vendor\pageant.exe ${{ github.workspace }}\vendor\private.ppk"
169+
$encodedKey = Get-Content -Path test\private.ppk.enc
170+
$finalPath = Join-Path -Path $HOME -ChildPath .ssh_tests\private.ppk
171+
mkdir ~\.ssh_tests
172+
Set-Content -Value $([System.Convert]::FromBase64String($encodedKey)) -Path $finalPath -AsByteStream
173+
powershell -command "Start-Process .\vendor\pageant\pageant_${{ matrix.arch }}.exe $finalPath"
169174
node utils/retry npm test
170175
171176
# You're probably wondering why this isn't a single `run: |` step, it certainly is for *nix,

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ jsconfig.json
4848

4949
test/id_rsa
5050
test/nodegit-test-rsa
51+
test/private.ppk

‎generate/templates/templates/binding.gyp‎

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,21 +155,28 @@
155155
"-std=c++<(cxx_version)"
156156
],
157157
}],
158-
["<(is_electron) == 1 and <(electron_openssl_static) == 1", {
158+
["<(is_electron) == 1", {
159+
"conditions": [
160+
["<(electron_openssl_static) == 1", {
161+
"libraries": [
162+
"<(electron_openssl_root)/lib/libssl.a",
163+
"<(electron_openssl_root)/lib/libcrypto.a"
164+
]
165+
}],
166+
["<(electron_openssl_static) != 1", {
167+
"library_dirs": [
168+
"<(electron_openssl_root)/lib"
169+
],
170+
"libraries": [
171+
"-lcrypto",
172+
"-lssl"
173+
]
174+
}]
175+
],
159176
"include_dirs": [
160177
"<(electron_openssl_root)/include"
161178
],
162-
"libraries": [
163-
"<(electron_openssl_root)/lib64/libssl.a",
164-
"<(electron_openssl_root)/lib64/libcrypto.a"
165-
]
166179
}],
167-
["<(is_electron) == 1 and <(electron_openssl_static) != 1", {
168-
"libraries": [
169-
"-lcrypto",
170-
"-lssl"
171-
]
172-
}]
173180
],
174181
}],
175182
[

‎guides/install/from-source/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ npm install nodegit --msvs_version=2013
6565
```
6666

6767
### Electron and OpenSSL ###
68-
A local version of OpenSSL is required when building for Electron on Windows and macOS. This is due to Electron using BoringSSL, as we are not able to link to it like we are OpenSSL in Node. Additionally, OpenSSL can be statically linked on Linux by setting the `NODEGIT_OPENSSL_STATIC_LINK` environment variable to `1`.
68+
A local version of OpenSSL is required when building for Electron. This is due to Electron using BoringSSL, as we are not able to link to it like we are OpenSSL in Node.
6969

7070
`acquireOpenSSL.js` will attempt to download OpenSSL prebuilts from S3. If preferred, it can also be built locally by setting the environment variable `npm_config_openssl_bin_url=skip`. On macOS, this should Just Work(tm). On Windows, things are a little trickier.
7171

‎test/README.md‎

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,20 @@ Unit tests for NodeGit.
1717
Test utilities with garbage collector, index, and repository setup, that can be used in tests.
1818

1919

20-
## Note
21-
\*.enc are encrypted in base64 and unencrypted before the test suite runs as \*.
20+
## Keys
21+
22+
Note: all files are encoded in base64 in `\*.enc` and decoded before the test suite runs.
23+
24+
### encrypted_rsa
25+
- passphrase "test-password"
26+
- registered as deploy key on [nodegit/test](https://github.com/nodegit/test) repo named "Encrypted test key"
27+
28+
### id_rsa
29+
- registered as deploy key on [nodegit/test](https://github.com/nodegit/test) repo named "Unencrypted Test Key"
30+
31+
### private.ppk
32+
- same key as id_rsa
33+
- ppk format is used by putty/pageant and converted/generated by puttygen
34+
35+
### nodegit-test-rsa
36+
- registered as deploy key on [nodegit/private](https://github.com/nodegit/private) repo named "Tests"

‎test/index.js‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ function unencryptKey(fileName) {
4040
.toString('ascii');
4141
fs.writeFileSync(path.join(__dirname, fileName), asciiContents, 'utf8');
4242
}
43+
44+
unencryptKey('private.ppk');
4345
unencryptKey('id_rsa');
4446
unencryptKey('nodegit-test-rsa');
4547

‎test/private.ppk.enc‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
UHVUVFktVXNlci1LZXktRmlsZS0zOiBzc2gtcnNhCkVuY3J5cHRpb246IG5vbmUKQ29tbWVudDog
2+
bm9uYW1lClB1YmxpYy1MaW5lczogMTIKQUFBQUIzTnphQzF5YzJFQUFBQURBUUFCQUFBQ0FRQ3dP
3+
Y0VONis1Vkx2VXBQSGp3WnNiMHZIUEJBRzcxUmV5YwovQzAyMkhDWENJV05mOUwxSWduR25nSWU0
4+
OXdxdGUvWXFyYm5xMHVqOXlrSjE4Nm1GZHdoeUtBNUR2dm5SM1FmClQ5OG12VE94bnpDTUJ1QlU3
5+
M002UEpDYTZVekpoeXhtTjNVTU1uanEvU25oN3hycVdkYW1YQ2ROS3hRL0QxUlkKVXEzVGdLbnBI
6+
bGxhSEI0dnoydHZvRXpBY0dzZ014aFZ4NWdoZ1YxT1Y1NzNYNFVDRXA1UVJNNHJ2WE9KMDRDLwpn
7+
Mzl5KzFNQnladUpveno4OHBaUFg4UFVISGJOemFWd2JCeDFVRnVJdFVGeGo3WkRGK3hubDdTTDBl
8+
RW0vc0dxClh3akhVenJlSmgwQXpZQUNYRVYwd3czZ0xSQ1pmSDEwa3RLMVlTcTFhQ0Vld1Z3MHNu
9+
TUl3cjNSMkFjZkR5K0QKM1dhMXd0WGxNb3lDaTFhRUhwdmd1OFVOQWhteDdJVy9pcEdEZHcyaGQ0
10+
OVh1ZUh2MjVwaHI4S1ROdVRnWmdMNgpXYkVQckFSM3dieHp6QXJ5dmJEbWJ4N1RSbUNRQVJxZlA5
11+
MTlDQmF5MmwyUGgvNDFDNFJZV3pPeUxHS1F3bzFXCnRwbk9FVnBPRTRLYmRNK3g5dzBxQndEdTVa
12+
TnRqcGd6WlBrbVBSSzhZU2NtUkRkSDRmNU1lT1dPd3Y3YTVoTUgKZHg2Q0JheGF3bUt1VFZLL2Q3
13+
VU9wRmRQRnhLbjJzU0l1RzZwWUlyOHJFTHF0ZU1EUnRVa2ZYUUtBWFl4NlJRVAphYmgvSlZ3ODB2
14+
OFJkaEs1YVRQTld3dlZ6RFpHek9VcTBjQkV2dmdjbG5PQzFqYnE4bEFyMzJlZzQvWXkyRWJpCjV2
15+
MkoydVBlNlE9PQpQcml2YXRlLUxpbmVzOiAyOApBQUFDQUYvalRSU1NKK0RaNkRSRDMxcVAwZm9o
16+
QUtzbjNUaEFqL3Jyakg2blRyd2Z1dXUvZmI0OGd5MDdsTlBTCkVGNTlHTURBUXozVGl4and4N2Uv
17+
WVlZbHB0NExHSU56ajhYTXIzYktNeFlWSlNlbEF2bHVWR3BpMEVRRDZIc2kKTHRJSlp6TkhRYjBk
18+
U1lZenNySnBOREFJS2kvalBNOVVmWFBDbDVabmhvWHJJSWprSnFKTlltK0pZV0FmelNONQpDQkZC
19+
UENDUXRrcWs1V3hYYVB3WlVYcExQekZWL3dqMTBRUlJ2V0IzNE1WajAwckp0SVF6K2w5NGNDbEla
20+
bm5uCjh3MFF0TkJ6UXhqaVhLd0tWRTNDY040WkNsMWp3cTNCeWMwNkdZN21ueFEyU1hYUEwwRGNr
21+
S2E0Sm1MZUw1S24KY3J6UmJFSWVFZUQzdWhGelUzSTByRU5RUmg2NjlJcHJhamZSekxjRnhuQzcz
22+
QlMxUlR5Y2ZwZFNHRk9QWFQvMgpOZDM2MlhTZXA2Vk54U3Q1YTZ3a1dnSEpoMkg4ZFBjbmlESDFE
23+
bXJBZFA5N0FrZWkxbG1YcWJ6Q0lWOXBpZDNtCmZNQUpiSm00UmhRcFREdmV1RThOaUJnSTYyVGt3
24+
dWNvVzJ5M0xkU3YxMzdpSkJuSlNjMTFHOUE1YkcyeVFYRTIKYWlYUXhIeW9UMlF0VmY1WklYUmFW
25+
THViUW5jU2dMQmpnQ2QxQ2xqQjVqbFJZTXRTYzhiRmEvVEo1b1hPVk10QwpYNHhhcVo3Z3JHS05C
26+
cUJsRFRXblRnWk1tdndQVnVjbGU3MjgzNk9KUFhvMUxqM0sza21yeEMxdU5HMDc2My96CmJLOWl2
27+
QWF1SFRMMnQ0cHkra0k0NC9ZcERvR2sybnhsV01kRDNMM0pVeDNRejlMeEFBQUJBUURiVG94anFO
28+
UHIKRk9aYlg5M3g2TjU1SVdOQ1VLdXFMMVZLNjFESGFLWGZpaXdIRHlRYjEzUnhPREk2RlNXMElI
29+
eVpqMDh5ZjBTVApJRjlzWU1BcDcvRktRTkRJalVWcjFSNmdERWdBdytjeS9naXlqMFVscUhNc2dU
30+
UnNnSmEvSjJQYnViRDRWMzdZClJEOHpwdmtLZjhTSjBiUWpRMGlMdGFDVWJvQVA1ZmFhWGxJS3Zl
31+
Mnh6S3VYM09Jdk0zTyt1UTBJMDZqZGtMc2IKQUcxL2dBOXpiZmltcEx3SUJCZFVJenY3aEUyajhi
32+
aGpPR201U0lOa3M0WWVUTlRWV2R4ZnI3Yi8wVlFPSXJDdwpEUCsrQmhjOTdkK1g3WVVVZFFIM1Bw
33+
U1dyVm9KTnNITXB1VFpoaXdDZ0ZNTU9UWEhHVmxqRThyZ2RlU2xQc2dCCjFzUWh4clJTTUIrZkFB
34+
QUJBUUROdGU0KzFubFlLVjZFUVl4cnlKVUFLT3RNS0pmQTVYUlRzc1hoc0V5UjAwcS8KV2N3dHJm
35+
ZjM1dzdmQVhCVndlTnplZWl5cGV2SnNZZ1JwQXU5T01ZdHdYRUJWNUYreUlCUWtpRzE3YlNlei9z
36+
YgpueW9pV1U2QkFYR2JkQ2pmYTRlVUVURnpiY2xqdEtsZ0FCUkdqV0Q3UEZPNldmcEFqUXBjamFR
37+
cElUNlh6WGZ1CmZXZ3RsbkZrV3lQZFd6Skw0MldZQ3pjYVNySlNGS2Z6TkR2bVIzc25ZTmRwdWxN
38+
WlBLZUZ2bWUyVFpqdVRSUkUKN3U4S1pGeFBqUGQrQThHYW5Cck5QaWpQY0lxNUphQ1p6TDM1ZGhp
39+
WHBiQkMyUzJYeXJLcG1jK1hKUTgycWVPdwpkNmU5b0pWMTNQN0pTc1lhRWp2UVR5TnI2QTZuNDgy
40+
L3FtUmR1MVIzQUFBQkFRQ1c4emFSOU9lTzFwM1hpMTRYCjkwM245Y2NjUlVwZEw4RlJQNnkxaStU
41+
WmY3ZFJaZWt5bVg2Rm1Pam0wL25vVzNIcGVaMmJiRGlBUERadVc0ZlEKbWdaMGd6bG9kRENlSnZQ
42+
cXZTUXNRZUhKNGMyR3NUbjFUczMzWFNUVnhVS3d3amxGdkxqbzJCQXZpQWhmd2FDdwpSbFRoaWtH
43+
L0J0LzBtWE5tMXpwcVlucUFzWldvcmo5VVZBNjJPVzgxQ1VYMS9kVTFrY1JBaWNjbFFsak5TRFhi
44+
CnppYlU3am91enNDM0VVRURwbUdkbVRRWHhYc0I1MVVOaHl5VmgyZ0FWcUMwMDJtSndnRVVzanBx
45+
c2FMNk03M2EKejgzODhvRHBYYnAxQ0tMRHloOHZKcElOSDBqTk5kRDF3V29BUlFlSHMvTmJRRktR
46+
OElOSXZQc1p6MFpHZkc3Lwp1UytKClByaXZhdGUtTUFDOiBmMjY3ZTM0MzYwOTViZDc5OWYwNzQw
47+
NDExZmJhMDM0YzZjOWNiN2VhYzk1ZDg4NDk3ZGVlYmMxNGZjZWQ0ZDU2Cg==

‎test/tests/clone.js‎

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ var assert = require("assert");
33
var fse = require("fs-extra");
44
var local = path.join.bind(path, __dirname);
55
var _ = require("lodash");
6-
const util = require("util");
7-
const exec = util.promisify(require("child_process").exec);
86

97

108
const generatePathWithLength = (base, length) => {
@@ -237,62 +235,6 @@ describe("Clone", function() {
237235
});
238236
});
239237

240-
if (process.platform === "win32") {
241-
it("can clone with ssh using old agent with sha1 signing support only",
242-
async function () {
243-
var pageant = local("../../vendor/pageant.exe");
244-
var old_pageant = local("../../vendor/pageant_sha1.exe");
245-
var privateKey = local("../../vendor/private.ppk");
246-
var test = this;
247-
var url = "git@github.com:nodegit/test.git";
248-
var opts = {
249-
fetchOpts: {
250-
callbacks: {
251-
certificateCheck: () => 0,
252-
credentials: function(url, userName) {
253-
return NodeGit.Credential.sshKeyFromAgent(userName);
254-
}
255-
}
256-
}
257-
};
258-
259-
try {
260-
await exec("taskkill /im pageant.exe /f /t");
261-
} catch (e) {
262-
try {
263-
await exec("taskkill /im pageant_sha1.exe /f /t");
264-
} catch(e) {}
265-
}
266-
try {
267-
await exec(`powershell -command "Start-Process ${old_pageant} ${privateKey}`);
268-
} catch (e) {
269-
try {
270-
await exec(`powershell -command "Start-Process ${pageant} ${privateKey}`);
271-
} catch (e) {}
272-
return assert.fail("Cannot run old pageant");
273-
}
274-
275-
try {
276-
const repo = await Clone(url, clonePath, opts);
277-
test.repository = repo;
278-
} catch(e) {
279-
return assert.fail("Clone error: " + e.message);
280-
}
281-
282-
try {
283-
await exec("taskkill /im pageant_sha1.exe /f /t");
284-
} catch(e) {}
285-
286-
try {
287-
await exec(`powershell -command "Start-Process ${pageant} ${privateKey}`);
288-
} catch (e) {
289-
return assert.fail("Cannot run pageant");
290-
}
291-
292-
return assert.ok(test.repository instanceof Repository);
293-
});
294-
}
295-
296238
it("can clone with ssh", function() {
297239
var test = this;
298240
var url = "git@github.com:nodegit/test.git";

‎utils/acquireOpenSSL.mjs‎

Lines changed: 13 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { createWriteStream, promises as fs } from "fs";
1010
import { performance } from "perf_hooks";
1111
import { promisify } from "util";
1212

13+
import { hostArch, targetArch } from "./buildFlags.js";
14+
1315
const pipeline = promisify(stream.pipeline);
1416

1517
import packageJson from '../package.json' with { type: "json" };
@@ -22,26 +24,6 @@ const extractPath = path.join(vendorPath, "openssl");
2224

2325
const exists = (filePath) => fs.stat(filePath).then(() => true).catch(() => false);
2426

25-
const convertArch = (archStr) => {
26-
const convertedArch = {
27-
'ia32': 'x86',
28-
'x86': 'x86',
29-
'x64': 'x64',
30-
'arm64': 'arm64'
31-
}[archStr];
32-
33-
if (!convertedArch) {
34-
throw new Error('unsupported architecture');
35-
}
36-
37-
return convertedArch;
38-
}
39-
40-
const hostArch = convertArch(process.arch);
41-
const targetArch = process.env.npm_config_arch
42-
? convertArch(process.env.npm_config_arch)
43-
: hostArch;
44-
4527
const pathsToIncludeForPackage = [
4628
"include", "lib"
4729
];
@@ -152,20 +134,13 @@ const buildLinux = async (buildCwd) => {
152134

153135
const configureArgs = [
154136
buildConfig,
155-
// Electron(at least on centos7) imports the libcups library at runtime, which has a
156-
// dependency on the system libssl/libcrypto which causes symbol conflicts and segfaults.
157-
// To fix this we need to hide all the openssl symbols to prevent them from being overridden
158-
// by the runtime linker.
159-
// "-fvisibility=hidden",
160-
// compile static libraries
161-
"no-shared",
162-
// disable ssl2, ssl3, and compression
163-
"no-ssl2",
137+
// disable ssl3, and compression
164138
"no-ssl3",
165139
"no-comp",
166140
// set install directory
167141
`--prefix="${extractPath}"`,
168-
`--openssldir="${extractPath}"`
142+
`--openssldir="${extractPath}"`,
143+
"--libdir=lib",
169144
];
170145
await execPromise(`./Configure ${configureArgs.join(" ")}`, {
171146
cwd: buildCwd
@@ -175,12 +150,16 @@ const buildLinux = async (buildCwd) => {
175150

176151
// only build the libraries, not the fuzzer or apps
177152
await execPromise("make build_libs", {
178-
cwd: buildCwd
153+
cwd: buildCwd,
154+
maxBuffer: 10 * 1024 * 1024
179155
}, { pipeOutput: true });
180156

181-
await execPromise("make test", {
182-
cwd: buildCwd
183-
}, { pipeOutput: true });
157+
if (hostArch === targetArch) {
158+
await execPromise("make test", {
159+
cwd: buildCwd,
160+
maxBuffer: 10 * 1024 * 1024
161+
}, { pipeOutput: true });
162+
}
184163

185164
// only install software, not the docs
186165
await execPromise("make install_sw", {
@@ -341,11 +320,6 @@ const buildOpenSSLIfNecessary = async ({
341320
return;
342321
}
343322

344-
if (process.platform === "linux" && process.env.NODEGIT_OPENSSL_STATIC_LINK !== "1") {
345-
console.log(`Skipping OpenSSL build, NODEGIT_OPENSSL_STATIC_LINK !== 1`);
346-
return;
347-
}
348-
349323
await removeOpenSSLIfOudated(openSSLVersion);
350324

351325
try {
@@ -396,11 +370,6 @@ const downloadOpenSSLIfNecessary = async ({
396370
return;
397371
}
398372

399-
if (process.platform === "linux" && process.env.NODEGIT_OPENSSL_STATIC_LINK !== "1") {
400-
console.log(`Skipping OpenSSL download, NODEGIT_OPENSSL_STATIC_LINK !== 1`);
401-
return;
402-
}
403-
404373
try {
405374
await fs.stat(extractPath);
406375
console.log("Skipping OpenSSL download, dir exists");

‎utils/buildFlags.js‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,29 @@ try {
1010
isGitRepo = false;
1111
}
1212

13+
const convertArch = (archStr) => {
14+
const convertedArch = {
15+
'ia32': 'x86',
16+
'x86': 'x86',
17+
'x64': 'x64',
18+
'arm64': 'arm64'
19+
}[archStr];
20+
21+
if (!convertedArch) {
22+
throw new Error('unsupported architecture');
23+
}
24+
25+
return convertedArch;
26+
}
27+
28+
const hostArch = convertArch(process.arch);
29+
const targetArch = process.env.npm_config_arch
30+
? convertArch(process.env.npm_config_arch)
31+
: hostArch;
32+
1333
module.exports = {
34+
hostArch,
35+
targetArch,
1436
debugBuild: !!process.env.BUILD_DEBUG,
1537
isElectron: process.env.npm_config_runtime === "electron",
1638
isGitRepo: isGitRepo,

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL