From c340e1e686267cb59008c1d682034de92a1487ee Mon Sep 17 00:00:00 2001 From: Ben Chidgey Date: Wed, 22 Jan 2025 18:00:03 +0000 Subject: [PATCH 1/2] Fix for issue with private key no longer working as a buffer So with the bump of @octokit/auth-app from v6.* -> v7.* it bumped its own dependency of universal-github-app-jwt from v1.* -> v2.* The universal-github-app-jwt v2 has introduced some work that replaces newlines within private keys - https://github.com/gr2m/universal-github-app-jwt/blob/d52064d3395a02363b6f80afeeb5d91e0a5f2040/index.js#L17 This work looks like it came in in v2.1.1 - https://github.com/gr2m/universal-github-app-jwt/pull/96 Essentially what this means is with the latest version the privateKey must be a string rather than a buffer. This code fixes this issue --- src/helpers/oktokit.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/helpers/oktokit.js b/src/helpers/oktokit.js index 0e93b7af..6986724c 100644 --- a/src/helpers/oktokit.js +++ b/src/helpers/oktokit.js @@ -9,7 +9,10 @@ import { graphql as octokitGraphql } from '@octokit/graphql' const auth = { appId: config.get('github.app.id'), - privateKey: Buffer.from(config.get('github.app.privateKey'), 'base64'), + privateKey: Buffer.from( + config.get('github.app.privateKey'), + 'base64' + ).toString('utf8'), installationId: config.get('github.app.installationId') } From 26fe15a39f1c27db0a3b6238883ac6482f03ab17 Mon Sep 17 00:00:00 2001 From: Ben Chidgey Date: Wed, 22 Jan 2025 18:20:57 +0000 Subject: [PATCH 2/2] Add mock private key for tests --- .jest/setup-env-vars.js | 3 +++ jest.config.js | 1 + 2 files changed, 4 insertions(+) create mode 100644 .jest/setup-env-vars.js diff --git a/.jest/setup-env-vars.js b/.jest/setup-env-vars.js new file mode 100644 index 00000000..2691ba37 --- /dev/null +++ b/.jest/setup-env-vars.js @@ -0,0 +1,3 @@ +// Mock private key - from https://github.com/DEFRA/cdp-local-environment/blob/9dc739301ead62a54e79a85e99b4ccb641dc7b0c/config/cdp-portal-backend.env#L5 +process.env.GITHUB_API_AUTH_APP_PRIVATE_KEY = + 'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBbll1ejQ1M3UwYjBkdG5NYjJUSnh1SVJMekxJS2p2VjVJMnZhem9XeGFFN3d3VnpZCnNGU2tnNzlaSGNWSEt2ZktoSXYwRWtVZmJSbzAwRGpucnRKclZkc2F1TWtNcDFjdEVHZjcyWkVpYUcyRGFNZzkKWG0yUlV4L2dKZnJlS2o2dGcybUsxd292TWQ1S3MvTjhnNXZXck8wbUdPREVYWHVDakw4MkZick9IeUNQQ1VQRApVbEtTc0xMazJnN0I5a1hHOEFsWHdjaVlmSmpMZ3JaQlBzSzhUVTh5cjA3V0ZqMTQ2S2lMN0Q5NGp3cElrNjMwCmFHekwrejZudkIzNFVFZzMwZ1RDMXRWdXkrM3JXN3Q2S0F1REJaK3hYTG9uN3dndXV4NnRoSXFGUVpRcE13SjIKSkdmNXZRNS9nSnZ4YVFQRE8zVTRtRWMxczR2b0hpNGtlNzQxczFGdjdHOENVa0lmY2dlb3lvN0E2RzNUOUs0NwpmKzNyTEhNT2szOVdudHBGa2luZ3pMVTRZK0FHVjQrZFJvV2QvemVjVndOUjcrV1lhQzJBK0JNeHlKOFhJUG9LCncvMk9IZjQ4WTQvQUIxblVSR2ZNOXpvMW5CaGFNZlJZV3ltT3BuSThxNW4rWGlkUjVCaWdmU2lmTGdSQ3RvZnAKaGNJd24wZnhGMHhLbGN4S0tTZkpoOGo4MHAvSUxYTkFzUUc5dm0zWkhxaENQc21OZkVxRUJBb1daS05kRUZ2YQpyakNkQm1hWVVONEl0bUo0NEVQWEsvTi9ScnZxMVJrRmJOd1p4cURoaVlFMm1VK2hMdjgrdXRGUWNSVTdLVWZ3ClZYd0swZkpkU3dnR0ZFMCtFb3RIY0s2Vm9lMXh6d1podThuSHI4bUs1MkwybmJ6bHBQdkJKNzRrSE44Q0F3RUEKQVFLQ0FnQXBIc2tWbkdlMG03RlJLU3M0SGdmN21xQTBMYlkreVFoVXUvWncyQWxOaWVraDl3dGh2cjN2MnpZMQo1SU5tVGlXd1FkMHpGWktWeGZUSjhraGFZM1o3Z3NRdlBkNk5JTjVVdldkSlNxM1o1dGVaTmtaNlNvdlhUK2NQCjBySkJBWG9GWmp0RVZGYXNJL0tJbElGSDBwbU9LaG02L1pPVE9NVUMybmVSNVYrZVZUK3dNZDBkdEFxd2p3algKZDJtZHoybVV4a04vQTAzMW0yWG0ySTRnQlBEa0ZzdEtZWC9VYnpnTE5jN0xtMmRxb2tyK0xMV3h1Yy9sNUYwZwpad3drWEMwaHBuZDZYbHZjWTExK1pHa0dZYmJSZFhSMEdPeUtZYTdjelMySi9pTzQwYVNOT1ZPL3ZkbTd4RGg0ClIzdVRwdFZDeEI1QTlMa3FBMWJTNWNWRS9Ra0R1eEk1cWFUYy9IcjYyVHRweFZUV0RqN0NtazhiekxodE9WNk8KM1lYODJZUHBuSVF3RDNqLytwRDhRSDFLSFdrRk42aDl2VFZZRktaQ3VqRU43LzJNNUNncWV6a2dWRmd2RVVxMQo5UGdnem9WbjZZbkdrM0hpVFZ3UHI0d0ZRcU5GQ3dxUk95VjVVOXJwTksva0Y4WEpvTlkxZHY2bjA4UmNwazE0CnYvSXV1Z2kraHFJVEN0MEpNVjdaVXlYNkJNTEM3b2lSS29JY3ZGTjJNQmxYeEdOWUJ5K2pmTVhVSG5OY1VHNncKdDdWMmFVMll4RDZ4YUJ1VVhjTFJ4MHp2VHQwZjJIZVBVK0UrRVNBNlFtZWl3RkNzNXBoOFhhVzg2VklhTWFDbwpwdzdzN2FJYTVXWGZWQVlHSFNBVG1hdEF6dzQyVjBHSmFGb0V1amhDTk03Y0EzWWdtUUtDQVFFQTJTblpQbGdHClpkaEdlZXloUTc3VHRETkZBQmpTbzJWNkZIZ1pTOWpteHlLd0ZaMEhpOHlDK0xDZDZzdTUvbW90ZlBNRG1LWSsKajlMMVlMcDRsRU5rZm5lT3F3MW1KemdKdkN5ZDZnRnZZaU03SU5IMkgxWFBPNmtMUHN5TjA0cXl2emZya1hzcgpZOG40M0lqSE9RaVNHVTRmNk82SmE2MTE2Tm90SHFzTnpnUHpkUXYvYzR3TEp4YUJxcXZ0WGJKWWRkTzYrSTFZCmFSbkVPYnVvYkxpKzVZMHlFL003OFBpWmg1aEVsczNBUDcwMmpyTkU2SUQ1OW5xM3lsOFFyMkNOUDRVdlR2SisKaSthc1kxN3gvS3hQNXgxNGt4bXo0ai9nVWF0bnF1Z3hhNVBNRElSbHUwSTJhTTh0Uks1d0lVZ2ZmM0EvV2ZXLwplY2s1WkZFVzkzZW1HUUtDQVFFQXViaHc5Q1pvTDVRM3BvUERHQ2pqckVuTndOVU43Y1IxRUlWdGVLeGlmOW82Cm9qd1ZnUXZPTERzcnVzZk1ERkNrU2pSRmIzME1DVWhmVkhXOVp0dlI5WncvTy9kazlEa1pVU0RPbS80djhjcXkKUkI2Q1lvL0x5N3pVMmU3R1dETTBSN25kS3pOVFQwOHVuQ1pzN2ZkZmRCa3JDUWI5dFY4RkpOY1pZN2YxNW1HdAp5V3QwNkt5aWVEVCtpYXJRWlUyVy9pd05DaldEZTVNcGlWVTRLQ3hkcG1rRkMwUExsMVA4b1MwQTRDMzZDYTRRCnVIYWFJT0dhWXhRM0txVmtwQlhnREJZUlhZKzhXcGFmb2lPVDhSUFk0Q2NQUEo5MVdtRy9mUVNzOGI0TlVRcU4KQmFzYjNSTGVxOTJiK2VKOXNUVktDRVZRZW9PREkyK1FrRjJJYXFHSnR3S0NBUUVBbnlBeEZhTytuR1lMems5OApJMzN5OXJvU3QyMTQrMDNpVkpsa1A5V2gxUTB2NWNaNHZ4R09idGhML3I1bGZXMGtBOGkyTythbE5SSXB4MFVjCkVkZ0lEVHRpQ1NqNlQ0YWFhNDV0OEFnNUs3b1JHNDErUVp2SkREaGtDeElzWW5QaFlvaUJUc3JvRW1qdXQvcHAKc1ByOHd4b2grN2ErYjI1ZFZkQjQrMTN2OGFPbmczN1ZJai9kOURoanIwSG4zcDVPZjVnMEN1alhmYnZwc3p3MAp2K1hueTZEWXJ4R3VQSGFOV1hSVDNnVEorR3FYVFoxQ3d2T3ZOZExhVmFtdk9qTVBqUm4wZm03bUYzRmhwRGJ3CkxtdTg2T2NKY1JDR1pTVFZKRUxxNWFyYWU2K0M5ekVVc2xCa09neUZhU3hBOGNJOWdrNG52YTE3THF3cUo3M2IKakYzYUVRS0NBUUF1ZTdaeHRVY3dXV1dRWEx3d3lOTXJKUkhGYU0zaXErQXM4V2hUNHJtSWpJTk9aY0Z3R2hkUgpSTUlPTHNHb2QycVhVL3ZwQ3FBL2xvaWRxQlp1cnlnZTFDdVRnN2tWMDFDOTJIczkyZUlBSDU1OHBESTRId3VBCkE5UTJjNmZiSFgzQlVnakVMa1YwdlRuS1JXZlFLN0VOYXRzMW1EVlo5dDFmdWlLVnJjNXpDaEdvTHlnRXNHaTkKczIzZDRRM2x2UVRFdXh2TWFWWnVVSWY5NG9GNnRKZi85WnNZbGJCWVFPSWpLUk5tQ0x2alBsamJBbnhUTElRcQp0ajJVZys3cmpyb1Q3RllPVjlKcHpmZElhcVUxbXFVV2ZWQTMrU1V6S1BIM2hYc1B5bVNrMndJdTRBUEtVbFcvCktHbElvdUtZdnVDM3J6bVVZR1FyTTFvNGQrQ1Q1N2lEQW9JQkFGdG80S1AyTWpCY2NabFEvbnBrVURFZ2p6MmkKREhLbVBHUU40WVNHTERzOUFZd3pXRmZNWjF1N1BUWlVXaXF0Q2ZpYXIzRE5BM3ZxenViYjRONVJTUm5TdEI4bQo4ZWJuRTNhaXRjMVJpUU9DL0hxYXpZN2dlekY5dUNibk9obGxuZzJEYjA1ejdrQzIwa096cU1ySzQrRXBGaXZSCkpzWEtIU2RvbHowRVFCcEpsT2Zjby9WKzlTK1FZWERlc0xUdUZMUm9yY2JSMkhVRk4zWElhRW0yYWhDZlpqbSsKL1ZFeW9wVnBZUTNsbUtDWWZrZ1pUckNTRG9wVXBZNXRGcGI4QkVYVlk0ZFVtZG5xa0loMlN2K2ZZM1cxV0pxTwoxemQvdm5LTGJMMHdsYU5mQW1IYjEweVY5V3c1aGowYUZWejFFQWh6a1BaM3RKOG45L21rWFd4TGZBYz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K' diff --git a/jest.config.js b/jest.config.js index 02366a42..b7bf45f4 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,6 +8,7 @@ export default { clearMocks: true, silent: false, preset: '@shelf/jest-mongodb', + setupFiles: ['/.jest/setup-env-vars.js'], testMatch: ['**/src/**/*.test.js'], reporters: ['default', ['github-actions', { silent: false }], 'summary'], collectCoverageFrom: ['src/**/*.js'],