From 64a795f29fee3d6e136c465abddca38e5e47f31d Mon Sep 17 00:00:00 2001 From: cornholio <0@mcornholio.ru> Date: Mon, 2 Sep 2024 20:10:50 +0200 Subject: [PATCH 1/2] Fixing tip links When we migrated to papi, we've introduced a bug, where a tip link with encoded extrinsic was a signed transaction hash instead. Fixed. Another change is upgrading testcontainers that recently got an option of starting container with platform, which finally allows not to compile polkadot container locally. --- README.md | 7 + package.json | 2 +- src/bot-handle-comment.ts | 23 ++- src/tip-opengov.ts | 6 +- src/tip.integration.ts | 74 +++++-- src/tip.ts | 7 +- yarn.lock | 407 +++++++++++++++++++++++++++----------- 7 files changed, 379 insertions(+), 147 deletions(-) diff --git a/README.md b/README.md index 83afb4c..3446f63 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,13 @@ The tests will spin up the local nodes automatically. To run the tests: +Build the application image: +```bash +yarn build":docker +``` + +Then run the tests: + ```bash yarn test:integration ``` diff --git a/package.json b/package.json index 1db31be..d80054f 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "rimraf": "^3.0.2", "rxjs": "^7.8.1", "smee-client": "^1.2.2", - "testcontainers": "^10.2.1", + "testcontainers": "^10.13.0", "ts-jest": "^29.2.4", "typescript": "^5.4.5" }, diff --git a/src/bot-handle-comment.ts b/src/bot-handle-comment.ts index 118aef0..cd32557 100644 --- a/src/bot-handle-comment.ts +++ b/src/bot-handle-comment.ts @@ -7,7 +7,7 @@ import { ss58Address } from "@polkadot-labs/hdkd-helpers"; import { updateBalance } from "./balance"; import { matrixNotifyOnFailure, matrixNotifyOnNewTip } from "./matrix"; import { recordTip } from "./metrics"; -import { tipUser } from "./tip"; +import { tipUser, tipUserLink } from "./tip"; import { updatePolkassemblyPost } from "./tip-opengov"; import { GithubReactionType, State, TipRequest, TipResult } from "./types"; import { formatTipSize, getTipSize, parseContributorAccount } from "./util"; @@ -167,17 +167,16 @@ export const handleTipRequest = async ( )) ) { let createReferendumLink: string | undefined; - // TODO: Broken after PAPI migration. https://github.com/paritytech/substrate-tip-bot/issues/170 - // try { - // const tipLink = await tipUserLink(state, tipRequest); - // if (!tipLink.success) { - // throw new Error(tipLink.errorMessage); - // } - // createReferendumLink = tipLink.extrinsicCreationLink; - // } catch (e) { - // bot.log.error("Failed to encode and create a link to tip referendum creation."); - // bot.log.error(e.message); - // } + try { + const tipLink = await tipUserLink(state, tipRequest); + if (!tipLink.success) { + throw new Error(tipLink.errorMessage); + } + createReferendumLink = tipLink.extrinsicCreationLink; + } catch (e) { + bot.log.error("Failed to encode and create a link to tip referendum creation."); + bot.log.error(e.message); + } let message = `Only members of \`${allowedGitHubOrg}/${allowedGitHubTeam}\` ` + diff --git a/src/tip-opengov.ts b/src/tip-opengov.ts index ad2c0a6..99cc50d 100644 --- a/src/tip-opengov.ts +++ b/src/tip-opengov.ts @@ -9,7 +9,7 @@ import { } from "@polkadot-api/descriptors"; import { ss58Address } from "@polkadot-labs/hdkd-helpers"; import { getDescriptor } from "#src/chain-config"; -import { Binary, PolkadotClient, TxPromise } from "polkadot-api"; +import { Binary, PolkadotClient, Transaction } from "polkadot-api"; import { Probot } from "probot"; import { Polkassembly } from "./polkassembly/polkassembly"; @@ -20,7 +20,7 @@ export async function tipOpenGovReferendumExtrinsic(opts: { client: PolkadotClie | Exclude | { success: true; - referendumExtrinsic: { signAndSubmit: TxPromise<"promise"> }; + referendumExtrinsic: Transaction; proposalByteSize: number; encodedProposal: Binary; track: { track: OpenGovTrack; value: bigint }; @@ -42,7 +42,7 @@ export async function tipOpenGovReferendumExtrinsic(opts: { client: PolkadotClie const enactMoment = TraitsScheduleDispatchTime.After(10); - let referendumExtrinsic: { signAndSubmit: TxPromise<"promise"> }; + let referendumExtrinsic: Transaction; const network: TipNetwork = tipRequest.contributor.account.network; if (network === "westend" || network === "localwestend" || network === "rococo" || network === "localrococo") { const api = client.getTypedApi(getDescriptor(network)); diff --git a/src/tip.integration.ts b/src/tip.integration.ts index d33bfa6..c7714ee 100644 --- a/src/tip.integration.ts +++ b/src/tip.integration.ts @@ -63,6 +63,31 @@ describe("tip", () => { return data.free; }; + const expectTipperMembership = async () => { + await gitHub.forGet("/orgs/tip-bot-org/teams/tip-bot-approvers/memberships/tipper").thenReply( + 200, + JSON.stringify( + fixtures.github.getOrgMembershipPayload({ + login: "tipper", + org: "tip-bot-approvers", + }), + ), + jsonResponseHeaders, + ); + }; + + const expectNoTipperMembership = async () => { + await gitHub.forGet("/orgs/tip-bot-org/teams/tip-bot-approvers/memberships/tipper").thenReply( + 404, + JSON.stringify({ + message: "Not Found", + documentation_url: "https://docs.github.com/rest/teams/members#get-team-membership-for-a-user", + status: "404", + }), + jsonResponseHeaders, + ); + }; + beforeAll(async () => { await fs.mkdir(containterLogsDir, { recursive: true }); @@ -81,6 +106,7 @@ describe("tip", () => { .withNetwork(containerNetwork) .withNetworkAliases("localrococo") .withExposedPorts(9945) + .withPlatform("linux/amd64") .start(), new GenericContainer(`parity/polkadot:${POLKADOT_VERSION}`) .withWaitStrategy(Wait.forListeningPorts()) @@ -90,6 +116,7 @@ describe("tip", () => { .withNetwork(containerNetwork) .withNetworkAliases("localwestend") .withExposedPorts(9945) + .withPlatform("linux/amd64") .start(), mockServer.startMockServer({ name: "GitHub", port: gitHubPort, testCaCertPath }), ]); @@ -199,17 +226,6 @@ describe("tip", () => { await gitHub .forPost("/app/installations/155/access_tokens") .thenReply(200, JSON.stringify(fixtures.github.getAppInstallationTokenPayload()), jsonResponseHeaders); - - await gitHub.forGet("/orgs/tip-bot-org/teams/tip-bot-approvers/memberships/tipper").thenReply( - 200, - JSON.stringify( - fixtures.github.getOrgMembershipPayload({ - login: "tipper", - org: "tip-bot-approvers", - }), - ), - jsonResponseHeaders, - ); }); afterAll(async () => { @@ -235,6 +251,7 @@ describe("tip", () => { }); test.each(tipSizes)("tips a user (%s)", async (tipSize) => { + await expectTipperMembership(); const api = network === "localrococo" ? rococoApi : westendApi; const nextFreeReferendumId = await api.query.Referenda.ReferendumCount.getValue(); await tipUser(appPort, tipSize); @@ -272,6 +289,7 @@ describe("tip", () => { }); test(`huge tip in ${network}`, async () => { + await expectTipperMembership(); const successEndpoint = await gitHub.forPost("/repos/paritytech-stg/testre/issues/4/comments").thenReply( 200, JSON.stringify( @@ -297,6 +315,40 @@ describe("tip", () => { `The requested tip value of '1000000 ${currency}' exceeds the BigTipper track maximum`, ); }); + + test(`tip link in ${network}`, async () => { + await expectNoTipperMembership(); + const successEndpoint = await gitHub.forPost("/repos/paritytech-stg/testre/issues/4/comments").thenReply( + 200, + JSON.stringify( + fixtures.github.getIssueCommentPayload({ + org: "paritytech-stg", + repo: "testre", + comment: { + author: "substrate-tip-bot", + body: "", + id: 4, + }, + }), + ), + ); + + await tipUser(appPort, "small"); + + await until(async () => !(await successEndpoint.isPending()), 500, 50); + + const [request] = await successEndpoint.getSeenRequests(); + const body = (await request.body.getJson()) as { body: string }; + expect(body.body).toContain( + "Only members of `tip-bot-org/tip-bot-approvers` have permission to request the creation of the tip referendum from the bot.", + ); + expect(body.body).toContain(`https://polkadot.js.org/apps/?rpc=ws://localrococo:9945#/`); + + const extrinsicHex = body.body.match(/decode\/(\w+)/)?.[1]; + expect(extrinsicHex).toBeDefined(); + + // TODO: validate the contents of the extrinsic, when such functionality will be available in PAPI + }); }); }); diff --git a/src/tip.ts b/src/tip.ts index c7e8b6e..514265d 100644 --- a/src/tip.ts +++ b/src/tip.ts @@ -61,12 +61,13 @@ export async function tipUserLink( return preparedExtrinsic; } - const { botTipAccount } = state; + const transactionHex = (await preparedExtrinsic.referendumExtrinsic.getEncodedData()).asHex(); - const { txHash } = await preparedExtrinsic.referendumExtrinsic.signAndSubmit(botTipAccount); const polkadotAppsUrl = `https://polkadot.js.org/apps/?rpc=${papiConfig.entries[network].wsUrl}#/`; - const extrinsicCreationLink = `${polkadotAppsUrl}extrinsics/decode/${txHash}`; + const extrinsicCreationLink = `${polkadotAppsUrl}extrinsics/decode/${transactionHex}`; return { success: true, extrinsicCreationLink }; + } catch (e) { + return { success: false, errorMessage: e instanceof Error ? e.stack ?? e.message : String(e) }; } finally { client.destroy(); } diff --git a/yarn.lock b/yarn.lock index cdd2bd4..4c7b753 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1417,6 +1417,13 @@ __metadata: languageName: node linkType: hard +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 + languageName: node + linkType: hard + "@graphql-tools/merge@npm:8.3.1": version: 8.3.1 resolution: "@graphql-tools/merge@npm:8.3.1" @@ -3192,7 +3199,7 @@ __metadata: rimraf: "npm:^3.0.2" rxjs: "npm:^7.8.1" smee-client: "npm:^1.2.2" - testcontainers: "npm:^10.2.1" + testcontainers: "npm:^10.13.0" ts-jest: "npm:^29.2.4" typescript: "npm:^5.4.5" languageName: unknown @@ -3281,6 +3288,27 @@ __metadata: languageName: node linkType: hard +"@types/docker-modem@npm:*": + version: 3.0.6 + resolution: "@types/docker-modem@npm:3.0.6" + dependencies: + "@types/node": "npm:*" + "@types/ssh2": "npm:*" + checksum: 10c0/d3ffd273148bc883ff9b1a972b1f84c1add6d9a197d2f4fc9774db4c814f39c2e51cc649385b55d781c790c16fb0bf9c1f4c62499bd0f372a4b920190919445d + languageName: node + linkType: hard + +"@types/dockerode@npm:^3.3.29": + version: 3.3.31 + resolution: "@types/dockerode@npm:3.3.31" + dependencies: + "@types/docker-modem": "npm:*" + "@types/node": "npm:*" + "@types/ssh2": "npm:*" + checksum: 10c0/e0b85edcb7065c24d6d8140b90ea3be128451d4ef25d44fe07ef653e931f3ff4ce86ba0fbb0d7037f51296eb5055d17d8d3ac373028c9e13861b3baf249578d8 + languageName: node + linkType: hard + "@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.1": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" @@ -3440,6 +3468,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^18.11.18": + version: 18.19.48 + resolution: "@types/node@npm:18.19.48" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/f07fc6636629bf5121d33e532f824470ecd44b14831c486fe11b95aac6c8bf7c838651a4cae82031fbc99888192b84f77e939a2cf27edb20935ed4a6d01d0b5d + languageName: node + linkType: hard + "@types/node@npm:^20.14.12": version: 20.14.13 resolution: "@types/node@npm:20.14.13" @@ -3544,6 +3581,15 @@ __metadata: languageName: node linkType: hard +"@types/ssh2@npm:*": + version: 1.15.1 + resolution: "@types/ssh2@npm:1.15.1" + dependencies: + "@types/node": "npm:^18.11.18" + checksum: 10c0/83c83684e0d620ab940e05c5b7e846eacf6c56761e421dbe6a5a51daa09c82fb71ea4843b792b6e6b2edd0bee8eb665034ffd73978d936b9f008c553bcc38ea7 + languageName: node + linkType: hard + "@types/ssh2@npm:^0.5.48": version: 0.5.52 resolution: "@types/ssh2@npm:0.5.52" @@ -3778,6 +3824,15 @@ __metadata: languageName: node linkType: hard +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + "accepts@npm:~1.3.7": version: 1.3.7 resolution: "accepts@npm:1.3.7" @@ -3942,54 +3997,33 @@ __metadata: languageName: node linkType: hard -"archiver-utils@npm:^2.1.0": - version: 2.1.0 - resolution: "archiver-utils@npm:2.1.0" - dependencies: - glob: "npm:^7.1.4" - graceful-fs: "npm:^4.2.0" - lazystream: "npm:^1.0.0" - lodash.defaults: "npm:^4.2.0" - lodash.difference: "npm:^4.5.0" - lodash.flatten: "npm:^4.4.0" - lodash.isplainobject: "npm:^4.0.6" - lodash.union: "npm:^4.6.0" - normalize-path: "npm:^3.0.0" - readable-stream: "npm:^2.0.0" - checksum: 10c0/6ea5b02e440f3099aff58b18dd384f84ecfe18632e81d26c1011fe7dfdb80ade43d7a06cbf048ef0e9ee0f2c87a80cb24c0f0ac5e3a2c4d67641d6f0d6e36ece - languageName: node - linkType: hard - -"archiver-utils@npm:^3.0.4": - version: 3.0.4 - resolution: "archiver-utils@npm:3.0.4" +"archiver-utils@npm:^5.0.0, archiver-utils@npm:^5.0.2": + version: 5.0.2 + resolution: "archiver-utils@npm:5.0.2" dependencies: - glob: "npm:^7.2.3" + glob: "npm:^10.0.0" graceful-fs: "npm:^4.2.0" + is-stream: "npm:^2.0.1" lazystream: "npm:^1.0.0" - lodash.defaults: "npm:^4.2.0" - lodash.difference: "npm:^4.5.0" - lodash.flatten: "npm:^4.4.0" - lodash.isplainobject: "npm:^4.0.6" - lodash.union: "npm:^4.6.0" + lodash: "npm:^4.17.15" normalize-path: "npm:^3.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10c0/9bb7e271e95ff33bdbdcd6f69f8860e0aeed3fcba352a74f51a626d1c32b404f20e3185d5214f171b24a692471d01702f43874d1a4f0d2e5f57bd0834bc54c14 + readable-stream: "npm:^4.0.0" + checksum: 10c0/3782c5fa9922186aa1a8e41ed0c2867569faa5f15c8e5e6418ea4c1b730b476e21bd68270b3ea457daf459ae23aaea070b2b9f90cf90a59def8dc79b9e4ef538 languageName: node linkType: hard -"archiver@npm:^5.3.1": - version: 5.3.2 - resolution: "archiver@npm:5.3.2" +"archiver@npm:^7.0.1": + version: 7.0.1 + resolution: "archiver@npm:7.0.1" dependencies: - archiver-utils: "npm:^2.1.0" + archiver-utils: "npm:^5.0.2" async: "npm:^3.2.4" - buffer-crc32: "npm:^0.2.1" - readable-stream: "npm:^3.6.0" + buffer-crc32: "npm:^1.0.0" + readable-stream: "npm:^4.0.0" readdir-glob: "npm:^1.1.2" - tar-stream: "npm:^2.2.0" - zip-stream: "npm:^4.1.0" - checksum: 10c0/973384d749b3fa96f44ceda1603a65aaa3f24a267230d69a4df9d7b607d38d3ebc6c18c358af76eb06345b6b331ccb9eca07bd079430226b5afce95de22dfade + tar-stream: "npm:^3.0.0" + zip-stream: "npm:^6.0.1" + checksum: 10c0/02afd87ca16f6184f752db8e26884e6eff911c476812a0e7f7b26c4beb09f06119807f388a8e26ed2558aa8ba9db28646ebd147a4f99e46813b8b43158e1438e languageName: node linkType: hard @@ -4140,10 +4174,10 @@ __metadata: languageName: node linkType: hard -"async-lock@npm:^1.4.0": - version: 1.4.0 - resolution: "async-lock@npm:1.4.0" - checksum: 10c0/a31e78a5fbf3f25117e12c8bf7094791afa23679323940519475614cabc768c92b7846000dd8198401fe58e5ea976081cfcaa195703c7e70ec3190463879e168 +"async-lock@npm:^1.4.1": + version: 1.4.1 + resolution: "async-lock@npm:1.4.1" + checksum: 10c0/f696991c7d894af1dc91abc81cc4f14b3785190a35afb1646d8ab91138238d55cabd83bfdd56c42663a008d72b3dc39493ff83797e550effc577d1ccbde254af languageName: node linkType: hard @@ -4308,6 +4342,49 @@ __metadata: languageName: node linkType: hard +"bare-events@npm:^2.0.0, bare-events@npm:^2.2.0": + version: 2.4.2 + resolution: "bare-events@npm:2.4.2" + checksum: 10c0/09fa923061f31f815e83504e2ed4a8ba87732a01db40a7fae703dbb7eef7f05d99264b5e186074cbe9698213990d1af564c62cca07a5ff88baea8099ad9a6303 + languageName: node + linkType: hard + +"bare-fs@npm:^2.1.1": + version: 2.3.3 + resolution: "bare-fs@npm:2.3.3" + dependencies: + bare-events: "npm:^2.0.0" + bare-path: "npm:^2.0.0" + bare-stream: "npm:^2.0.0" + checksum: 10c0/64a1dbccf748b0652cc27215c452bec1bcd402204c494db60d3891712be58b46331e13f4019ffe78ff35128299a05ad192d51fad5e4e02feae9cc320e96573cd + languageName: node + linkType: hard + +"bare-os@npm:^2.1.0": + version: 2.4.2 + resolution: "bare-os@npm:2.4.2" + checksum: 10c0/c80dc93b4960b39ab7bcc1867e9e4141d33aa51644697a93ce2606a76dd00aec1bd2661e6b1ef2381d79cbf45af5a1739c9e52d72402458f4aa2b51a1443c8ee + languageName: node + linkType: hard + +"bare-path@npm:^2.0.0, bare-path@npm:^2.1.0": + version: 2.1.3 + resolution: "bare-path@npm:2.1.3" + dependencies: + bare-os: "npm:^2.1.0" + checksum: 10c0/35587e177fc8fa5b13fb90bac8779b5ce49c99016d221ddaefe2232d02bd4295d79b941e14ae19fda75ec42a6fe5fb66c07d83ae7ec11462178e66b7be65ca74 + languageName: node + linkType: hard + +"bare-stream@npm:^2.0.0": + version: 2.2.0 + resolution: "bare-stream@npm:2.2.0" + dependencies: + streamx: "npm:^2.18.0" + checksum: 10c0/2c59d5abd5d5c8337f6b090bb5ed6870a96040814a4e36165deccfd0a116094ad526888af676073b0748fb7831fd3d6798da9e687aa699143c453b2b52c9ae0a + languageName: node + linkType: hard + "base-x@npm:^4.0.0": version: 4.0.0 resolution: "base-x@npm:4.0.0" @@ -4566,10 +4643,10 @@ __metadata: languageName: node linkType: hard -"buffer-crc32@npm:^0.2.1, buffer-crc32@npm:^0.2.13": - version: 0.2.13 - resolution: "buffer-crc32@npm:0.2.13" - checksum: 10c0/cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 +"buffer-crc32@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-crc32@npm:1.0.0" + checksum: 10c0/8b86e161cee4bb48d5fa622cbae4c18f25e4857e5203b89e23de59e627ab26beb82d9d7999f2b8de02580165f61f83f997beaf02980cdf06affd175b651921ab languageName: node linkType: hard @@ -4597,6 +4674,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + "buildcheck@npm:~0.0.6": version: 0.0.6 resolution: "buildcheck@npm:0.0.6" @@ -4975,15 +5062,16 @@ __metadata: languageName: node linkType: hard -"compress-commons@npm:^4.1.2": - version: 4.1.2 - resolution: "compress-commons@npm:4.1.2" +"compress-commons@npm:^6.0.2": + version: 6.0.2 + resolution: "compress-commons@npm:6.0.2" dependencies: - buffer-crc32: "npm:^0.2.13" - crc32-stream: "npm:^4.0.2" + crc-32: "npm:^1.2.0" + crc32-stream: "npm:^6.0.0" + is-stream: "npm:^2.0.1" normalize-path: "npm:^3.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10c0/e5fa03cb374ed89028e20226c70481e87286240392d5c6856f4e7fef40605c1892748648e20ed56597d390d76513b1b9bb4dbd658a1bbff41c9fa60107c74d3f + readable-stream: "npm:^4.0.0" + checksum: 10c0/2347031b7c92c8ed5011b07b93ec53b298fa2cd1800897532ac4d4d1aeae06567883f481b6e35f13b65fc31b190c751df6635434d525562f0203fde76f1f0814 languageName: node linkType: hard @@ -5167,13 +5255,13 @@ __metadata: languageName: node linkType: hard -"crc32-stream@npm:^4.0.2": - version: 4.0.3 - resolution: "crc32-stream@npm:4.0.3" +"crc32-stream@npm:^6.0.0": + version: 6.0.0 + resolution: "crc32-stream@npm:6.0.0" dependencies: crc-32: "npm:^1.2.0" - readable-stream: "npm:^3.4.0" - checksum: 10c0/127b0c66a947c54db37054fca86085722140644d3a75ebc61d4477bad19304d2936386b0461e8ee9e1c24b00e804cd7c2e205180e5bcb4632d20eccd60533bc4 + readable-stream: "npm:^4.0.0" + checksum: 10c0/bf9c84571ede2d119c2b4f3a9ef5eeb9ff94b588493c0d3862259af86d3679dcce1c8569dd2b0a6eff2f35f5e2081cc1263b846d2538d4054da78cf34f262a3d languageName: node linkType: hard @@ -5529,12 +5617,12 @@ __metadata: languageName: node linkType: hard -"docker-compose@npm:^0.24.2": - version: 0.24.2 - resolution: "docker-compose@npm:0.24.2" +"docker-compose@npm:^0.24.8": + version: 0.24.8 + resolution: "docker-compose@npm:0.24.8" dependencies: yaml: "npm:^2.2.2" - checksum: 10c0/34a4c7cc393d774eabf6e6d4722ed000cddff02f512e46dc07c541517295c51f658c26deef32c9aec4fe0a16d2b738d063c46ef6aa3cfde6add6463eb9c8c178 + checksum: 10c0/1494389e554fed8aabf9fef24210a641cd2442028b1462d7f68186919f5e75045f7bfb4ccaf47c94ed879dcb63e4d82885c389399f531550c4b244920740b2b3 languageName: node linkType: hard @@ -6360,6 +6448,13 @@ __metadata: languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + "eventemitter3@npm:^3.1.0": version: 3.1.2 resolution: "eventemitter3@npm:3.1.2" @@ -6367,7 +6462,7 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.2.0": +"events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 @@ -6569,7 +6664,7 @@ __metadata: languageName: node linkType: hard -"fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0": +"fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0, fast-fifo@npm:^1.3.2": version: 1.3.2 resolution: "fast-fifo@npm:1.3.2" checksum: 10c0/d53f6f786875e8b0529f784b59b4b05d4b5c31c651710496440006a398389a579c8dbcd2081311478b5bf77f4b0b21de69109c5a4eabea9d8e8783d1eb864e4c @@ -7087,6 +7182,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.0.0": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + "glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.4.1 resolution: "glob@npm:10.4.1" @@ -7116,7 +7227,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.4, glob@npm:^7.2.3": +"glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -7550,7 +7661,7 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13": +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb @@ -7915,7 +8026,7 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^2.0.0": +"is-stream@npm:^2.0.0, is-stream@npm:^2.0.1": version: 2.0.1 resolution: "is-stream@npm:2.0.1" checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 @@ -8983,13 +9094,6 @@ __metadata: languageName: node linkType: hard -"lodash.difference@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.difference@npm:4.5.0" - checksum: 10c0/5d52859218a7df427547ff1fadbc397879709fe6c788b037df7d6d92b676122c92bd35ec85d364edb596b65dfc6573132f420c9b4ee22bb6b9600cd454c90637 - languageName: node - linkType: hard - "lodash.flatten@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flatten@npm:4.4.0" @@ -9074,14 +9178,7 @@ __metadata: languageName: node linkType: hard -"lodash.union@npm:^4.6.0": - version: 4.6.0 - resolution: "lodash.union@npm:4.6.0" - checksum: 10c0/6da7f72d1facd472f6090b49eefff984c9f9179e13172039c0debca6851d21d37d83c7ad5c43af23bd220f184cd80e6897e8e3206509fae491f9068b02ae6319 - languageName: node - linkType: hard - -"lodash@npm:^4.16.4, lodash@npm:^4.17.14, lodash@npm:^4.17.21": +"lodash@npm:^4.16.4, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -10088,6 +10185,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.0 + resolution: "package-json-from-dist@npm:1.0.0" + checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -10655,6 +10759,13 @@ __metadata: languageName: node linkType: hard +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + "prom-client@npm:^14.2.0": version: 14.2.0 resolution: "prom-client@npm:14.2.0" @@ -10695,7 +10806,7 @@ __metadata: languageName: node linkType: hard -"properties-reader@npm:^2.2.0": +"properties-reader@npm:^2.3.0": version: 2.3.0 resolution: "properties-reader@npm:2.3.0" dependencies: @@ -10902,6 +11013,19 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^4.0.0": + version: 4.5.2 + resolution: "readable-stream@npm:4.5.2" + dependencies: + abort-controller: "npm:^3.0.0" + buffer: "npm:^6.0.3" + events: "npm:^3.3.0" + process: "npm:^0.11.10" + string_decoder: "npm:^1.3.0" + checksum: 10c0/a2c80e0e53aabd91d7df0330929e32d0a73219f9477dbbb18472f6fdd6a11a699fc5d172a1beff98d50eae4f1496c950ffa85b7cc2c4c196963f289a5f39275d + languageName: node + linkType: hard + "readdir-glob@npm:^1.1.2": version: 1.1.3 resolution: "readdir-glob@npm:1.1.3" @@ -11110,7 +11234,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -11808,6 +11932,21 @@ __metadata: languageName: node linkType: hard +"streamx@npm:^2.18.0": + version: 2.20.0 + resolution: "streamx@npm:2.20.0" + dependencies: + bare-events: "npm:^2.2.0" + fast-fifo: "npm:^1.3.2" + queue-tick: "npm:^1.0.1" + text-decoder: "npm:^1.1.0" + dependenciesMeta: + bare-events: + optional: true + checksum: 10c0/135d94dca174c0d169416d28449cd6dd6f2c9bb9cf380f73072ba2ec08ab042748b60f522b94badbaef721328313a885a4b6c51c9d4fa6f3538da733c3399831 + languageName: node + linkType: hard + "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -11885,7 +12024,7 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1": +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -12084,14 +12223,20 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^3.0.4": - version: 3.0.4 - resolution: "tar-fs@npm:3.0.4" +"tar-fs@npm:^3.0.6": + version: 3.0.6 + resolution: "tar-fs@npm:3.0.6" dependencies: - mkdirp-classic: "npm:^0.5.2" + bare-fs: "npm:^2.1.1" + bare-path: "npm:^2.1.0" pump: "npm:^3.0.0" tar-stream: "npm:^3.1.5" - checksum: 10c0/120f026d891e5b4f7147a5ae5816e3a9b7f2c5b4ca61714dab3fe1244961607dccca40c11cafc584e625838c57d1308da5bb28b13d70b85ab566bc4c9f1c88b1 + dependenciesMeta: + bare-fs: + optional: true + bare-path: + optional: true + checksum: 10c0/207b7c0f193495668bd9dbad09a0108ce4ffcfec5bce2133f90988cdda5c81fad83c99f963d01e47b565196594f7a17dbd063ae55b97b36268fcc843975278ee languageName: node linkType: hard @@ -12107,7 +12252,7 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^2.0.0, tar-stream@npm:^2.2.0": +"tar-stream@npm:^2.0.0": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" dependencies: @@ -12120,6 +12265,17 @@ __metadata: languageName: node linkType: hard +"tar-stream@npm:^3.0.0": + version: 3.1.7 + resolution: "tar-stream@npm:3.1.7" + dependencies: + b4a: "npm:^1.6.4" + fast-fifo: "npm:^1.2.0" + streamx: "npm:^2.15.0" + checksum: 10c0/a09199d21f8714bd729993ac49b6c8efcb808b544b89f23378ad6ffff6d1cb540878614ba9d4cfec11a64ef39e1a6f009a5398371491eb1fda606ffc7f70f718 + languageName: node + linkType: hard + "tar-stream@npm:^3.1.5": version: 3.1.6 resolution: "tar-stream@npm:3.1.6" @@ -12165,25 +12321,35 @@ __metadata: languageName: node linkType: hard -"testcontainers@npm:^10.2.1": - version: 10.2.1 - resolution: "testcontainers@npm:10.2.1" +"testcontainers@npm:^10.13.0": + version: 10.13.0 + resolution: "testcontainers@npm:10.13.0" dependencies: "@balena/dockerignore": "npm:^1.0.2" - archiver: "npm:^5.3.1" - async-lock: "npm:^1.4.0" + "@types/dockerode": "npm:^3.3.29" + archiver: "npm:^7.0.1" + async-lock: "npm:^1.4.1" byline: "npm:^5.0.0" - debug: "npm:^4.3.4" - docker-compose: "npm:^0.24.2" + debug: "npm:^4.3.5" + docker-compose: "npm:^0.24.8" dockerode: "npm:^3.3.5" get-port: "npm:^5.1.1" - node-fetch: "npm:^2.6.12" proper-lockfile: "npm:^4.1.2" - properties-reader: "npm:^2.2.0" + properties-reader: "npm:^2.3.0" ssh-remote-port-forward: "npm:^1.0.4" - tar-fs: "npm:^3.0.4" - tmp: "npm:^0.2.1" - checksum: 10c0/df66ed9d2dc77b07a5ba6da09958c8363321108768e35f82927e781bd47c6a20b1bbf4520804f62e1410ee2e9b357c3838e13ddf8094ba4bc1a5ae74ad42e62b + tar-fs: "npm:^3.0.6" + tmp: "npm:^0.2.3" + undici: "npm:^5.28.4" + checksum: 10c0/9027c7166395bedb864c8dc638a368b3ac37903c361dbeb52d33fdb97f0819af981df78e8cce763a0328f166832459b06520963f5ae666b78c94ea9c50843674 + languageName: node + linkType: hard + +"text-decoder@npm:^1.1.0": + version: 1.1.1 + resolution: "text-decoder@npm:1.1.1" + dependencies: + b4a: "npm:^1.6.4" + checksum: 10c0/e527d05454b59c0fa77456495de68c88e560a122de3dd28b3ebdbf81828aabeaa7e9bb8054b9eb52bc5029ccb5899ad04f466cbba3c53b2685270599d1710cee languageName: node linkType: hard @@ -12212,12 +12378,10 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.2.1": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: "npm:^3.0.0" - checksum: 10c0/67607aa012059c9ce697bee820ee51bc0f39b29a8766def4f92d3f764d67c7cf9205d537d24e0cb1ce9685c40d4c628ead010910118ea18348666b5c46ed9123 +"tmp@npm:^0.2.3": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 languageName: node linkType: hard @@ -12616,6 +12780,15 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.28.4": + version: 5.28.4 + resolution: "undici@npm:5.28.4" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10c0/08d0f2596553aa0a54ca6e8e9c7f45aef7d042c60918564e3a142d449eda165a80196f6ef19ea2ef2e6446959e293095d8e40af1236f0d67223b06afac5ecad7 + languageName: node + linkType: hard + "unhomoglyph@npm:^1.0.6": version: 1.0.6 resolution: "unhomoglyph@npm:1.0.6" @@ -13147,14 +13320,14 @@ __metadata: languageName: node linkType: hard -"zip-stream@npm:^4.1.0": - version: 4.1.1 - resolution: "zip-stream@npm:4.1.1" +"zip-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "zip-stream@npm:6.0.1" dependencies: - archiver-utils: "npm:^3.0.4" - compress-commons: "npm:^4.1.2" - readable-stream: "npm:^3.6.0" - checksum: 10c0/38f91ca116a38561cf184c29e035e9453b12c30eaf574e0993107a4a5331882b58c9a7f7b97f63910664028089fbde3296d0b3682d1ccb2ad96929e68f1b2b89 + archiver-utils: "npm:^5.0.0" + compress-commons: "npm:^6.0.2" + readable-stream: "npm:^4.0.0" + checksum: 10c0/50f2fb30327fb9d09879abf7ae2493705313adf403e794b030151aaae00009162419d60d0519e807673ec04d442e140c8879ca14314df0a0192de3b233e8f28b languageName: node linkType: hard From 242362adcdab6074f794f14727d62710f65e536d Mon Sep 17 00:00:00 2001 From: Przemek Rzad Date: Tue, 3 Sep 2024 09:44:14 +0200 Subject: [PATCH 2/2] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3446f63..68f367a 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ To run the tests: Build the application image: ```bash -yarn build":docker +yarn build:docker ``` Then run the tests: