From 86fc5b3595f5b47ba40d8574f24f20b097f400a0 Mon Sep 17 00:00:00 2001 From: frostime Date: Fri, 19 May 2023 20:18:04 +0800 Subject: [PATCH] README --- README.md | 161 +++++++++++++++++++++++++++++++-------- asset/action.png | Bin 0 -> 42301 bytes plugin.json | 12 +-- scripts/make_dev_link.py | 14 ++-- 4 files changed, 142 insertions(+), 45 deletions(-) create mode 100644 asset/action.png diff --git a/README.md b/README.md index 4d45209..bf93aa9 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,158 @@ -# plugin-sample-vite-svelte -SiYuan plugin sample with vite and svelte. +# SiYuan plugin sample with vite and svelte -## Introduction - -This plugin is a community third-party plug-in development template, in addition to the official development template provides a basic level of functionality, has the following features: - -1. based on vite package project, support for hot-loading, in dev mode whether the code or i18n changes can be automatically tracked -2. soft linking instead of putting the project into the plugins directory program development, you can feel free to develop multiple projects in the same workspace at the same time, and do not worry about accidentally deleting the project code in the source -3. built-in support for the svelte framework, compared to react, vue and other virtual DOM-based solutions, svelte such compiled framework is more suitable for plug-in development of such lightweight scenarios -4. provides a github action template to automatically generate package.zip and upload to new release -5. pre-packaged siyuan.d.ts module, no need to manually replace the siyuan module under the node_module -6. Provide with api.ts and sy-dtype.d.ts +1. Using vite for packaging +2. Use soft linking instead of putting the project into the plugins directory program development +3. Built-in support for the svelte framework +4. Provides a github action template to automatically generate package.zip and upload to new release -## Template usage +## Get started -1. Use Template +1. Make a copy of this repo as a template with the Use this template button, please note that the repo name must be the same as the plugin name, the default branch must be main -2. Clone to local +2. Clone your repo to a local development folder at any place + - Notice: we **don't recommand** you to place the folder under your {workspace}/data/plugins/ folder. 3. Create development soft links - - Create the dev directory - - Run the ``scripts/make_dev_link.py`` script, passing in the absolute path to the plugins directory, e.g. + - It is recommended to create a symbolic link between your development directory and the plugins directory. + - If you have python environment in you device, run the command `python scripts/make_dev_link.py ` script, `` is the absolute path to the plugins directory, e.g. ```powershell - >> sudo python . \scripts\make_dev_link.py H:\temporary folder\SiYuanDevSpace\data\plugins - Folder already exists, exit + >>> sudo python . \scripts\make_dev_link.py "H:\SiYuanDevSpace\data\plugins" + Symlink created: H:\SiYuanDevSpace\data\plugins\plugin-sample ``` - - - You may need sudo to run it, I installed sudo myself on windows via scoop and can run it directly that way, normal windows users can first open the command line as administrator and then run it. + - You may need to run it as administration, normal windows users can first open the command line as administrator and then run it. Or if you have scoop installed in you windows system, you install `scoop install sudo` and run with sudo. - If you haven't installed python in your environment, you can also manually make a soft link, reference to [mklink](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink) - Notice: make sure that the name of soft link is same as the name in your plugin.json - - As the generated softlink is the same as the plugin name, do not put the project directory under plugins (this is contrary to the official template) + - As the generated softlink is the same as the plugin name, **do not put the project directory under plugins** (this is contrary to the webpack version) -4. development +4. Develope - - When pnpm dev mode is enabled, the code and i18n README plugin.json are automatically tracked and the compiled results are placed in the dev directory - - The new version of SiYuan already allows soft links, so there is no need to put the project under plugin. + - Install NodeJS and pnpm, then run pnpm i in the command line under your repo folder + - Execute pnpm run dev for real-time compilation + - Open SiYuan marketplace and enable plugin in downloaded tab -5. manual release (You can use github action instead) +## I18n - - pnpm build, automatically generates package.zip +In terms of internationalization, our main consideration is to support multiple languages. Specifically, we need to +complete the following tasks: +* Meta information about the plugin itself, such as plugin description and readme + * `description` and `readme` fields in plugin.json, and the corresponding README*.md file +* Text used in the plugin, such as button text and tooltips + * src/i18n/*.json language configuration files + * Use `this.i18.key` to get the text in the code +* Finally, declare the language supported by the plugin in the `i18n` field in plugin.json -## Github action +It is recommended that the plugin supports at least English and Simplified Chinese, so that more people can use it more +conveniently. -The github action is included and can be automatically packaged and published: +## plugin.json -1. set the project `https://github.com/OWNER/REPO/settings/actions` page down to **Workflow Permissions** and open the configuration +```json +{ + "name": "plugin-sample-vite-svelte", + "author": "frostime", + "url": "https://github.com/siyuan-note/plugin-sample-vite-svelte", + "version": "1.0.0", + "displayName": { + "en_US": "Plugin sample with vite and svelte", + "zh_CN": "插件样例 vite + svelte 版" + }, + "description": { + "en_US": "SiYuan plugin sample with vite and svelte", + "zh_CN": "使用 vite 和 svelte 开发的思源插件样例" + }, + "readme": { + "en_US": "README_en_US.md", + "zh_CN": "README.md" + }, + "i18n": [ + "en_US", + "zh_CN" + ], + "funding": { + "custom": [ + "https://afdian.net/a/frostime" + ] + } +} +``` + +* `name`: Plugin name, must be the same as the repo name, and must be unique globally (no duplicate plugin names in the + marketplace) +* `author`: Plugin author name +* `url`: Plugin repo URL +* `version`: Plugin version number, it is recommended to follow the [semver](https://semver.org/) specification +* `displayName`: Template display name, mainly used for display in the marketplace list, supports multiple languages + * `default`: Default language, must exist + * `zh_CN`, `en_US` and other languages: optional, it is recommended to provide at least Chinese and English +* `description`: Plugin description, mainly used for display in the marketplace list, supports multiple languages + * `default`: Default language, must exist + * `zh_CN`, `en_US` and other languages: optional, it is recommended to provide at least Chinese and English +* `readme`: readme file name, mainly used to display in the marketplace details page, supports multiple languages + * `default`: Default language, must exist + * `zh_CN`, `en_US` and other languages: optional, it is recommended to provide at least Chinese and English +* `i18n`: Plugin supported language list +* `funding`: Plugin sponsorship information + * `openCollective`: Open Collective name + * `patreon`: Patreon name + * `github`: GitHub login name + * `custom`: Custom sponsorship link list + +## Package + +No matter which method is used to compile and package, we finally need to generate a package.zip, which contains at +least the following files: + +* icon.png +* index.js +* plugin.json +* preview.png +* README*.md +* index.css (optional) +* i18n/* (optional) + +## List on the marketplace + +* `pnpm run build` to generate package.zip +* Create a new GitHub release using your new version number as the "Tag version". See here for an + example: https://github.com/siyuan-note/plugin-sample/releases +* Upload the file package.zip as binary attachments +* Publish the release + +If it is the first release, please create a pull request to +the [Community Bazaar](https://github.com/siyuan-note/bazaar) repository and modify the plugins.json file in it. This +file is the index of all community plugin repositories, the format is: + +```json +{ + "repos": [ + "username/reponame" + ] +} +``` + +After the PR is merged, the bazaar will automatically update the index and deploy through GitHub Actions. When releasing +a new version of the plugin in the future, you only need to follow the above steps to create a new release, and you +don't need to PR the community bazaar repo. + +Under normal circumstances, the community bazaar repo will automatically update the index and deploy every hour, +and you can check the deployment status at https://github.com/siyuan-note/bazaar/actions. + +## Use Github Action + +The github action is included in this sample, you can use it to publish your new realse to marketplace automatically: + +1. In your repo setting page `https://github.com/OWNER/REPO/settings/actions`, down to **Workflow Permissions** and open the configuration like this: ![](asset/action.png) -2. when you need to release a version, push a tag in the format `v*` and github will automatically release (including package.zip) +2. Push a tag in the format `v*` and github will automatically create a new release with new bulit package.zip -3. use conservative pre-release by default, if you don't think this is necessary, change the settings in release.yml to +3. By default, it will only publish a pre-release, if you don't think this is necessary, change the settings in release.yml ```yaml - name: Release diff --git a/asset/action.png b/asset/action.png new file mode 100644 index 0000000000000000000000000000000000000000..a884045ef7c3e8f88aa7268a736f7b2adf98568f GIT binary patch literal 42301 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 literal 0 HcmV?d00001 diff --git a/plugin.json b/plugin.json index 5428c45..4151eb3 100644 --- a/plugin.json +++ b/plugin.json @@ -1,15 +1,15 @@ { - "name": "sy-plugin-template-vite", + "name": "plugin-sample-vite-svelte", "author": "frostime", - "url": "https://github.com/frostime/sy-plugin-template-vite", + "url": "https://github.com/siyuan-note/plugin-sample-vite-svelte", "version": "1.0.0", "displayName": { - "en_US": "Plugin Template Vite Ver", - "zh_CN": "插件开发模板-Vite版" + "en_US": "Plugin sample with vite and svelte", + "zh_CN": "插件样例 vite + svelte 版" }, "description": { - "en_US": "This is a plugin development template based on vite, provided by community", - "zh_CN": "这是一个基于 Vite 的插件开发模板, 由社区热心用户提供" + "en_US": "SiYuan plugin sample with vite and svelte", + "zh_CN": "使用 vite 和 svelte 开发的思源插件样例" }, "readme": { "en_US": "README_en_US.md", diff --git a/scripts/make_dev_link.py b/scripts/make_dev_link.py index 7d26d9c..07b720c 100644 --- a/scripts/make_dev_link.py +++ b/scripts/make_dev_link.py @@ -2,18 +2,18 @@ import os import json from argparse import ArgumentParser -# 1. 读取一个参数 plugin_dir +# 1. Read plugin_dir parser = ArgumentParser() parser.add_argument('plugin_dir') args = parser.parse_args() plugin_dir = args.plugin_dir -# 2. 读取当前根目录下 plugin.json 的 name 字段 +# 2. Read name in plugin.json with open('plugin.json', 'r', encoding='utf-8') as f: content = json.load(f) name = content.get('name') -# ...如果 name 字段为空,报错并退出 +# ...error if name not found if not name or name == '': print('"name" in plugin.json not found, exit') exit() @@ -22,11 +22,11 @@ dev_dir = os.path.abspath('dev') if not os.path.exists(dev_dir): os.mkdir(dev_dir) -# 3. 读取 plugin_dir 下的是否有和 name 字段相同的文件夹 -# ...如果没有,创建一个软链接到当前根目录下的 dev 文件夹 -# ...如果有,报错并退出 +# 3. Create symlink if not os.path.exists(os.path.join(plugin_dir, name)): - os.symlink(dev_dir, os.path.join(plugin_dir, name)) + link = os.path.join(plugin_dir, name) + os.symlink(dev_dir, link) + print('Symlink created:', link) else: print('Folder already exists, exit') exit()