diff --git a/packages/cli/src/commands/api.ts b/packages/cli/src/commands/api.ts index bc5ae7e..2a5f63f 100644 --- a/packages/cli/src/commands/api.ts +++ b/packages/cli/src/commands/api.ts @@ -1,6 +1,5 @@ import { getClient } from "#utils/client.ts"; import { defineCommand } from "citty"; -import consola from "consola"; /** * Parses a `key=value` field string. Values are auto-converted: @@ -145,13 +144,15 @@ export default defineCommand({ } if (!args.silent) { - consola.log(JSON.stringify(allResults, null, 2)); + const json = process.stdout.isTTY ? JSON.stringify(allResults, null, 2) : JSON.stringify(allResults); + process.stdout.write(`${json}\n`); } } else { const result = await client(endpoint, fetchOptions); if (!args.silent) { - consola.log(JSON.stringify(result, null, 2)); + const json = process.stdout.isTTY ? JSON.stringify(result, null, 2) : JSON.stringify(result); + process.stdout.write(`${json}\n`); } } }, diff --git a/packages/cli/src/commands/space/activities.ts b/packages/cli/src/commands/space/activities.ts index ea758b0..def672f 100644 --- a/packages/cli/src/commands/space/activities.ts +++ b/packages/cli/src/commands/space/activities.ts @@ -3,6 +3,7 @@ import type { SpacesGetActivitiesData } from "@repo/openapi-client"; import { getClient } from "#utils/client.ts"; import { formatDate, getActivityLabel, padEnd } from "#utils/format.ts"; +import { outputArgs, outputResult } from "#utils/output.ts"; import { defineCommand } from "citty"; import consola from "consola"; @@ -12,6 +13,7 @@ export default defineCommand({ description: "Show space activities", }, args: { + ...outputArgs, limit: { type: "string", alias: "L", @@ -38,19 +40,21 @@ export default defineCommand({ query, }); - if (activities.length === 0) { - consola.info("No activities found."); - return; - } + outputResult(activities, args, (data) => { + if (data.length === 0) { + consola.info("No activities found."); + return; + } - const header = `${padEnd("ID", 12)}${padEnd("TYPE", 24)}${padEnd("DATE", 12)}PROJECT`; - consola.log(header); - for (const activity of activities) { - const id = padEnd(`${activity.id}`, 12); - const type = padEnd(getActivityLabel(activity.type), 24); - const date = padEnd(formatDate(activity.created), 12); - const project = activity.project.projectKey; - consola.log(`${id}${type}${date}${project}`); - } + const header = `${padEnd("ID", 12)}${padEnd("TYPE", 24)}${padEnd("DATE", 12)}PROJECT`; + consola.log(header); + for (const activity of data) { + const id = padEnd(`${activity.id}`, 12); + const type = padEnd(getActivityLabel(activity.type), 24); + const date = padEnd(formatDate(activity.created), 12); + const project = activity.project.projectKey; + consola.log(`${id}${type}${date}${project}`); + } + }); }, }); diff --git a/packages/integration-tests/src/commands/config/get-set.test.ts b/packages/integration-tests/src/commands/config/get-set.test.ts index 2339b57..cfb59dc 100644 --- a/packages/integration-tests/src/commands/config/get-set.test.ts +++ b/packages/integration-tests/src/commands/config/get-set.test.ts @@ -3,24 +3,30 @@ import { describe, expect, it } from "vitest"; import { expectSuccess } from "../../helpers/assertions.ts"; import { runCli } from "../../helpers/cli.ts"; +// config get/set operates on global settings (not space-specific). +// BACKLOG_SPACE must be unset to avoid space-specific config lookup/rejection. +const envWithoutSpace = { BACKLOG_SPACE: "" }; + describe("config get/set", () => { it("設定値を取得する", async () => { - const result = await runCli(["config", "get", "default_space"]); + const result = await runCli(["config", "get", "default_space"], { env: envWithoutSpace }); // This may or may not have a value, but should not error expectSuccess(result); }); it("設定値を設定して取得できる", async () => { // Set a test value - const result = await runCli(["config", "set", "default_space", "test-space.backlog.com"]); + const result = await runCli(["config", "set", "default_space", "test-space.backlog.com"], { + env: envWithoutSpace, + }); expectSuccess(result); // Read it back - const getResult = await runCli(["config", "get", "default_space"]); + const getResult = await runCli(["config", "get", "default_space"], { env: envWithoutSpace }); expectSuccess(getResult); expect(getResult.stdout).toContain("test-space.backlog.com"); // Reset - set to empty to clean up - await runCli(["config", "set", "default_space", ""]); + await runCli(["config", "set", "default_space", ""], { env: envWithoutSpace }); }); }); diff --git a/packages/integration-tests/src/commands/project/activities.test.ts b/packages/integration-tests/src/commands/project/activities.test.ts index e66a08f..65d97db 100644 --- a/packages/integration-tests/src/commands/project/activities.test.ts +++ b/packages/integration-tests/src/commands/project/activities.test.ts @@ -8,12 +8,12 @@ describe("project activities", () => { const { project } = getEnv(); it("プロジェクトの活動を表示する", async () => { - const result = await runCliWithRetry(["project", "activities", "-p", project]); + const result = await runCliWithRetry(["project", "activities", project]); expectSuccess(result); }); it("--json でプロジェクト活動を JSON 配列で出力する", async () => { - const result = await runCliWithRetry(["project", "activities", "-p", project, "--json"]); + const result = await runCliWithRetry(["project", "activities", project, "--json"]); expectJsonArray(result); }); }); diff --git a/packages/integration-tests/src/commands/project/users.test.ts b/packages/integration-tests/src/commands/project/users.test.ts index 4dd9904..612e351 100644 --- a/packages/integration-tests/src/commands/project/users.test.ts +++ b/packages/integration-tests/src/commands/project/users.test.ts @@ -8,12 +8,12 @@ describe("project users", () => { const { project } = getEnv(); it("プロジェクトメンバーを表示する", async () => { - const result = await runCliWithRetry(["project", "users", "-p", project]); + const result = await runCliWithRetry(["project", "users", project]); expectSuccess(result); }); it("--json でプロジェクトメンバーを JSON 配列で出力する", async () => { - const result = await runCliWithRetry(["project", "users", "-p", project, "--json"]); + const result = await runCliWithRetry(["project", "users", project, "--json"]); expectJsonArray(result); }); }); diff --git a/packages/integration-tests/src/commands/repo/list.test.ts b/packages/integration-tests/src/commands/repo/list.test.ts index 54a93fb..17d5092 100644 --- a/packages/integration-tests/src/commands/repo/list.test.ts +++ b/packages/integration-tests/src/commands/repo/list.test.ts @@ -8,12 +8,12 @@ describe("repo list", () => { const { project } = getEnv(); it("リポジトリ一覧を表示する", async () => { - const result = await runCliWithRetry(["repo", "list", "-p", project]); + const result = await runCliWithRetry(["repo", "list", project]); expectSuccess(result); }); it("--json でリポジトリ一覧を JSON 配列で出力する", async () => { - const result = await runCliWithRetry(["repo", "list", "-p", project, "--json"]); + const result = await runCliWithRetry(["repo", "list", project, "--json"]); expectJsonArray(result); }); }); diff --git a/packages/integration-tests/vitest.config.ts b/packages/integration-tests/vitest.config.ts index 8d4dd85..e9b118a 100644 --- a/packages/integration-tests/vitest.config.ts +++ b/packages/integration-tests/vitest.config.ts @@ -11,10 +11,6 @@ export default defineConfig({ concurrent: false, }, pool: "forks", - poolOptions: { - forks: { - singleFork: true, - }, - }, + fileParallelism: false, }, });