Skip to content

Commit 61ee26f

Browse files
authored
feat(config): make openpgp optional (#28581)
1 parent b4e7700 commit 61ee26f

File tree

5 files changed

+71
-11
lines changed

5 files changed

+71
-11
lines changed

lib/config/decrypt/openpgp.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ describe('config/decrypt/openpgp', () => {
1212
let config: RenovateConfig;
1313

1414
beforeEach(() => {
15+
jest.resetModules();
1516
config = {};
1617
GlobalConfig.reset();
1718
});
@@ -118,5 +119,23 @@ describe('config/decrypt/openpgp', () => {
118119
CONFIG_VALIDATION,
119120
);
120121
});
122+
123+
it('fails to load openpgp', async () => {
124+
jest.doMock('../../expose.cjs', () => ({
125+
openpgp: () => {
126+
throw new Error('openpgp error');
127+
},
128+
}));
129+
const pgp = await import('./openpgp');
130+
const { logger } = await import('../../logger');
131+
expect(
132+
await pgp.tryDecryptOpenPgp(
133+
'',
134+
'wcFMAw+4H7SgaqGOAQ/+Lz6RlbEymbnmMhrktuaGiDPWRNPEQFuMRwwYM6/B/r0JMZa9tskAA5RpyYKxGmJJeuRtlA8GkTw02GoZomlJf/KXJZ95FwSbkXMSRJRD8LJ2402Hw2TaOTaSvfamESnm8zhNo8cok627nkKQkyrpk64heVlU5LIbO2+UgYgbiSQjuXZiW+QuJ1hVRjx011FQgEYc59+22yuKYqd8rrni7TrVqhGRlHCAqvNAGjBI4H7uTFh0sP4auunT/JjxTeTkJoNu8KgS/LdrvISpO67TkQziZo9XD5FOzSN7N3e4f8vO4N4fpjgkIDH/9wyEYe0zYz34xMAFlnhZzqrHycRqzBJuMxGqlFQcKWp9IisLMoVJhLrnvbDLuwwcjeqYkhvODjSs7UDKwTE4X4WmvZr0x4kOclOeAAz/pM6oNVnjgWJd9SnYtoa67bZVkne0k6mYjVhosie8v8icijmJ4OyLZUGWnjZCRd/TPkzQUw+B0yvsop9FYGidhCI+4MVx6W5w7SRtCctxVfCjLpmU4kWaBUUJ5YIQ5xm55yxEYuAsQkxOAYDCMFlV8ntWStYwIG1FsBgJX6VPevXuPPMjWiPNedIpJwBH2PLB4blxMfzDYuCeaIqU4daDaEWxxpuFTTK9fLdJKuipwFG6rwE3OuijeSN+2SLszi834DXtUjQdikHSTQG392+oTmZCFPeffLk/OiV2VpdXF3gGL7sr5M9hOWIZ783q0vW1l6nAElZ7UA//kW+L6QRxbnBVTJK5eCmMY6RJmL76zjqC1jQ0FC10',
135+
),
136+
).toBeNull();
137+
expect(logger.warn).toHaveBeenCalled();
138+
expect(logger.once.warn).toHaveBeenCalled();
139+
});
121140
});
122141
});

lib/config/decrypt/openpgp.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import * as openpgp from 'openpgp';
1+
import { openpgp } from '../../expose.cjs';
22
import { logger } from '../../logger';
33
import { regEx } from '../../util/regex';
44

5+
let pgp: typeof import('openpgp') | null | undefined = undefined;
6+
57
export async function tryDecryptOpenPgp(
68
privateKey: string,
79
encryptedStr: string,
@@ -10,8 +12,22 @@ export async function tryDecryptOpenPgp(
1012
// optimization during transition of public key -> pgp
1113
return null;
1214
}
15+
if (pgp === undefined) {
16+
try {
17+
pgp = openpgp();
18+
} catch (err) {
19+
logger.warn({ err }, 'Could load openpgp');
20+
pgp = null;
21+
}
22+
}
23+
24+
if (pgp === null) {
25+
logger.once.warn('Cannot load openpgp, skipping decryption');
26+
return null;
27+
}
28+
1329
try {
14-
const pk = await openpgp.readPrivateKey({
30+
const pk = await pgp.readPrivateKey({
1531
// prettier-ignore
1632
armoredKey: privateKey.replace(regEx(/\n[ \t]+/g), '\n'), // little massage to help a common problem
1733
});
@@ -24,10 +40,10 @@ export async function tryDecryptOpenPgp(
2440
if (!armoredMessage.endsWith(endBlock)) {
2541
armoredMessage = `${armoredMessage}${endBlock}`;
2642
}
27-
const message = await openpgp.readMessage({
43+
const message = await pgp.readMessage({
2844
armoredMessage,
2945
});
30-
const { data } = await openpgp.decrypt({
46+
const { data } = await pgp.decrypt({
3147
message,
3248
decryptionKeys: pk,
3349
});

lib/expose.cjs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,17 @@ function prettier() {
2222
return require('prettier');
2323
}
2424

25-
module.exports = { re2, pkg, prettier };
25+
/**
26+
* return's openpgp
27+
* @returns {typeof import('openpgp')}
28+
*/
29+
function openpgp() {
30+
return require('openpgp');
31+
}
32+
33+
module.exports = {
34+
re2,
35+
pkg,
36+
openpgp,
37+
prettier,
38+
};

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,6 @@
222222
"ms": "2.1.3",
223223
"nanoid": "3.3.7",
224224
"node-html-parser": "6.1.13",
225-
"openpgp": "5.11.1",
226225
"p-all": "3.0.0",
227226
"p-map": "4.0.0",
228227
"p-queue": "6.6.2",
@@ -251,6 +250,7 @@
251250
"zod": "3.22.4"
252251
},
253252
"optionalDependencies": {
253+
"openpgp": "5.11.1",
254254
"re2": "1.20.10"
255255
},
256256
"devDependencies": {
@@ -350,7 +350,9 @@
350350
"dist",
351351
"renovate-schema.json"
352352
],
353-
"pnpm":{
354-
"neverBuiltDependencies": ["dtrace-provider"]
353+
"pnpm": {
354+
"neverBuiltDependencies": [
355+
"dtrace-provider"
356+
]
355357
}
356358
}

pnpm-lock.yaml

Lines changed: 13 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)