Skip to content

qiita.config.jsonを使って、設定を変更できるようにする #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 37 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,22 @@ npm install @qiita/qiita-cli@latest

## Qiita CLI のセットアップ方法について

### init コマンドを実行する

以下のコマンドを実行することで、

- .gitignore
- GitHub Actions のワークフローファイル
- 「GitHub で記事を管理する」の項目を参照
- ユーザー設定ファイル(qiita.config.json)
- 「ユーザー設定ファイルについて」の項目を参照

が生成されます。

```console
npx qiita init
```

### Qiita のトークンを発行する

以下の流れでトークンを発行してください。
Expand Down Expand Up @@ -161,17 +177,6 @@ Qiita CLI、Qiita Preview から記事の削除はできません。

## GitHub で記事を管理する

以下のコマンドを実行することで、

- .gitignore
- GitHub Actions のワークフローファイル

が生成されます。

```console
npx qiita init
```

### GitHub の設定について

以下の流れで設定を行うことで、GitHub の特定のブランチにコミットしたタイミングで記事の投稿や更新を行うことが可能になります。
Expand Down Expand Up @@ -204,19 +209,37 @@ npx qiita pull

### version

qiita-cli のバージョンを確認できます。
Qiita CLI のバージョンを確認できます。

```console
npx qiita version
```

## ユーザー設定ファイルについて

`npx qiita init`コマンドで生成される`qiita.config.json`について説明します。
このファイルを用いて、Qiita CLI の設定を行うことができます。
設定できるオプションは以下の通りです。

- includePrivate: 限定共有記事を含めるかどうかを選べます。デフォルトは`false`です。

## オプション

### --credential \<credential_dir>

Qiita CLI の認証情報(`credentials.json`)を配置する・しているディレクトリを指定できます。
デフォルトでは`$XDG_CONFIG_HOME/qiita-cli`もしくは`$HOME/.config/qiita-cli`になっています。

```console
npx qiita login ---credential ./my_conf/
npx qiita preview --credential ./my_conf/
```

### --config \<config_dir>

qiita-cli の設定情報(`credentials.json`)を配置する・しているディレクトリを指定できます。
Qiita CLI の設定情報(`qiita.config.json`)を配置する・しているディレクトリを指定できます。

デフォルトでは`$XDG_CONFIG_HOME/qiita-cli`もしくは`$HOME/.config/qiita-cli`になっています
デフォルトでは、カレントディレクトリになります

例)

Expand Down
9 changes: 6 additions & 3 deletions src/commands/help.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,22 @@ COMMAND:
publish <basename> ... 記事を投稿、更新
publish --all 全ての記事を投稿、更新
pull 記事ファイルをQiitaと同期
version qiita-cliのバージョンを表示
version Qiita CLIのバージョンを表示
help ヘルプを表示

OPTIONS:
--config <config_dir>
qiita-cliの設定情報を配置するディレクトリを指定
--credential <credential_dir>
Qiita CLIの認証情報を配置するディレクトリを指定

--root <root_dir>
記事ファイルをダウンロードするディレクトリを指定

--verbose
詳細表示オプションを有効

--config
設定ファイルを配置するディレクトリを指定

詳細についてはReadme(https://github.com/increments/qiita-cli)をご覧ください
`;

Expand Down
13 changes: 13 additions & 0 deletions src/commands/init.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import fs from "node:fs";
import path from "node:path";
import { config } from "../lib/config";

export const init = async () => {
const rootDir = process.cwd();
Expand Down Expand Up @@ -48,6 +49,18 @@ jobs:
node_modules
`;
writeFile(gitignoreFilePath, gitignoreFileContent);

const userConfigFilePath = config.getUserConfigFilePath();
const userConfigDir = config.getUserConfigDir();
if (!fs.existsSync(userConfigFilePath)) {
fs.mkdirSync(userConfigDir, { recursive: true });
}
const userConfigFileContent = JSON.stringify(
await config.getUserConfig(),
null,
2
);
writeFile(userConfigFilePath, userConfigFileContent);
};

const writeFile = (path: string, content: string) => {
Expand Down
113 changes: 108 additions & 5 deletions src/lib/config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,29 +55,37 @@ jest.mock("node:fs/promises", () => {
mkdir: jest.fn(() => {}),
};
});
jest.mock("node:fs", () => {
return {
existsSync: jest.fn((filePath: string): boolean => {
const text = getFile(filePath);
return !!text;
}),
};
});

describe("config", () => {
describe("#getConfigDir", () => {
describe("#getCredentialDir", () => {
beforeEach(() => {
config.load({});
});

it("returns default path", () => {
expect(config.getConfigDir()).toEqual(
expect(config.getCredentialDir()).toEqual(
"/home/test-user/.config/qiita-cli"
);
});

describe("with options", () => {
beforeEach(() => {
config.load({
configDir: "my-config",
credentialDir: "my-credential",
});
});

it("returns customized path", () => {
expect(config.getConfigDir()).toEqual(
"/home/test-user/qiita-articles/my-config"
expect(config.getCredentialDir()).toEqual(
"/home/test-user/qiita-articles/my-credential"
);
});
});
Expand Down Expand Up @@ -111,6 +119,101 @@ describe("config", () => {
});
});

describe("#getUserConfigDir", () => {
describe("paths", () => {
beforeEach(() => {
config.load({});
});

it("returns default path", () => {
expect(config.getUserConfigDir()).toEqual(
"/home/test-user/qiita-articles"
);
});

describe("with options", () => {
beforeEach(() => {
config.load({
userConfigDir: "my-root",
});
});

it("returns customized path", () => {
expect(config.getUserConfigDir()).toEqual(
"/home/test-user/qiita-articles/my-root"
);
});
});
});
});

describe("#getUserConfigFilePath", () => {
describe("paths", () => {
beforeEach(() => {
config.load({});
});

it("returns default path", () => {
expect(config.getUserConfigFilePath()).toEqual(
"/home/test-user/qiita-articles/qiita.config.json"
);
});

describe("with options", () => {
beforeEach(() => {
config.load({
userConfigDir: "my-root",
});
});

it("returns customized path", () => {
expect(config.getUserConfigFilePath()).toEqual(
"/home/test-user/qiita-articles/my-root/qiita.config.json"
);
});
});
});
});

describe("#getUserConfig", () => {
const userConfigFilePath =
"/home/test-user/qiita-articles/qiita.config.json";

beforeEach(() => {
config.load({});
});

describe("when user config file already exists", () => {
beforeEach(() => {
const userConfigData = {
includePrivate: true,
};
resetFiles();
setFile(userConfigFilePath, JSON.stringify(userConfigData, null, 2));
});

it("returns user config", async () => {
const userConfig = await config.getUserConfig();
expect(userConfig).toStrictEqual({
includePrivate: true,
});
});
});

describe("when user config file does not exist", () => {
beforeEach(() => {
resetFiles();
});

it("returns default user config", async () => {
const userConfig = await config.getUserConfig();
expect(userConfig).toStrictEqual({
includePrivate: false,
});
});
});
});

describe("#getCredential", () => {
const credentialFilePath =
"/home/test-user/.config/qiita-cli/credentials.json";
Expand Down
Loading