diff --git a/.changeset/new-islands-rhyme.md b/.changeset/new-islands-rhyme.md new file mode 100644 index 0000000000..853f0aba77 --- /dev/null +++ b/.changeset/new-islands-rhyme.md @@ -0,0 +1,5 @@ +--- +"@platforma-sdk/workflow-tengo": patch +--- + +fix: xsv converter can be launched in k8s installations. diff --git a/lib/node/pl-client/src/core/client.test.ts b/lib/node/pl-client/src/core/client.test.ts index f16c423ee0..a995daee81 100644 --- a/lib/node/pl-client/src/core/client.test.ts +++ b/lib/node/pl-client/src/core/client.test.ts @@ -1,4 +1,4 @@ -import { getTestClient, getTestClientConf } from "../test/test_config"; +import { getTestAdminClient, getTestAdminClientConf } from "../test/test_config"; import { PlClient } from "./client"; import { PlDriver, PlDriverDefinition } from "./driver"; import { Dispatcher, request } from "undici"; @@ -6,12 +6,12 @@ import { GrpcClientProviderFactory } from "./grpc"; import { test, expect } from "vitest"; test("test client init", async () => { - await getTestClient(undefined); + await getTestAdminClient(undefined); }); test("test client alternative root init", async () => { const aRootName = "test_root"; - const { conf, auth } = await getTestClientConf(); + const { conf, auth } = await getTestAdminClientConf(); await PlClient.init({ ...conf, alternativeRoot: aRootName }, auth); const clientB = await PlClient.init(conf, auth); const result = await clientB.deleteAlternativeRoot(aRootName); @@ -19,7 +19,7 @@ test("test client alternative root init", async () => { }); test("test client init 2", async () => { - await getTestClient(); + await getTestAdminClient(); }); interface SimpleDriver extends PlDriver { @@ -46,7 +46,7 @@ const SimpleDriverDefinition: PlDriverDefinition = { }; test("test driver", async () => { - const client = await getTestClient(); + const client = await getTestAdminClient(); const drv = client.getDriver(SimpleDriverDefinition); expect(await drv.ping()).toEqual("pong"); }); diff --git a/lib/node/pl-client/src/core/ll_client.test.ts b/lib/node/pl-client/src/core/ll_client.test.ts index 94d0644d96..4b30fecd1e 100644 --- a/lib/node/pl-client/src/core/ll_client.test.ts +++ b/lib/node/pl-client/src/core/ll_client.test.ts @@ -3,6 +3,8 @@ import { getTestConfig, plAddressToTestConfig, getTestLLClient, + getTestAdminLLClient, + getTestAdminClient, getTestClientConf, } from "../test/test_config"; import { TxAPI_Open_Request_WritableTx } from "../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api"; @@ -144,7 +146,12 @@ test("test https call via proxy", async () => { }); test("list user resources returns user root", async () => { - const client = await getTestLLClient(); + // PlClient.init() creates the user root via the legacy path (requires admin role). + // After that, listUserResources returns it. + const plClient = await getTestAdminClient(); + await plClient.close(); + + const client = await getTestAdminLLClient(); const responses = await client.listUserResources({ limit: 1 }); // First message is always the user root. diff --git a/lib/node/pl-client/src/core/ll_client.ts b/lib/node/pl-client/src/core/ll_client.ts index 52edb21ac8..8ba6b01e8e 100644 --- a/lib/node/pl-client/src/core/ll_client.ts +++ b/lib/node/pl-client/src/core/ll_client.ts @@ -474,7 +474,7 @@ export class LLPlClient implements WireClientProviderFactory { await cl.getJWTToken( { expiration: { seconds: ttlSeconds, nanos: 0 }, - requestedRole: AuthAPI_GetJWTToken_Role.USER, + requestedRole: AuthAPI_GetJWTToken_Role.ROLE_UNSPECIFIED, }, { meta }, ).response @@ -483,7 +483,7 @@ export class LLPlClient implements WireClientProviderFactory { const headers: Record = {}; if (options?.authorization) headers.authorization = options.authorization; const resp = cl.POST("/v1/auth/jwt-token", { - body: { expiration: `${ttlSeconds}s`, requestedRole: AuthAPI_GetJWTToken_Role.USER }, + body: { expiration: `${ttlSeconds}s`, requestedRole: AuthAPI_GetJWTToken_Role.ROLE_UNSPECIFIED }, headers, }); return notEmpty((await resp).data, "REST: empty response for JWT token request").token; diff --git a/lib/node/pl-client/src/core/ll_transaction.test.ts b/lib/node/pl-client/src/core/ll_transaction.test.ts index c2a3eca09b..d6b890dfce 100644 --- a/lib/node/pl-client/src/core/ll_transaction.test.ts +++ b/lib/node/pl-client/src/core/ll_transaction.test.ts @@ -1,4 +1,4 @@ -import { getTestLLClient } from "../test/test_config"; +import { getTestLLClient, getTestAdminLLClient } from "../test/test_config"; import { TxAPI_Open_Request_WritableTx } from "../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api"; import { createLocalResourceId } from "./types"; import { test, expect } from "vitest"; @@ -79,7 +79,7 @@ test("check timeout error type (passive)", async () => { }); test("check timeout error type (active)", async () => { - const client = await getTestLLClient(); + const client = await getTestAdminLLClient(); const tx = client.createTx(true, { timeout: 500 }); try { @@ -143,7 +143,7 @@ test("check timeout error type (active)", async () => { }); test("check is abort error (active)", async () => { - const client = await getTestLLClient(); + const client = await getTestAdminLLClient(); const tx = client.createTx(true, { abortSignal: AbortSignal.timeout(100) }); try { diff --git a/lib/node/pl-client/src/core/transaction.test.ts b/lib/node/pl-client/src/core/transaction.test.ts index 66d373f69d..fd3ca4aa23 100644 --- a/lib/node/pl-client/src/core/transaction.test.ts +++ b/lib/node/pl-client/src/core/transaction.test.ts @@ -1,4 +1,4 @@ -import { withTempRoot } from "../test/test_config"; +import { withAdminTempRoot } from "../test/test_config"; import { StructTestResource, ValueTestResource } from "../helpers/pl"; import { field, toGlobalFieldId, toGlobalResourceId } from "./transaction"; import { RecoverablePlError } from "./errors"; @@ -7,7 +7,7 @@ import { test, expect } from "vitest"; import { StatefulPromise } from "./StatefulPromise"; test("get field", async () => { - await withTempRoot(async (pl) => { + await withAdminTempRoot(async (pl) => { const [rr0, theField1] = await pl.withWriteTx("resource1", async (tx) => { const r0 = tx.createStruct(StructTestResource); const r1 = tx.createStruct(StructTestResource); @@ -54,7 +54,7 @@ test("get field", async () => { }); test("handle absent resource error", async () => { - await withTempRoot(async (pl) => { + await withAdminTempRoot(async (pl) => { const [rr0, ff0] = await pl.withWriteTx("testCreateResource", async (tx) => { const r0 = tx.createStruct(StructTestResource); const f0 = { resourceId: tx.clientRoot, fieldName: "test0" }; @@ -114,7 +114,7 @@ test("handle absent resource error", async () => { }); test("handle KV storage", async () => { - await withTempRoot(async (pl) => { + await withAdminTempRoot(async (pl) => { await pl.withWriteTx("writeKV", async (tx) => { tx.setKValue(tx.clientRoot, "a", "a"); tx.setKValue(tx.clientRoot, "b", "b"); @@ -151,7 +151,7 @@ test("handle KV storage", async () => { }); test("handle empty KV storage", async () => { - await withTempRoot(async (pl) => { + await withAdminTempRoot(async (pl) => { await pl.withReadTx("testReadIndividualAndList", async (tx) => { expect(await tx.listKeyValuesString(tx.clientRoot)).toEqual([]); }); @@ -159,7 +159,7 @@ test("handle empty KV storage", async () => { }); test("handle KV storage 2", async () => { - await withTempRoot(async (pl) => { + await withAdminTempRoot(async (pl) => { const r1 = await pl.withWriteTx("writeKV", async (tx) => { const rr1 = tx.createEphemeral(StructTestResource); tx.createField(field(rr1, "a"), "Dynamic", rr1); diff --git a/lib/node/pl-client/src/test/test_config.ts b/lib/node/pl-client/src/test/test_config.ts index 0546f56ea9..dca5f78c70 100644 --- a/lib/node/pl-client/src/test/test_config.ts +++ b/lib/node/pl-client/src/test/test_config.ts @@ -19,6 +19,8 @@ export interface TestConfig { test_proxy?: string; test_user?: string; test_password?: string; + test_admin_user?: string; + test_admin_password?: string; } const CONFIG_FILE = "test_config.json"; @@ -44,6 +46,11 @@ export function getTestConfig(): TestConfig { if (process.env.PL_TEST_PROXY !== undefined) conf.test_proxy = process.env.PL_TEST_PROXY; + if (process.env.PL_TEST_ADMIN_USER !== undefined) conf.test_admin_user = process.env.PL_TEST_ADMIN_USER; + + if (process.env.PL_TEST_ADMIN_PASSWORD !== undefined) + conf.test_admin_password = process.env.PL_TEST_ADMIN_PASSWORD; + if (conf.address === undefined) throw new Error( `can't resolve platform address (checked ${CONFIG_FILE} file and PL_ADDRESS environment var)`, @@ -157,6 +164,70 @@ export async function getTestLLClient(confOverrides: Partial = { return await LLPlClient.build({ ...conf, ...confOverrides }, { auth }); } +export async function getTestAdminClientConf(): Promise<{ conf: PlClientConfig; auth: AuthOps }> { + const tConf = getTestConfig(); + + if (tConf.test_admin_user === undefined || tConf.test_admin_password === undefined) + throw new Error( + `No admin auth found in config (${CONFIG_FILE}) or env vars: PL_TEST_ADMIN_USER, PL_TEST_ADMIN_PASSWORD`, + ); + + const plConf = plAddressToTestConfig(tConf.address); + const uClient = await UnauthenticatedPlClient.build(plConf); + const authInformation = await uClient.login(tConf.test_admin_user, tConf.test_admin_password); + + return { + conf: plConf, + auth: { + authInformation, + onUpdate: () => {}, + onAuthError: () => {}, + onUpdateError: () => {}, + }, + }; +} + +export async function getTestAdminLLClient(confOverrides: Partial = {}) { + const { conf, auth } = await getTestAdminClientConf(); + return await LLPlClient.build({ ...conf, ...confOverrides }, { auth }); +} + +export async function getTestAdminClient( + alternativeRoot?: string, + confOverrides: Partial = {}, +) { + const { conf, auth } = await getTestAdminClientConf(); + if (alternativeRoot !== undefined && conf.alternativeRoot !== undefined) + throw new Error("test pl address configured with alternative root"); + return await PlClient.init({ ...conf, ...confOverrides, alternativeRoot }, auth); +} + +export async function withAdminTempRoot(body: (pl: PlClient) => Promise): Promise { + const alternativeRoot = `test_${Date.now()}_${randomUUID()}`; + let altRootId: OptionalResourceId = NullResourceId; + try { + const client = await getTestAdminClient(alternativeRoot); + altRootId = client.clientRoot; + try { + const value = await body(client); + const rawClient = await getTestAdminClient(); + try { + await rawClient.deleteAlternativeRoot(alternativeRoot); + } catch (cleanupErr: any) { + console.warn(`Failed to clean up alternative root ${alternativeRoot}:`, cleanupErr.message); + } finally { + await rawClient.close(); + } + return value; + } finally { + await client.close(); + } + } catch (err: any) { + console.log(`ALTERNATIVE ROOT: ${alternativeRoot} (${resourceIdToString(altRootId)})`); + throw err; + } +} + export async function getTestClient( alternativeRoot?: string, confOverrides: Partial = {}, diff --git a/lib/node/pl-drivers/src/drivers/download_url/driver.test.ts b/lib/node/pl-drivers/src/drivers/download_url/driver.test.ts index 854dea54db..9bf9c8fe4a 100644 --- a/lib/node/pl-drivers/src/drivers/download_url/driver.test.ts +++ b/lib/node/pl-drivers/src/drivers/download_url/driver.test.ts @@ -1,5 +1,6 @@ import { TestHelpers } from "@milaboratories/pl-client"; -import { ConsoleLoggerAdapter, HmacSha256Signer } from "@milaboratories/ts-helpers"; +import { HmacSha256Signer } from "@milaboratories/ts-helpers"; +import type { MiLogger } from "@milaboratories/ts-helpers"; import * as os from "node:os"; import { text } from "node:stream/consumers"; import { Readable } from "node:stream"; @@ -10,9 +11,13 @@ import { DownloadUrlDriver } from "./driver"; import { test, expect } from "vitest"; import { TestTags } from "@milaboratories/build-configs"; +// ponytail: noop logger prevents background TaskProcessor workers from triggering +// vitest's onUserConsoleLog RPC after test ends, which causes EnvironmentTeardownError +const noopLogger: MiLogger = { info: () => {}, warn: () => {}, error: () => {} }; + test("should download a tar archive and extracts its content and then deleted", async () => { await TestHelpers.withTempRoot(async (client) => { - const logger = new ConsoleLoggerAdapter(); + const logger = noopLogger; const dir = await fsp.mkdtemp(path.join(os.tmpdir(), "test1-")); const driver = new DownloadUrlDriver(logger, client.httpDispatcher, dir, genSigner()); @@ -41,6 +46,7 @@ test("should download a tar archive and extracts its content and then deleted", expect(indexJsCode).toContain("use strict"); c.resetState(); + await driver.releaseAll(); await c.awaitChange(); }); }, 45000); @@ -50,7 +56,7 @@ test( { tag: [TestTags.Flaky] }, async () => { await TestHelpers.withTempRoot(async (client) => { - const logger = new ConsoleLoggerAdapter(); + const logger = noopLogger; const dir = await fsp.mkdtemp(path.join(os.tmpdir(), "test1-")); const driver = new DownloadUrlDriver(logger, client.httpDispatcher, dir, genSigner()); @@ -69,6 +75,7 @@ test( expect(url2).not.toBeUndefined(); expect(url2?.error).not.toBeUndefined(); expect(url2?.url).toBeUndefined(); + await driver.releaseAll(); }); }, 60000, @@ -76,7 +83,7 @@ test( test("should abort a downloading process when we reset a state of a computable", async () => { await TestHelpers.withTempRoot(async (client) => { - const logger = new ConsoleLoggerAdapter(); + const logger = noopLogger; const dir = await fsp.mkdtemp(path.join(os.tmpdir(), "test2-")); const driver = new DownloadUrlDriver(logger, client.httpDispatcher, dir, genSigner()); @@ -94,6 +101,7 @@ test("should abort a downloading process when we reset a state of a computable", const url2 = await c.getValue(); expect(url2).toBeUndefined(); + await driver.releaseAll(); }); }); diff --git a/lib/node/pl-drivers/src/drivers/logs.test.ts b/lib/node/pl-drivers/src/drivers/logs.test.ts index c8d68416e8..ce8cdb6fbc 100644 --- a/lib/node/pl-drivers/src/drivers/logs.test.ts +++ b/lib/node/pl-drivers/src/drivers/logs.test.ts @@ -31,7 +31,7 @@ const downloadDriverOps = { const useDocker = process.env.PL_TEST_USE_DOCKER === "true"; vi.setConfig({ - testTimeout: 90000, + testTimeout: 180000, }); test("should get all logs", async () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ea3ee4381..bb6c798233 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,8 +52,8 @@ catalogs: specifier: ^2.0.3 version: 2.0.3 '@platforma-open/milaboratories.software-test-utils': - specifier: ^1.1.6 - version: 1.1.1 + specifier: 1.1.6 + version: 1.1.6 '@protobuf-ts/grpc-transport': specifier: 2.11.1 version: 2.11.1 @@ -800,7 +800,7 @@ importers: devDependencies: '@platforma-open/milaboratories.software-test-utils': specifier: 'catalog:' - version: 1.1.1 + version: 1.1.6 '@platforma-sdk/tengo-builder': specifier: workspace:* version: link:../../../../tools/tengo-builder @@ -1061,7 +1061,7 @@ importers: devDependencies: '@platforma-open/milaboratories.software-test-utils': specifier: 'catalog:' - version: 1.1.1 + version: 1.1.6 '@platforma-sdk/tengo-builder': specifier: workspace:* version: link:../../../../tools/tengo-builder @@ -1344,7 +1344,7 @@ importers: devDependencies: '@platforma-open/milaboratories.software-test-utils': specifier: 'catalog:' - version: 1.1.1 + version: 1.1.6 '@platforma-sdk/tengo-builder': specifier: workspace:* version: link:../../../../tools/tengo-builder @@ -3343,7 +3343,7 @@ importers: version: link:../../lib/node/ts-helpers '@platforma-open/milaboratories.software-test-utils': specifier: 'catalog:' - version: 1.1.1 + version: 1.1.6 '@platforma-sdk/tengo-builder': specifier: workspace:* version: link:../../tools/tengo-builder @@ -5233,15 +5233,18 @@ packages: '@platforma-open/milaboratories.software-conda-empty@1.0.1': resolution: {integrity: sha512-nftT6/lXdHvDu7Wedc3HCXiLrzHrIl7B4/8jRGgP5EAJy4agIrAk95Ht7/DGBzGIqXUkRdgN2XB46LxMWt1l3g==} + '@platforma-open/milaboratories.software-small-binaries.hello-world-py@1.0.10': + resolution: {integrity: sha512-16BGRLIrsVW+YIaXwWLX6Nbm80PS5mQJEclHhjNbRrRTLHPaKI4RygZfBC0lLNzvHBiTXU4Qkh1+WmdovkshDg==} + '@platforma-open/milaboratories.software-small-binaries.hello-world-py@1.0.9': resolution: {integrity: sha512-pCg5NZREkrzBqx7jXv14MQMGWh2nfB9JJMn4MoF0lYJjLGkXpyFyYSVErW8IIvbNHcFLE5tU1pG7zilP/wSPvg==} - '@platforma-open/milaboratories.software-small-binaries.hello-world@1.1.4': - resolution: {integrity: sha512-cN8zSWqn2PzO7xI3XLkWNySEOZ5TACH4zzbgTSnG6lWsqk0z/9gkubvYe4GUVWm2pAlngSw/nEju8CdcD7xmNA==} - '@platforma-open/milaboratories.software-small-binaries.hello-world@1.1.6': resolution: {integrity: sha512-THFReXiKsW7WMhQXBEcYA8luz7ZoWazOzhI9fkoWwHqQNOqfthdeVbmZC4fIwemPkw+KBSDcR8huNW2vIt0o9w==} + '@platforma-open/milaboratories.software-small-binaries.hello-world@1.1.7': + resolution: {integrity: sha512-CqXbfFld2l6Y/8rtcZXRPsa5kqNnaS3QWUxrcfMYwNxultbhLzjZGdqSR7ejV9xRWilXpeg6DdZJIKF3+KDH8g==} + '@platforma-open/milaboratories.software-small-binaries.mnz-client@1.6.4': resolution: {integrity: sha512-rLdqmqbAQgXzgV+bubFwX/f2iCyQeQnHxQKFu7v8FOj/iYcvQjrGrDc7iA6DXfKw1vAVtXxKBU45BmE2LzWKDg==} @@ -5251,35 +5254,35 @@ packages: '@platforma-open/milaboratories.software-small-binaries@2.0.3': resolution: {integrity: sha512-oluTZekUavkbqCnt+2zPGl3tuadRhznp485TxcKT7u7HvlgTXPbJ7KeCvYVTTAFBs5W9KW7GLyX3CtFtpSyg0g==} - '@platforma-open/milaboratories.software-test-utils.docker-images@1.1.0': - resolution: {integrity: sha512-LJyDo1kfM2Cw6TE2mIi04ntLCReRYDGtw2pwAdry9fXXtP/EtGQTw3Sfe5Mq7i/d7Pg9oCpF1behBoH4Nly9Jw==} + '@platforma-open/milaboratories.software-test-utils.docker-images@1.1.2': + resolution: {integrity: sha512-KLih91Biwao8JcIk3J1zwQiHmiAzChgMfmcVqUxXjoipZPSc43OBwqX4x8sarSZCWSzUBLT5bfLWO5VG8kJaRg==} - '@platforma-open/milaboratories.software-test-utils.guided-command@1.1.3': - resolution: {integrity: sha512-v45++DKXrOFmJQBZBiSymF3H1+IG4tFAwp6NYNOm1Ev2qKBsrXCcm0spRSFLuWm3nbZRYuOpIsqzHaNCErmyvA==} + '@platforma-open/milaboratories.software-test-utils.guided-command@1.1.6': + resolution: {integrity: sha512-wzsuP40HBaao04npEI7Diq/5dAhpSZvIJDZzrqWUmJ5UHsEw/3aOE2SASW/W4vWEsu3EBmne0b7HoHVN2KF6Jw==} - '@platforma-open/milaboratories.software-test-utils.java-stub@1.0.5': - resolution: {integrity: sha512-73JkM/EtaRXNFVq+MlFPw1+RQ56ldbuC4spLw2DoKhyP2UStA5kqVUZObyKe9SZpWjJpQ1nDhCCSx4X472We8Q==} + '@platforma-open/milaboratories.software-test-utils.java-stub@1.0.6': + resolution: {integrity: sha512-D3MzMj/6v8ssGRvLbrc4b/rI6iFsKJt83z7UqycvMZLyP9IEGhdcQMdgCpe2JemrR6Mqn+E70BR4zzqD6vB3nA==} - '@platforma-open/milaboratories.software-test-utils.python-stub@1.0.5': - resolution: {integrity: sha512-tGt9KL65zZsCrtzU9szE+9qlsJkE2i99wb2qKCspAq5xxBEBVHI336xrJeAWo7XjdKwlFsLPIEweguprlEew1w==} + '@platforma-open/milaboratories.software-test-utils.python-stub@1.0.6': + resolution: {integrity: sha512-07AXO1UXuQfE2jrPs1UKONTdSujmQu+EZgEEZFZMqQwH2yaHOCGWdmeNSuXCTA/RF3+cPup4W4zMmQw+aTs1Mw==} - '@platforma-open/milaboratories.software-test-utils.read-with-sleep@1.1.3': - resolution: {integrity: sha512-H+DuQ86tsHqv+fKlhcaGkRcg+Yzfesov37qN51TtITFbVYZc9FM5kPHpoXc7QXbPAnXCe4qx1qu3SG3hrcAMbA==} + '@platforma-open/milaboratories.software-test-utils.read-with-sleep@1.1.6': + resolution: {integrity: sha512-8Pg46xK1I+G5NMkQnryTJEAwaq/86tshJ6e7sV9YJfWmeHjiv1jCSUP4bDM5dRNLk/0sKjhEJ4swpZkbe6eJAA==} - '@platforma-open/milaboratories.software-test-utils.runenv-java-stub@1.0.7': - resolution: {integrity: sha512-E+C3meLzp7Alo56S//fQVbtsrHq3IbUX5LfbZIgT9zBoX0r2iM0hj4JZuHDSsvLoCDAPFHFsZ4j4KalJj52seQ==} + '@platforma-open/milaboratories.software-test-utils.runenv-java-stub@1.0.8': + resolution: {integrity: sha512-yuvhpZQ3ErsGJnOhjw285QMfCICM17tmM74mNAQyN0YXFHOs6mLcdL/KMH98SB5Y4dQxIyqGqQJWfYMqZOWHIQ==} - '@platforma-open/milaboratories.software-test-utils.runenv-python-stub@1.0.8': - resolution: {integrity: sha512-/8zTUvq/0WPXVVRnfPw9vlW/4VDljjVHHZ0CV3LvhGyHuGwV2wWxjSV5iZQnBUtUI4RvRSdAgLrLTmh0kYvyKg==} + '@platforma-open/milaboratories.software-test-utils.runenv-python-stub@1.0.9': + resolution: {integrity: sha512-0NjzM+vBOMhN13frMxHoeX5lcKTW0tYrgfIAY0zRprXxluUm/tFm31PYIOI9zPHY6STrExQ3fq5ZJQTAXs7Ckw==} - '@platforma-open/milaboratories.software-test-utils.sleep@1.1.3': - resolution: {integrity: sha512-c/ifFAzIZXuCMIcvcGJu5CxahyII6cJs2K1IxOccuGHMD88UsHKW4+W0F8oJ8jsyML1dx5AR9LTRqnGDVFpyJg==} + '@platforma-open/milaboratories.software-test-utils.sleep@1.1.6': + resolution: {integrity: sha512-Tm/cNLbB82NKiBf84glhALN8gAJIA6S3oAotvTFxlsg7KPGd1Lzt5I0cKol6o8ykZEu19cfpgjhZ5R6iCQWf2Q==} - '@platforma-open/milaboratories.software-test-utils.small-asset@1.1.6': - resolution: {integrity: sha512-bYxb22fq1MkSTq+nucQSsy4b/h/D4PRsZCoKGYEcEstDJwffRo4OZNwG+Oh/Ru+P8w3VRcprK744TPbU/IXFZg==} + '@platforma-open/milaboratories.software-test-utils.small-asset@1.1.7': + resolution: {integrity: sha512-c+ChMmsXglruBhiOABTcrkoRk/guh0Mtp6ZQmYJNKYmNAMfwkV4WsjZbl1sUuh1v5PNw5AdeiRdxkPc6XvIeWw==} - '@platforma-open/milaboratories.software-test-utils@1.1.1': - resolution: {integrity: sha512-hifh8Y27H5F/nGW2zvk1/PV7Qyx7qI5s7CiZsstHbGHAm0+cUEGI09ZcFbFpBfKzdX2Qu73U5BiUPHevGGlpeQ==} + '@platforma-open/milaboratories.software-test-utils@1.1.6': + resolution: {integrity: sha512-J8pfFRfKtwU0YEkYb0mCIP0lqPst0pRfZdZy4Gn0jsJIutLYwPKolLlEdV12ziPBZ1VK73TVRZuRh4O/sM4Now==} '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} @@ -11371,12 +11374,14 @@ snapshots: '@platforma-open/milaboratories.software-conda-empty@1.0.1': {} - '@platforma-open/milaboratories.software-small-binaries.hello-world-py@1.0.9': {} + '@platforma-open/milaboratories.software-small-binaries.hello-world-py@1.0.10': {} - '@platforma-open/milaboratories.software-small-binaries.hello-world@1.1.4': {} + '@platforma-open/milaboratories.software-small-binaries.hello-world-py@1.0.9': {} '@platforma-open/milaboratories.software-small-binaries.hello-world@1.1.6': {} + '@platforma-open/milaboratories.software-small-binaries.hello-world@1.1.7': {} + '@platforma-open/milaboratories.software-small-binaries.mnz-client@1.6.4': {} '@platforma-open/milaboratories.software-small-binaries.table-converter@1.3.4': {} @@ -11388,37 +11393,37 @@ snapshots: '@platforma-open/milaboratories.software-small-binaries.mnz-client': 1.6.4 '@platforma-open/milaboratories.software-small-binaries.table-converter': 1.3.4 - '@platforma-open/milaboratories.software-test-utils.docker-images@1.1.0': {} + '@platforma-open/milaboratories.software-test-utils.docker-images@1.1.2': {} - '@platforma-open/milaboratories.software-test-utils.guided-command@1.1.3': {} + '@platforma-open/milaboratories.software-test-utils.guided-command@1.1.6': {} - '@platforma-open/milaboratories.software-test-utils.java-stub@1.0.5': {} + '@platforma-open/milaboratories.software-test-utils.java-stub@1.0.6': {} - '@platforma-open/milaboratories.software-test-utils.python-stub@1.0.5': {} + '@platforma-open/milaboratories.software-test-utils.python-stub@1.0.6': {} - '@platforma-open/milaboratories.software-test-utils.read-with-sleep@1.1.3': {} + '@platforma-open/milaboratories.software-test-utils.read-with-sleep@1.1.6': {} - '@platforma-open/milaboratories.software-test-utils.runenv-java-stub@1.0.7': {} + '@platforma-open/milaboratories.software-test-utils.runenv-java-stub@1.0.8': {} - '@platforma-open/milaboratories.software-test-utils.runenv-python-stub@1.0.8': {} + '@platforma-open/milaboratories.software-test-utils.runenv-python-stub@1.0.9': {} - '@platforma-open/milaboratories.software-test-utils.sleep@1.1.3': {} + '@platforma-open/milaboratories.software-test-utils.sleep@1.1.6': {} - '@platforma-open/milaboratories.software-test-utils.small-asset@1.1.6': {} + '@platforma-open/milaboratories.software-test-utils.small-asset@1.1.7': {} - '@platforma-open/milaboratories.software-test-utils@1.1.1': + '@platforma-open/milaboratories.software-test-utils@1.1.6': dependencies: - '@platforma-open/milaboratories.software-small-binaries.hello-world': 1.1.4 - '@platforma-open/milaboratories.software-small-binaries.hello-world-py': 1.0.9 - '@platforma-open/milaboratories.software-test-utils.docker-images': 1.1.0 - '@platforma-open/milaboratories.software-test-utils.guided-command': 1.1.3 - '@platforma-open/milaboratories.software-test-utils.java-stub': 1.0.5 - '@platforma-open/milaboratories.software-test-utils.python-stub': 1.0.5 - '@platforma-open/milaboratories.software-test-utils.read-with-sleep': 1.1.3 - '@platforma-open/milaboratories.software-test-utils.runenv-java-stub': 1.0.7 - '@platforma-open/milaboratories.software-test-utils.runenv-python-stub': 1.0.8 - '@platforma-open/milaboratories.software-test-utils.sleep': 1.1.3 - '@platforma-open/milaboratories.software-test-utils.small-asset': 1.1.6 + '@platforma-open/milaboratories.software-small-binaries.hello-world': 1.1.7 + '@platforma-open/milaboratories.software-small-binaries.hello-world-py': 1.0.10 + '@platforma-open/milaboratories.software-test-utils.docker-images': 1.1.2 + '@platforma-open/milaboratories.software-test-utils.guided-command': 1.1.6 + '@platforma-open/milaboratories.software-test-utils.java-stub': 1.0.6 + '@platforma-open/milaboratories.software-test-utils.python-stub': 1.0.6 + '@platforma-open/milaboratories.software-test-utils.read-with-sleep': 1.1.6 + '@platforma-open/milaboratories.software-test-utils.runenv-java-stub': 1.0.8 + '@platforma-open/milaboratories.software-test-utils.runenv-python-stub': 1.0.9 + '@platforma-open/milaboratories.software-test-utils.sleep': 1.1.6 + '@platforma-open/milaboratories.software-test-utils.small-asset': 1.1.7 '@pnpm/config.env-replace@1.1.0': {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 129e254a02..bf41acdcf0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -283,7 +283,7 @@ catalog: "@milaboratories/software-pframes-conv": &pframes-version 2.2.9 "@platforma-open/milaboratories.software-small-binaries": ^2.0.3 - "@platforma-open/milaboratories.software-test-utils": ^1.1.6 + "@platforma-open/milaboratories.software-test-utils": 1.1.6 "@platforma-open/milaboratories.software-conda-empty": ^1.0.1 "@platforma-open/milaboratories.runenv-python-3": 1.7.4 diff --git a/turbo.json b/turbo.json index 4b97414d12..98d5919ba4 100644 --- a/turbo.json +++ b/turbo.json @@ -3,31 +3,54 @@ "tasks": { "fmt": { "outputs": [], - "inputs": ["$TURBO_DEFAULT$"] + "inputs": [ + "$TURBO_DEFAULT$" + ] }, "check": { "outputs": [], - "inputs": ["$TURBO_DEFAULT$"], - "dependsOn": ["^build"] + "inputs": [ + "$TURBO_DEFAULT$" + ], + "dependsOn": [ + "^build" + ] }, "formatter:check": { "outputs": [], - "inputs": ["$TURBO_DEFAULT$"] + "inputs": [ + "$TURBO_DEFAULT$" + ] }, "linter:check": { "outputs": [], - "inputs": ["$TURBO_DEFAULT$"] + "inputs": [ + "$TURBO_DEFAULT$" + ] }, "types:check": { "outputs": [], - "inputs": ["$TURBO_DEFAULT$"], - "dependsOn": ["^build"] + "inputs": [ + "$TURBO_DEFAULT$" + ], + "dependsOn": [ + "^build" + ] }, "build": { - "inputs": ["$TURBO_DEFAULT$"], - "outputs": ["./dist/**", "./block-pack/**", "./pkg-*.tgz"], + "inputs": [ + "$TURBO_DEFAULT$" + ], + "outputs": [ + "./dist/**", + "./block-pack/**", + "./pkg-*.tgz" + ], "env": [], - "dependsOn": ["^build", "types:check"], + "dependsOn": [ + "^build", + "types:check" + ], "passThroughEnv": [ "GENERATE_TAGS", "TAGS_ADDITIONAL_ARGS", @@ -36,20 +59,33 @@ "PL_DOCKER_BUILD", "PL_DOCKER_NO_BUILD", "PL_DOCKER_AUTOPUSH", - "PL_DOCKER_NO_AUTOPUSH" + "PL_DOCKER_NO_AUTOPUSH", + "PL_DOCKER_REGISTRY" ] }, "test": { - "inputs": ["$TURBO_DEFAULT$"], - "env": ["TEST_CACHE_CRUTCH"], - "outputs": ["./coverage/**", "test-report.junit.xml"], - "dependsOn": ["build"], + "inputs": [ + "$TURBO_DEFAULT$" + ], + "env": [ + "TEST_CACHE_CRUTCH" + ], + "outputs": [ + "./coverage/**", + "test-report.junit.xml" + ], + "dependsOn": [ + "build" + ], "passThroughEnv": [ "PL_ADDRESS", "PL_TEST_PASSWORD", "PL_TEST_USER", "PL_TEST_PROXY", + "PL_TEST_ADMIN_USER", + "PL_TEST_ADMIN_PASSWORD", "PL_TEST_STORAGE_ID", + "PL_TEST_USE_DOCKER", "DEBUG", "MI_LICENSE", "PL_DOCKER_REGISTRY_PUSH_TO", @@ -60,9 +96,15 @@ ] }, "do-pack": { - "inputs": ["$TURBO_DEFAULT$"], - "dependsOn": ["build"], - "outputs": ["package.tgz"] + "inputs": [ + "$TURBO_DEFAULT$" + ], + "dependsOn": [ + "build" + ], + "outputs": [ + "package.tgz" + ] } } }