{"_id":"isubo","_rev":"27-c3d6eae0cce22f586278013cd827fd91","time":{"created":"2023-07-06T01:22:52.913Z","0.0.10-0":"2023-07-04T23:25:55.456Z","modified":"2023-09-15T12:43:31.339Z","0.0.11-beta.1":"2023-07-06T01:22:53.145Z","0.0.11-alpha.0":"2023-07-06T01:36:45.668Z","0.0.11-alpha.1":"2023-07-06T03:24:45.169Z","0.0.11-alpha.2":"2023-07-06T03:35:12.840Z","0.0.11-alpha.4":"2023-07-09T10:11:50.914Z","0.0.11-alpha.5":"2023-07-11T08:50:30.548Z","0.0.11-alpha.6":"2023-07-11T09:10:13.964Z","0.0.11-alpha.7":"2023-07-12T10:51:47.863Z","0.0.11-alpha.8":"2023-07-12T11:12:32.260Z","0.0.11-alpha.9":"2023-07-28T12:23:57.041Z","0.0.11-alpha.10":"2023-07-29T13:09:47.991Z","0.0.11-alpha.11":"2023-07-31T03:31:01.494Z","0.0.11-alpha.12":"2023-07-31T06:27:37.990Z","0.0.11-alpha.13":"2023-08-05T13:23:50.551Z","0.0.11-beta.0":"2023-08-06T13:27:11.657Z","0.0.11":"2023-08-09T15:22:31.769Z","0.0.12-alpha.0":"2023-08-19T18:35:49.926Z","0.0.12-alpha.1":"2023-09-06T10:03:03.559Z","0.0.12-alpha.2":"2023-09-07T13:14:04.254Z","0.0.12-alpha.3":"2023-09-08T09:42:36.197Z","0.0.12-alpha.4":"2023-09-08T13:49:29.074Z","0.0.12-alpha.5":"2023-09-08T15:13:13.348Z","0.0.12-alpha.6":"2023-09-08T21:22:39.452Z","0.0.12-alpha.7":"2023-09-09T02:15:18.717Z","0.0.12-alpha.8":"2023-09-10T21:54:06.259Z","0.0.12-beta.0":"2023-09-15T12:43:31.177Z"},"name":"isubo","dist-tags":{"latest":"0.0.11","alpha":"0.0.12-alpha.8","beta":"0.0.12-beta.0"},"versions":{"0.0.11-beta.1":{"name":"isubo","version":"0.0.11-beta.1","description":"deploy posts are written in markdown to github issue","main":"dist/index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"0ee29c92b93a83bfb6d90ddacbae4344ba44a3e5","_id":"isubo@0.0.11-beta.1","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-l/imnWoQ3pBQJr2m6F69t21Sb3eTFRYYTiKJnsUNsE0vatd76lnuC74Hin+O9i7cZ8NagG2zqdUlMjI4kHZyGQ==","shasum":"a1fb897f757c10663f05a41f7592dc47f55818d0","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-beta.1.tgz","fileCount":12,"unpackedSize":452994,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNNrDg1W/xKW/LWILkEY5ceNnko4yZxuorW9e3mBr3uAIhAKSFInhp2XW1fDh1ySONdAsZn8YOUquwJuxB910qXiwb"}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-beta.1_1688606572913_0.8227833929586839"},"_hasShrinkwrap":false},"0.0.11-alpha.0":{"name":"isubo","version":"0.0.11-alpha.0","description":"deploy posts are written in markdown to github issue","main":"dist/index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 友情链接\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"83f2144ea79d003f18df535af0435bce72fa9a56","_id":"isubo@0.0.11-alpha.0","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-OsazV2WAQy8wvoyl3m9QLHfHL/3QuG1ZcN7gpBfSw0bOxCVndl6kq8bd4usG9BE9ccMLf09ziRi+BW2NEWAWIQ==","shasum":"f51c3191ed03ed51080b0737de3b62f8e011720e","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.0.tgz","fileCount":12,"unpackedSize":452995,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID8K+C2stSEEdBjj3qHvYftl4B4SR7Quvwy1oHef0aTQAiA9uhov2kvke8MEiuauSCyWLP9pEqkplI4an2lUFpwgxA=="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.0_1688607405384_0.6901682730035619"},"_hasShrinkwrap":false},"0.0.11-alpha.1":{"name":"isubo","version":"0.0.11-alpha.1","description":"deploy posts are written in markdown to github issue","main":"dist/index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 友情链接\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"785994313d5d2ee6eaf8784706cb0026d4b4060d","_id":"isubo@0.0.11-alpha.1","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-flzwWAr1bK/TyTflvIU2uxsqc1aa/ri9txDk//7PB49ibOWAj6BEn+Xod+7T/TD76zIZcjPSRRDgLc4YSWwVKQ==","shasum":"3cc6963b6cb5c17384b9194cfe95018667ed6404","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.1.tgz","fileCount":7,"unpackedSize":53634,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMjSTuJxyP6Utfm81deIgOBvgVLePKcZkGf0bWgX9wNgIgD6LykFlJL0nxk/HZb404nb4Xhp/KG9uMYJV4C87Xixo="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.1_1688613885046_0.4463360717128506"},"_hasShrinkwrap":false},"0.0.11-alpha.2":{"name":"isubo","version":"0.0.11-alpha.2","description":"deploy posts are written in markdown to github issue","main":"dist/index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"90ffe27f864246f1bb27da69a3a729190fe81954","_id":"isubo@0.0.11-alpha.2","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-DkfdWFZaJzqjkuWiH2UOPhYHgWurnIFRq85OxvdYG51CCEkil/8/iDDOtVuvFJ421O5oR/J6QiIsk9GlcwaODw==","shasum":"a02d8b6278f521efb553b42d9f609c0c8d9b8d6e","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.2.tgz","fileCount":8,"unpackedSize":57275,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYi6p+gHStH/9Noeou+54adMLwnThRxGCqoRE+gToG0AiA0I++AmuTMPfncYr5sAucVzHohvVUX3PSNS9mJUHBpWQ=="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.2_1688614512662_0.9425538032643932"},"_hasShrinkwrap":false},"0.0.11-alpha.4":{"name":"isubo","version":"0.0.11-alpha.4","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"291129beffa75a1720efdf6997db76b8e8df3940","_id":"isubo@0.0.11-alpha.4","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-fzzdF/bEv70bjAMcXJxQBT+5r3v9Zf5Z45bpSnAWmTki5F+KeqMgkRJ0vm9zOn8VFEuquuRZh0WkZqqZiJqvyw==","shasum":"c540db29207b29f8d4e5e185a7eda42cb96f89a4","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.4.tgz","fileCount":8,"unpackedSize":60685,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDChsxSepI0L/MDLqkNwVvalpd9szuNOsoUhBJkhV/X/wIgdtN90Cirvs9glFYOwGSdF3J7c/2Bkgj74Ej+iDWcHiA="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.4_1688897510667_0.4719483109669256"},"_hasShrinkwrap":false},"0.0.11-alpha.5":{"name":"isubo","version":"0.0.11-alpha.5","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"afa998cfd94643fdc40bec927bd5bfcff2a882c2","_id":"isubo@0.0.11-alpha.5","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-4iYkPU393KEfhKZXF+OKmYxxYQoSBs3vk0m3yKslpMjtlHrZjiFioR3FRnXdyWYnKgwYuETMDuTNWBTM5t91IQ==","shasum":"e677be254405c50a19e73b497e14676001a8e0d4","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.5.tgz","fileCount":7,"unpackedSize":60688,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbAkH+tvSL0B+kotGYkr+GrVqspmqBRhDTi68VVGt6wQIhAI58x4xQpwEDI1wGd/c+P/lpM5tQ7uaM00sSj5ks12hd"}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.5_1689065430345_0.4212798384368852"},"_hasShrinkwrap":false},"0.0.11-alpha.6":{"name":"isubo","version":"0.0.11-alpha.6","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"e76c4fffd172f6476b9741c0f1658ad6deaec98b","_id":"isubo@0.0.11-alpha.6","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-H4yiO1w+Mio7T3XJ+hN82CTOjIypqhx5MfXGpWKfwiZyqqlllHcMXoaCk6CvZ9sns++PLhLTxXZQfUO0iBxC0Q==","shasum":"8ca1454179697ecae81e73e00fc36201725bb53c","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.6.tgz","fileCount":7,"unpackedSize":60688,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGPpApMyA3WOUbdIDlVI2uUG/ourj4TQzcJbQy+e1KqTAiEA4A3hNT6LMOhLj/V4y0kuHz+DP1057tZXOqJ38YOhftk="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.6_1689066613804_0.12166712570055394"},"_hasShrinkwrap":false},"0.0.11-alpha.7":{"name":"isubo","version":"0.0.11-alpha.7","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"1bfcf070b5e56ad0f8af8ddcaa81cd358805ab51","_id":"isubo@0.0.11-alpha.7","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-A/tBelccPaY2EhPAR6bWtMaB+wsaC4RyzKKzp7Tmt6e6jRqeYe0SJHtMQzvd6GwyYb1PVbaBGpfihCFfIWc5Dg==","shasum":"4022a49790c25bafa6df797215b027a77718bd33","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.7.tgz","fileCount":7,"unpackedSize":61996,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4vLlDDnCqEMiJIcM9av+7nWVV1hAtCi2ruL0YYggJOQIhANaXTim3Dh+vEnsM39oGewnBhD5sE9T85jLGWZKgjNkq"}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.7_1689159107619_0.7776282447285816"},"_hasShrinkwrap":false},"0.0.11-alpha.8":{"name":"isubo","version":"0.0.11-alpha.8","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.dev.config.mjs","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"cd dist && npm publish $1 $2","toc":"markdown-toc $1 --maxdepth=3"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@jest/globals":"^29.5.0","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"cc1daeb75c694aebe87389424722aa072fc1f577","_id":"isubo@0.0.11-alpha.8","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-4AdbNusxkrDjI9KgR1mC7FneGbrG+l0VHu49WUGSaPauN/HvSA8qSeLwZWeB0JKxAQS0AQ1iTY7vc28MUhcErw==","shasum":"9af65c4aed682cf3c8318fe591f5b2292553c263","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.8.tgz","fileCount":7,"unpackedSize":61996,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYX19wzNlQ0hCl5vB3O3Lq/P/o7BGEO58xEdwMDzbJ3QIhAM1c5UWNM5+uHQ6u+ZDD78vJ4qjfBsyK9gpklBmA8Po2"}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.8_1689160352078_0.19029769659928863"},"_hasShrinkwrap":false},"0.0.11-alpha.9":{"name":"isubo","version":"0.0.11-alpha.9","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","build":"rm -rf dist && rollup -c rollup.config.js && sed -i '1i#!/usr/bin/env node' dist/bin/index.js","publish":"node scripts/npm.publish.js","toc":"markdown-toc $1 --maxdepth=3","commitlint":"commitlint --edit","postversion":"git push && git push origin --tags"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@jest/globals":"^29.5.0","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2","standard-version":"^9.5.0"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"e0bfc279d678d55bd5309e6a85969dd8717bb1f2","_id":"isubo@0.0.11-alpha.9","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-1zd8LbzX/hYygBV9q2PFVQv3so4ei3X2GZ3evtomT2H1SbXVHgpUvREdC8keDCZja3TFCvRaCGLOtrFZu656qg==","shasum":"cb255ed1e7313d46c68013ef933392e06520351e","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.9.tgz","fileCount":7,"unpackedSize":64538,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAjsiZx5oxFn1bk25zy903ZslWEvuZOpcveqbiPu7FsAiEAlk3bdHrUl+G31hR+QXoStyu9n3l7tjx606VWuo7lTu0="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.9_1690547036887_0.12004490004316626"},"_hasShrinkwrap":false},"0.0.11-alpha.10":{"name":"isubo","version":"0.0.11-alpha.10","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc":"markdown-toc $1 --maxdepth=3","commitlint":"commitlint --edit"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","nock":"^9.6.1","node-fetch":"^3.3.2","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2","standard-version":"^9.5.0"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"8043cf5fe364e656532f88787fc11e987b383c89","_id":"isubo@0.0.11-alpha.10","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-0ajfPhe6T7CCn4LXfbjIwssl/WZtain00Uyfbyz2i3E28jfvpiA6jb118Rtz5FMIT/mLSDM9vFLrxp/fnOZSEg==","shasum":"5e13db8446d4b3cc205eaf5c44002224c6589679","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.10.tgz","fileCount":7,"unpackedSize":64897,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC+8BbUrwNe2rtnirQeoWgq4iApeCkHb96H1OStimDBGAiEAxQn8ijZFZwmKQLuZ4Jy5ykHmzSHcLfAv2FSKcuhIwl8="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.10_1690636187804_0.8449135774280974"},"_hasShrinkwrap":false},"0.0.11-alpha.11":{"name":"isubo","version":"0.0.11-alpha.11","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc":"markdown-toc $1 --maxdepth=3","commitlint":"commitlint --edit"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","nock":"^9.6.1","node-fetch":"^3.3.2","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2","standard-version":"^9.5.0"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 100 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\nisubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 100 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"7a3640fc21d2ce997f7d73ba292b802c08e99f17","_id":"isubo@0.0.11-alpha.11","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-KUCNOMiMO3n4aNCD8uE8qPZ6Yd4zb8A+JxzpfGSTM4+aBMhwf3w4fpRBzshG6Z6DcCSApyCY0tBXbYC/Xl8Scw==","shasum":"258742e05765998761e29210aec065f87dc511f3","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.11.tgz","fileCount":7,"unpackedSize":64833,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChIduoo9M/s3mFRJ6FSHg+kzx+awmN/ypfs8KvwcTlEgIgCgdPzRddFZ9ObjYIkCM1VrGuMy2X9gXiAGWHKTTefQ0="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.11_1690774261323_0.7483210820758415"},"_hasShrinkwrap":false},"0.0.11-alpha.12":{"name":"isubo","version":"0.0.11-alpha.12","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","progress":"^2.0.3","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","nock":"^9.6.1","node-fetch":"^3.3.2","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2","standard-version":"^9.5.0"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"1c2a354f1ea355241b561e52add64443be923afe","_id":"isubo@0.0.11-alpha.12","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-xVj7Z83NXFlhcY0Rn8CH7FQ+Fsl2VlglBEHmuspezdT6DBv06v1L5OIZ/mhKXhFuKjsB3XJp2htJe1y8mGiqzQ==","shasum":"31a34cdb8bb40dd303d0e3e9180886adba539931","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.12.tgz","fileCount":7,"unpackedSize":65424,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/gGeLZVMpZkKWIOh+mfzfpxhdJ3UqIC1CRw3dsbClPAiBTZ1RgURfqMk3dz3muHeyU0H0q2B4uiOTEU09Er8lZXg=="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.12_1690784857811_0.8910066298204362"},"_hasShrinkwrap":false},"0.0.11-alpha.13":{"name":"isubo","version":"0.0.11-alpha.13","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgun","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","nock":"^9.6.1","node-fetch":"^3.3.2","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/count/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-count\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/directory-file-count/isaaxite/deploy-posts-to-github-issue\" alt=\"files\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/bundlephobia/min/isubo\" alt=\"npm bundle size\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"67433b965610d23a106d3c129a97f4bcab390439","_id":"isubo@0.0.11-alpha.13","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-/8LKs9LSW/s+g8nkaZFue9Y5cZ4s6df6w50LBYUlpKvL8NeU7lgrD5A78TESVe/uGInPLtPGF8C56i1p137YUA==","shasum":"7ca73edb318516b5ce323929acc9f1228b1d6abc","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-alpha.13.tgz","fileCount":7,"unpackedSize":62725,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4f9bEanqVGUkFSXD2Td2yJhNdy/2Rd6LMfeUUld+X9AIhAL5/4SKf42bvceulrzuUJkvUYVQv4QKrgNvGrDESWjok"}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-alpha.13_1691241830378_0.25572001952640266"},"_hasShrinkwrap":false},"0.0.11-beta.0":{"name":"isubo","version":"0.0.11-beta.0","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit"},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgun","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2-alpha.1","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"571e9e6bab9cfdbdfd1fb85284629dfb2dfe4ac3","_id":"isubo@0.0.11-beta.0","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-L2pQkOd67HHLrJMKWWjD1w+QmsM0i3VsIvHzhZdehlqmx186JljEjch8dEIji84KOndWczirrUR/WOjNW0HA5w==","shasum":"cffcf29391c43fb69710bbee1fbd2a11da6637e9","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11-beta.0.tgz","fileCount":7,"unpackedSize":62882,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFHA9+3YAseXB6QL0+dV7Ep2u1n4hrWtnZ6q4To3ISKzAiEA00Q9Z7t1BJax89gpbRskHLUtOaPS+UHns07gAkBMnGo="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11-beta.0_1691328431352_0.2506170742622271"},"_hasShrinkwrap":false},"0.0.11":{"name":"isubo","version":"0.0.11","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2-alpha.1","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"4f771e29f85bd177295e4499f38eb222f42b6b88","_id":"isubo@0.0.11","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-eu6GrdayqjczGRGvws38zWcIxS7SRkAm7e2cT884knN5rSUJOku5BIENVGdPeaszNCn6xjJwRgiUu7FktJ2hrQ==","shasum":"2a28025ea8fc3e756e895b48ef6a53a09ad6e165","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.11.tgz","fileCount":7,"unpackedSize":62966,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtgoCv9ZTgZVo8/Bi2PgUTVOg0Y1tvIxK5jKAjri5/oAiB/U+VcXsC3ih6s4eZhZuqH8xdFUSNWD8KtmZhioIaOPw=="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.11_1691594551552_0.2978564708681206"},"_hasShrinkwrap":false},"0.0.12-alpha.0":{"name":"isubo","version":"0.0.12-alpha.0","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"699fd54b43c4af695be5391319635ab1a5966936","_id":"isubo@0.0.12-alpha.0","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-ieP1/Qcx1nPffOtyjzPD+gTyT8Ts2bk2OMhXlpi5MP6kiucDSCoWZdnh7ncI7oeBumsEeX7YhoGZ+4lxcfcn2A==","shasum":"0725611240616bff043922b4bbd9b96a6e153a7f","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.0.tgz","fileCount":5,"unpackedSize":45357,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFw/IQUwwQiWJQW4X79j4mSLF5ABwLuyhCzHC7Q99tXGAiEAo08Q2+rde1RV8HqbRFDPuV5oWNIVQzUvXT7FiSCmpCA="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.0_1692470149677_0.11527110775637062"},"_hasShrinkwrap":false},"0.0.12-alpha.1":{"name":"isubo","version":"0.0.12-alpha.1","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"141569f00679034ff1ac53d794129c551132baa0","_id":"isubo@0.0.12-alpha.1","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-HVe/fbcmtDuzGzEDX27IjGjR1ncI4TB/f89fhI+a8Kkr4gTEtlRIfwKpSLJvU6U5Hlz8JDUOlj6vWtkRp5IDnA==","shasum":"661f9483c9bb2d8f4b4b7b1a6494334ec722a16b","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.1.tgz","fileCount":5,"unpackedSize":46898,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIELni19Ak5mFfAmMcTxxkDxVa7vPrGbLlACORnF21ZbyAiEA7J/HPsadMDWpb1HJ2oJtuiRcMb9mZWvJhi65Mq2nGhM="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.1_1693994583363_0.4186670897253939"},"_hasShrinkwrap":false},"0.0.12-alpha.2":{"name":"isubo","version":"0.0.12-alpha.2","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"cbea5c460756e887ca2ed2494beace2621c902f6","readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","_id":"isubo@0.0.12-alpha.2","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-NQxIuVykWZeC9qehaXi6zTor8CxTbZTLNodjlRMuN8vrMKfdNc+G0Fr6lYVgUj2uEfaEILF48RmiylJ8r5vMdw==","shasum":"ad7a108f3663bae7912da030d6e20bacee9cd871","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.2.tgz","fileCount":5,"unpackedSize":47461,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLOonr4PW7XlEsjbkqQhcjFCKOjyaC4e4veZxg6X8zGAIgTKnO3gvk3edNyLMBMRJOuz3XWi1HwYLeS4kgMVgLRAs="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.2_1694092444060_0.9831345367931572"},"_hasShrinkwrap":false},"0.0.12-alpha.3":{"name":"isubo","version":"0.0.12-alpha.3","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"npx jest --clearCache && node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"84c12d82516879d0d69cf253158778d53c18b57c","readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","_id":"isubo@0.0.12-alpha.3","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-3JnfnqFFiubnmeZTru8HS82fLF1Fipg4qJioxYH9WZF0IbaffGh4lzu279iMDIlKGNm4rjtR3sq9K29FbKaLxA==","shasum":"5a6b7c949a47e28198b2a048e54becca35ed36d2","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.3.tgz","fileCount":5,"unpackedSize":47515,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhYfqyUYAIUqDsdB8NjEt0o77XV3n5HyZ9dbqsjh5AqgIgYwAz4rz8G5rzEOvTOJtpBwqjUkytOH1ne7YNDGqc9tg="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.3_1694166156001_0.5014415809752111"},"_hasShrinkwrap":false},"0.0.12-alpha.4":{"name":"isubo","version":"0.0.12-alpha.4","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"npx jest --clearCache && node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"b34209135a46eec04f986fc4336190f6cd652cf8","readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","_id":"isubo@0.0.12-alpha.4","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-dzcESS+OJwygQdCtjEPv06ZWV1g8gu0k+92Ps+2DmbeN1N1hlXhuka+FyvNEbKeFKvhFg0rNsYRP9oyGudA6wA==","shasum":"dfc3365be8aa818e4ac6c84dfb8795e0f0a70096","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.4.tgz","fileCount":5,"unpackedSize":48487,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG8WfYyJ75Ba05jjlbBsuhcGewP4k9dKTiQuXbC+H0xQAiAa82o2BGScuHo0EUj0d+F0L59Yus6ePucsYpNljTpd2w=="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.4_1694180968797_0.527403272757692"},"_hasShrinkwrap":false},"0.0.12-alpha.5":{"name":"isubo","version":"0.0.12-alpha.5","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"npx jest --clearCache && node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"fa00e619d69678db1a21a99fad474cfe973891e0","readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","_id":"isubo@0.0.12-alpha.5","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-aKNWoF3i+aKssqeL8/MK2xp4X0sMXy2A5IIEprLuAVEbNOKPwI2STODzWkskQMLIPVKKjmc2XCuCpk/Kco5qnw==","shasum":"c4d0bf2f85bf3d75abcc39e1f82f26ae20f045a6","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.5.tgz","fileCount":5,"unpackedSize":48723,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAyrg1F0omvUah0YEOQoc9Wu30ch6gEZkm4u9ZH21PrFAiEA5xE9cEi7y1fnnLtP4FZI0YgnRoqpauRf9SuIvh0asbk="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.5_1694185993117_0.3138943515215791"},"_hasShrinkwrap":false},"0.0.12-alpha.6":{"name":"isubo","version":"0.0.12-alpha.6","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"npx jest --clearCache && node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","markdown-toc":"^1.2.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"3695ca8d97706a956de778ba9f8ae52a815e3012","readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","_id":"isubo@0.0.12-alpha.6","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-CKIq6qXomNzv8Y5Ee8wlLYWHIF49TCVb6vOhVBsbcLOt/BgCa3Dhi6HD0jkO82b3RYiQheKWaTAp9QmbUYn0WA==","shasum":"8be39d158cca16ef5262efa71c3312b6ef776cbd","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.6.tgz","fileCount":5,"unpackedSize":49178,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEQQnjdGhIrKxJEmoG20u0Vg1VSX+ntoeVJ8yB87FprGAiBtxfNV3imPEubsA8XBxD1GaqH1PlUNF/+Cf8Ej/6zoGQ=="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.6_1694208159225_0.024154047332968442"},"_hasShrinkwrap":false},"0.0.12-alpha.7":{"name":"isubo","version":"0.0.12-alpha.7","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"npx jest --clearCache && node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","markdown-toc":"^1.2.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"4ac5cea8ad57e6ad30218a8fbb1c07b67abc9d67","readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","_id":"isubo@0.0.12-alpha.7","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-lm1QNi1GbkRA9QUP3rk8uiUbzpqfbbPtnpLk3vOuSgHK9ODCyq1oKTpTdbW2etO/VutZ/pPOu2GWyyuCyX82Dw==","shasum":"4f302da80a5c866105f88622406c7655bbc0d4d2","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.7.tgz","fileCount":5,"unpackedSize":50113,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE2aXaLMgnYJM3r7tm3xFbX7OEkdPYNJfRGEDUooFfiQIhAPDePW7e8BGVfHqECwMYM5g40lmD6tiiNZqRcq5CxUUx"}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.7_1694225718421_0.23232491614751605"},"_hasShrinkwrap":false},"0.0.12-alpha.8":{"name":"isubo","version":"0.0.12-alpha.8","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"npx jest --clearCache && node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","markdown-toc":"^1.2.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"gitHead":"835eb19f9c602059e0d5db19811ff78527f6886b","readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Setting required properties in the configuration file just created;\n\n- **Step 3:** Write some posts at `<repo>/source/`;\n\n- **Step 4:** Publish your posts by `isubo publish`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\nUse the below `cmd` to init a configuration file. A file name `isubo.conf.yml` will be created at current directory.It contain several required setting and a lost of optional setting that have default.You can alter theme according to your situation.\n\n```shell\nisubo init-conf\n\nnpx isubo init-conf\n```\n\n### Setting\n\nThere are three required basic setting at the below.They are important info for publish your articles.\n\n#### ❗ owner\n\nRepository owner, Such as `isaaxite` in `isaaxite/blog`.\n\n```yml\nowner: <owner>\n\n# e.g.\nowner: isaaxite\n```\n\n#### ❗ repo\n\nRepository name, refer to `blog` in the example above.Please ensure that this repository has been manually created by you, it will be used to store posts resources, and posts will also be published to this repository's issue.\n\n```yml\nrepo: <repo>\n\n# e.g.\nrepo: blog\n```\n\n#### ❗ token\n\nGithub Token, it will be used to invoked github api to publish posts, you can get it in https://github.com/settings/tokens.\n\n**⚠️ It is strongly recommended not to use plaintext to prevent others from stealing your token.**\n\n*You can try to use environment variables.*\n\n**📝Hint:** If you use an environment variable, please **start with `$`** and use **uppercase letters** for the remaining part to declare,  and isubo will automatically obtain this environment variable.\n\n```yml\ntoken: <token>\n\n# e.g.\n# use an environment variable. [strongly recommended]\ntoken: $GITHUB_TOKEN\n\n# use plaintext. [not recommended]\ntoken: ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W\n```\n\n<details>\n  <summary><strong>How to set environment variables of token name <code>GITHUB_TOKEN</code>?</strong></summary>\n  <blockquote>\n    <br/>\n    <p>📣 The following is an example of setting an environment variable named <code>GITHUB_TOKEN</code></p>\n    <p><strong>View environment variables</strong></p>\n    <pre><code class=\"language-shell\">echo $GITHUB_TOKEN</code></pre>\n    <p><strong>Temporary settings</strong></p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p><strong>Permanent setting</strong></p>\n    <p>❗ step 1: Open the configuration file(zsh: <code>~/.zshrc</code>, bash: <code>~/.bashrc</code>) of your shell tool.Let&#39;s take zsh as an example.</p>\n    <p>❗ step 2: Add the following statement at the bottom of the file content:</p>\n    <pre><code class=\"language-shell\">export GITHUB_TOKEN=&quot;ghp_CMg41ahiAAtNEN_xxxxxxx_sZctu2M5t6W&quot;</code></pre>\n    <p>❗ step 3: Save (Press <code>ESC</code> and then press <code>:</code> then enter <code>wq</code>, and finally press <code>Enter</code>) and execute the following command to reload the configuration.</p>\n    <pre><code class=\"language-shell\">source ~/.zshrc</code></pre>\n    <p>That all! 💪.</p>\n    <br/>\n  </blockquote>\n</details>\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo publish\n\n# partial\nnpx isubo publish\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","_id":"isubo@0.0.12-alpha.8","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-1X+B4r9VuClYWP4yT82oLMyFc/3BD91YaLw7LRoZLtvDR+uDlgixSQDL8tr8ZSObNUwZlB6k/bYZipQl0UhQdQ==","shasum":"e9113ae6f1f99520a86bf1b02224a729c1f281ce","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-alpha.8.tgz","fileCount":5,"unpackedSize":50904,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSis3OJGkO3V4hOxeu+R2vnbwRyLBfFzviaMBb+bFS/QIhALTpxTXIUaUyWddaz5KFv/UAGiAS+UfcRvUy2Kbuu4Dy"}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-alpha.8_1694382846018_0.4133554037926126"},"_hasShrinkwrap":false},"0.0.12-beta.0":{"name":"isubo","version":"0.0.12-beta.0","description":"deploy posts are written in markdown to github issue","main":"index.js","type":"module","bin":{"isubo":"bin/index.js"},"scripts":{"test":"jest","esm-test":"npx jest --clearCache && node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand","only-test":"./jest.js","update-test-reports":"npm run esm-test && (git add ./reports && git commit -m 'chore: update test reports') || git checkout ./reports","toc-for":"node ./scripts/toc-for.js","commitlint":"commitlint --edit","plato-report":"node scripts/plato.report.js","eslint-report":"rm -rf reports/eslint-report.html && npx eslint ./lib ./bin --format=html --output-file=reports/eslint-report.html","static-report":"npm run plato-report && npm run eslint-report","new-version":"git fetch origin main && git checkout main && git pull origin main && npx isubo-version"},"standard-version":{"scripts":{"posttag":"npm run postversion"}},"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"owner":"isaacgan","author":{"name":"isaaxite"},"license":"MIT","bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","dependencies":{"@isubo-org/init-conf":"0.0.2-beta.0","chalk":"^5.2.0","clipboardy":"^3.0.0","fast-glob":"^3.2.12","figlet":"^1.6.0","fs-extra":"^11.1.1","js-yaml":"^4.1.0","markdown-toc":"^1.2.0","octokit":"^2.0.19","ora":"^6.3.1","prompts":"^2.4.2","remark-frontmatter":"^4.0.1","remark-parse":"^10.0.2","remark-stringify":"^10.0.3","simple-git":"^3.19.0","spinnies":"^0.5.1","unified":"^10.1.2","yargs":"^17.7.2"},"devDependencies":{"@babel/cli":"^7.22.10","@babel/core":"^7.22.11","@babel/plugin-transform-class-properties":"^7.22.5","@babel/plugin-transform-optional-chaining":"^7.22.12","@babel/plugin-transform-private-methods":"^7.22.5","@babel/plugin-transform-private-property-in-object":"^7.22.11","@commitlint/cli":"^17.6.6","@commitlint/config-conventional":"^17.6.6","@isubo-org/publish":"0.0.2","@isubo-org/version":"0.0.2-alpha.6","@jest/globals":"^29.5.0","@octokit/request":"^8.1.1","eslint":"^8.47.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-import":"^2.25.2","eslint-stats":"^1.0.1","husky":"^8.0.3","jest":"^29.5.0","jest-html-reporter":"^3.10.0","msw":"^1.2.3","plato":"^1.7.0","rollup":"^3.26.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2"},"readme":"<div align=\"center\">\n  <img src=\"assets/logo.svg\" />\n</div>\n<br/>\n<div align=\"center\">\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\">\n    <img alt=\"GitHub\" src=\"https://img.shields.io/github/license/isaaxite/deploy-posts-to-github-issue\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/top/isaaxite/deploy-posts-to-github-issue\" alt=\"languages-top\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/package-json/v/isaaxite/deploy-posts-to-github-issue\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue\">\n    <img src=\"https://img.shields.io/github/languages/code-size/isaaxite/deploy-posts-to-github-issue\" alt=\"code-size\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/commit-activity/t/isaaxite/deploy-posts-to-github-issue\" alt=\"commit-activity\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/commits/main\">\n    <img src=\"https://img.shields.io/github/last-commit/isaaxite/deploy-posts-to-github-issue\" alt=\"last-commit\">\n  </a>\n  <a href=\"https://github.com/isaaxite/deploy-posts-to-github-issue/issues/new\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Issue-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Report-blue\">\n  </a>\n  <a href=\"https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\">\n    <img alt=\"Static Badge\" src=\"https://img.shields.io/badge/Test-Coverage-blue\">\n  </a>\n</div>\n\n\n# 📑 Overview\n\nAs we known, a lost of developer use github isses as their blog which is so great. However, the bad experience of writing articles on the issue page of github is really hard to describe. And Isubo was born for this 💪.\n\nIsubo is a CLI tool to publish markdown content to github issues. It allows you to focus on writing posts in the local environment to obtain a comfortable experience, and gracefully solve the storage and publishing of posts and resources for you 🤟.\n\n📣 *This is a start-up project, please give me a star, your support is the driving force for my continuous update.*\n\n![](./assets/complete.gif)\n\n🎯 It focuses on:\n\n- **Easy to use:** Just one cmmand (`isubo publish`) to publish posts what you want.\n\n- **Excellent interaction:** Enter the title of the post, Isubo will automatically search for the relevant list, all you need to do is select and confirm.\n\n- **Non-intrusively:** Isubo will search the asset links in the post and format them to full https url non-intrusively.Allows you to write locally so as to get an excellent writing and preview experience, without requiring you to format resource links one by one.\n\n- **Trustworthy:** Nearly 200 test cases to ensure the reliability of the core logic.Every version is published after pass all test cases.\n\n🧀 Its features include:\n\n- **Publish local posts as github issues:** Write posts locally, use `isubo command` to publish, update and force create as issues.\n\n- **Autocomplete resource links:** Format the resource link, no matter what path is used, as long as it exists, it will be formatted as a path relative to the repo directory, and finally get an accessible https link.\n\n- **Assets push:** push the posts and its assets to solve the accessing of resources referenced by issues.\n\n# 💻 Prerequisites\n\n- A valid Github Token.\n\n- At least a Github Reposibility used to publish issues.\n\n- NodeJS environment, node version >= `12.0.0`.\n\n- Only for `Linux` / `Unix`(MacOS) / `WSL`(Windows).\n\n# 📥 Installation\n\n```shell\nnpm i isubo -g\n\npnpm add isubo\n```\n\n# 🚀 Quick Start\n\nThe following is a quick start based on the premise of a new repository. Otherwise, you can Consult the [MANUAL] for Customization.\n\nYou only need the following steps to achieve:\n\n- **Step 1:** Init a configuration file;\n\n- **Step 2:** Write some posts at `<repo>/<source_dir>/`;\n\n- **Step 3:** Publish your posts by `npx isubo`.\n\n\n## 🛠️ Configuration\n\nFist of all, you need to init a configuration file.And setting several required properties include `owner`, `repo` and `token` in the above configuration file.\n\nThen, you can write a post what you want 🎊.\n\n\n### Init\n\nCreate a github reposibility as your issue-blog, clone it at local environment\n\n```shell\ngit clone git@github.com:<owner>/<repo>.git\n```\n\nInit configuration file by `@isubo-org/init-conf` lib.\n\n```shell\nnpx @isubo-org/init-conf\n\n# ~ or ~\npnpm add @isubo-org/init-conf\nnpx isubo-init-conf\n\n# ~ or ~\npnpm add @isubo-org/init-conf\nnode ./node_modules/.bin/isubo-init-conf\n```\n\n![](./assets/init-conf.png)\n\n## ✍️ Writing\n\nThe following is the directory structure used in the default configuration. If you need to change the directory structure, you should consult the [MANUAL].\n\n```shell\n└── <repo dir>\n    ├── isubo.conf.yml\n    ├── ...\n    └── source\n        ├── <post assets>\n        │   ├── pic.webp\n        │   ├── ...\n        │   └── pic.png\n        └── <post title>.md\n\n# e.g.\n└── issue-blog\n    ├── isubo.conf.yml\n    └── source\n        ├── WSL's hosts file is reset\n        │   ├── Snipaste_2023-03-08_16-08-58.png\n        │   └── Snipaste_2023-03-08_16-15-42.png\n        ├── Getting to Know WSL2\n        │   ├── enable-wsl1-windows-10.webp\n        │   └── Snipaste_2023-04-11_18-49-48.png\n        │\n        ├── WSL's hosts file is reset.md\n        └── Getting to Know WSL2.md\n```\n\n- **source**, `source/` is the default source dir, if you need to change that, you can ref [MANUAL > source_dir](MANUAL.md#source_dir).\n\n- **`<post assets>`**, you can set it as global assets dir or dir for a single post. 📣 Note that Each resource file is unique, and the file name should not be repeated.\n\n- **`<post title>`**, in default, you need to set markdown filename with post title.If you want to change that, you should consult the [MANUAL > post_title_seat](MANUAL.md#post_title_seat).\n\n\n\n## 🕹️ Usage\n\nExec the below commands at your local reposibility directory, isubo will return a list of your posts which can be select by pressing `space`.\n\n```shell\n# global\nisubo\n\n# partial\nnpx isubo\n```\n\nSelect posts and Submit, and wait it finish, that all 🌈!\n\n![](./assets/select_posts.gif)\n\n# 🧩 Customization\n\nIsubo can do much more than the feats introduced in the quick start above.You should consult the [MANUAL].\n\n\n# 📄 Test situation\n\n- [Test Report], Nearly 200 test cases.\n\n- [Coverage], Ensure 100% test coverage of the core code.\n\n\n# 📞 Contact\n\nIf you encounter a bug, please open an [issue]().I will handle it as possible as i can.\n\nFor general questions or discussions, you can also use:\n\n- Email: `issaxite@outlook.com`\n\n- Wechat: `isaackam_`\n\n# 🎁 Donate\n\n\n<details open>\n  <summary><strong>Support this reposibility 📣</strong></summary>\n  <blockquote>\n    <br/>\n    <li>Give this repository a free star</li>\n    <li>Let more people know about this project</li>\n    <li>Looking forward to you finding bugs and submitting them to issues to help me improve this project</li>\n    <br/>\n  </blockquote>\n</details>\n\n<details>\n  <summary><strong>Buy me a coffee ☕️</strong></summary>\n  <blockquote>\n    <br/>\n    <img width=\"44%\" src=\"https://isaaxite.github.io/blog/images/alipay.jpg\" />\n    <img width=\"50%\" src=\"https://isaaxite.github.io/blog/images/wechatpay.jpg\" align=\"right\"/>\n    <br/>\n  </blockquote>\n</details>\n\n# 🤟 Links\n\n🔗 [Isaac Kam's Blog]\n\n\n# 📜 Licence\n\n[MIT] @ [isaaxite]\n\n[Isaac Kam's Blog]: https://isaaxite.github.io/blog/\n[MIT]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/LICENSE\n[isaaxite]: https://github.com/isaaxite\n[MANUAL]: https://github.com/isaaxite/deploy-posts-to-github-issue/blob/main/MANUAL.md\n[Test Report]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/test.html\n[Coverage]: https://isaaxite.github.io/deploy-posts-to-github-issue/reports/coverage/index.html\n","readmeFilename":"README.md","gitHead":"13325c107574cd6bd8ca19ad28f74f9bbc93d1c6","_id":"isubo@0.0.12-beta.0","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-LvuKyI2i+8hSyjXbWLnEUFRQYHLEumlw5QghaOSA5kZ/x6Z6iMIMLB0bC9oBQnWKeOUGhFBum9c0JkV1JmAjLw==","shasum":"4b8ca891ed21fc87a7e54e0a62cb9eb272ce2801","tarball":"https://registry.npmjs.org/isubo/-/isubo-0.0.12-beta.0.tgz","fileCount":5,"unpackedSize":43257,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHOWRXp//X9wStNVYv0wt7Xh1/oy07fpW5/vQlzhO1eAiEArF/GOFk7GT8kf2aJ5xI8t52iokxxu2QD/eg7Nawf6vk="}]},"_npmUser":{"name":"isaacgan","email":"issaxite@gmail.com"},"directories":{},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/isubo_0.0.12-beta.0_1694781810959_0.9705667073096815"},"_hasShrinkwrap":false}},"maintainers":[{"name":"isaacgan","email":"issaxite@gmail.com"}],"description":"deploy posts are written in markdown to github issue","homepage":"https://github.com/isaaxite/deploy-posts-to-github-issue#readme","keywords":["markdown","deploy","issue","issue-blog","github","blog","local","cli"],"repository":{"type":"git","url":"git+https://github.com/isaaxite/deploy-posts-to-github-issue.git"},"author":{"name":"isaaxite"},"bugs":{"url":"https://github.com/isaaxite/deploy-posts-to-github-issue/issues"},"license":"MIT","readme":"","readmeFilename":""}