这个仓库负责保存已经发布的 KCL 模块,并且您可以在 artifacthub.io (AH) 上找到这些包。
在下一节中,我们通过 helloworld
示例向您展示如何发布您的 KCL 包并且在 AH 上找到他们。
- 安装 KCL
- 安装 git
- 注册一个 Github 账户(可选)
注意:如果您希望将您的 KCL 包发布到 kcl-lang
官方的 Registry 中,那么您的 KCL 包的源代码将以开源的形式保存在当前仓库中,您需要将您的包的源代码通过 PR 提交到这个仓库中。
通过 kcl mod init <module_name>
命令, 您可以创建一个合法的 KCL 程序模块。
目前,仓库能够识别的合法的程序的目录结构如下:
<module_name>
|- kcl.mod (必选的)
|- kcl.mod.lock (可选的)
|- artifacthub-pkg.yaml (可选的)
|- README.md (可选的)
|- (*.k) kcl program files
- kcl.mod : 作为 KCL 程序包的标识文件,这个文件必选的,包含 kcl.mod 文件的目录会被标识为文件的根目录。
- kcl.mod.lock : 自动生成的用来固定依赖版本的文件,这个文件可选的,不需要手动改动。
- artifacthub-pkg.yaml : 这个文件是可选的,因为我们的仓库目前通过 artifacthub 展示所有的包,通过 artifacthub-pkg.yaml 来配置您想要包的信息,这里我们采取的策略是如果在您的包的 kcl.mod 文件所在目录中有一个名为 artifacthub-pkg.yaml 的配置文件,那么,我们将使用您提供 artifacthub-pkg.yaml 来展示您的包的信息,否则,我们将会使用一些默认的信息生成对应的 artifacthub-pkg.yaml 文件。
- README.md : 一个 markdown 文件作为您的包的文档,这个文件是可选的,如果您不提供这个文件,artifacthub 上将不会展示您的包的文档。
- (*.k) kcl program files: 您的 KCL 程序的源代码。
首先,您需要使用 git 将仓库 https://github.com/kcl-lang/modules 下载到您的本地
git clone https://github.com/kcl-lang/modules --depth=1
我们推荐您的分支名为:publish-pkg-<module_name>, <module_name> 为您包的名称。
以包 helloworld 为例
进入您下载的 modules 目录中
cd modules
为包 helloworld 创建一个分支 publish-pkg-helloworld
git checkout -b publish-pkg-helloworld
您需要将您的包移动到当前目录下,在我们的例子中,我们使用 kcl mod init
命令创建包 helloworld
kcl mod init helloworld
您可以为 helloworld 包增加一个 README.md 文件保存在包的根目录下,用来展示在 AH 的首页中。
echo "## Introduction" >> helloworld/README.md
echo "This is a kcl module named helloworld." >> helloworld/README.md
您可以使用如下命令提交您的包
使用 git add .
命令将您的包添加到 git 的暂存区中
git add .
使用 git commit -s
命令提交您的包, 我们推荐您的 commit message 遵循 “publish module <module_name>” 的格式。
git commit -m "publish module helloworld" -s
使用 git push
命令将您的包提交到您的分支 publish-pkg-<module_name> 中
git push
将您的分支 publish-pkg-<module_name> 向仓库的 main 分支提交 PR。
完成包的内容上传后,您可以通过 PR 升级您的包。
注意:我们没有提供任何改变包的内容但是不改变版本号的升级策略。 如果您想要升级您的包,并希望您升级后的包被展示在 AH 上,您需要修改您的包的版本号。即在 kcl.mod 文件的 module 章节中的 version 字段。
[package]
name = "my_module"
edition = "*"
version = "0.1.0" # 改变这个字段来升级您的包
description = "This is my module."
同样,您无法多次上传同一个版本号的 KCL 包,一旦您的包的版本号已经被使用,您将无法再次使用这个版本号,再次上传这个包的方式就只有升级版本号。