xc - 简单、方便、基于Markdown的任务运行器
xc
是一个类似于Make
或npm run
的任务运行器,旨在提高可发现性和易用性。
xc
旨在解决的问题是脚本与其文档分开维护的问题。通常,Makefile
或package.json
会包含一些用于项目开发的有用脚本,然后README.md
会展示并描述这些脚本。在这种情况下,由于文档是分开的,当脚本发生变更或添加时,可能不会更新文档。xc
通过将脚本定义与文档内联来解决这个问题。
xc
的设计目标是最大化便利性,最小化复杂性。每个xc
任务都是用简单、人类可读的Markdown定义的。这意味着即使没有安装xc
工具的人也可以使用README.md(或包含任务的任何Markdown文件)作为项目有用命令的来源。
安装
安装说明请参见https://xcfile.dev/getting-started/#installation。
特性
示例
以xc
仓库README.md中的tag
任务为例:
## tag
为仓库部署新标签。
需要:test
```
export VERSION=`git rev-list --count HEAD`
echo 添加git标签,版本为v0.0.${VERSION}
git tag v0.0.${VERSION}
git push origin v0.0.${VERSION}
```
可以简单地使用xc tag
运行该任务,但作为xc
任务的一个附带效果是,即使不使用xc
,推送标签的步骤也被清晰地记录下来了。
$ xc tag
+ go test ./...
? github.com/joerdav/xc/cmd/xc [无测试文件]
? github.com/joerdav/xc/models [无测试文件]
ok github.com/joerdav/xc/parser (缓存)
ok github.com/joerdav/xc/run (缓存)
+ export VERSION=78
+ echo 添加git标签,版本为v0.0.78
添加git标签,版本为v0.0.78
+ git tag v0.0.78
+ git push origin v0.0.78 总共 0 (差异 0),复用 0 (差异 0),包重用 0
To github.com:joerdav/xc
* [新标签] v0.0.78 -> v0.0.78
任务
test
测试项目。
go test ./...
lint
运行代码检查器。
golangci-lint run
build
构建xc
二进制文件。
go build ./cmd/xc
tag
为仓库部署新标签。
通过VERSION指定主版本/次版本/补丁版本
输入:VERSION
需要:test
# https://github.com/unegma/bash-functions/blob/main/update.sh
CURRENT_VERSION=`git describe --abbrev=0 --tags 2>/dev/null`
CURRENT_VERSION_PARTS=(${CURRENT_VERSION//./ })
VNUM1=${CURRENT_VERSION_PARTS[0]}
VNUM2=${CURRENT_VERSION_PARTS[1]}
VNUM3=${CURRENT_VERSION_PARTS[2]}
if [[ $VERSION == 'major' ]]
then
VNUM1=$((VNUM1+1))
VNUM2=0
VNUM3=0
elif [[ $VERSION == 'minor' ]]
then
VNUM2=$((VNUM2+1))
VNUM3=0
elif [[ $VERSION == 'patch' ]]
then
VNUM3=$((VNUM3+1))
else
echo "无效版本"
exit 1
fi
NEW_TAG="$VNUM1.$VNUM2.$VNUM3"
echo 添加git标签,版本为${NEW_TAG}
git tag ${NEW_TAG}
git push origin ${NEW_TAG}
update-nix
更新nix flake。
sh ./update-nix.sh
install-hugo
通过go install
安装hugo。
go install github.com/gohugoio/hugo@latest
run-docs
运行hugo开发服务器。
目录:doc
hugo serve
build-docs
构建生产文档站点。
目录:doc
./build.sh