清理脚本

This commit is contained in:
Max 2022-02-13 18:38:10 +08:00
parent 5fea5fe71b
commit 6c44ac7d78
7 changed files with 39 additions and 394 deletions

178
Makefile
View file

@ -9,7 +9,7 @@ VERSION := $(shell grep 'const VERSION =' share/const.go |awk '{print $$4}' |sed
TESTFOLDER := $(shell $(GO) list ./... | grep -vE 'examples|tests*|config')
TESTTAGS ?= ""
# 运行单元测试
# Unit Test
.PHONY: test
test:
echo "mode: count" > coverage.out
@ -79,7 +79,7 @@ tools:
go install golang.org/x/lint/golint; \
go install github.com/client9/misspell/cmd/misspell;
# 编译测试用插件
# make plugin
.PHONY: plugin
plugin:
rm -rf $(HOME)/data/gou-unit/plugins
@ -91,172 +91,36 @@ plugin:
ls -l $(HOME)/data/gou-unit/plugins
ls -l $(HOME)/data/gou-unit/logs
$(HOME)/data/gou-unit/plugins/user.so 2>&1 || true
# make plugin-mac
.PHONY: plugin-mac
plugin-mac:
rm -rf ./tests/plugins/user/dist
rm -rf ./tests/plugins/user.so
go build -o ./tests/plugins/user.so ./tests/plugins/user
chmod +x ./tests/plugins/user.so
# 编译静态文件
.PHONY: static
static:
git clone git@github.com:YaoApp/xiang-saas-ui-kxy .tmp/ui
cd .tmp/ui && yarn install && yarn build
rm -rf ui
mv .tmp/ui/dist ui
rm -rf .tmp/ui
# 将静态文件打包到命令工具
.PHONY: bindata
bindata: gen-bindata fmt
# 将静态文件打包到命令工具
.PHONY: gen-bindata
gen-bindata:
# make pack
.PHONY: pack
pack:
mkdir -p .tmp/data
cp -r ui .tmp/data/
cp -r xiang .tmp/data/
go-bindata -fs -pkg data -o data/bindata.go -prefix ".tmp/data/" .tmp/data/...
rm -rf .tmp/data
# 编译可执行文件
.PHONY: xiang
xiang: bindata
if [ ! -z "${XIANG_DOMAIN}" ]; then \
mv share/const.go share/const.go.bak; \
sed "s/*.iqka.com/$(XIANG_DOMAIN)/g" share/const.go.bak > share/const.go; \
fi;
# GOOS=linux GOARCH=amd64 go build -v -o .tmp/xiang-linux-amd64
# GOOS=linux GOARCH=arm GOARM=7 go build -v -o .tmp/xiang-linux-arm
# GOOS=linux GOARCH=arm64 GOARM=7 go build -v -o .tmp/xiang-linux-arm64
GOOS=darwin GOARCH=amd64 go build -v -o .tmp/xiang-darwin-amd64
mkdir -p dist/bin
mv .tmp/xiang-*-* dist/bin/
chmod +x dist/bin/xiang-*-*
if [ ! -z "${XIANG_DOMAIN}" ]; then \
rm share/const.go; \
mv share/const.go.bak share/const.go; \
fi;
.PHONY: release
release: clean
mkdir -p dist/release
git clone git@github.com:YaoApp/yao.git dist/release
git clone git@github.com:YaoApp/kun.git dist/kun
git clone git@github.com:YaoApp/xun.git dist/xun
git clone git@github.com:YaoApp/gou.git dist/gou
# UI制品
git clone git@github.com:YaoApp/xiang-ui .tmp/ui
sed -ie "s/url('\/icon/url('\/xiang\/icon/g" .tmp/ui/public/icon/md_icon.css
cd .tmp/ui && cnpm install && npm run build
rm -rf dist/release/ui
mv .tmp/ui/dist dist/release/ui
# 静态文件打包
mkdir -p .tmp/data
cp -r dist/release/ui .tmp/data/
cp -r dist/release/xiang .tmp/data/
go-bindata -fs -pkg data -o dist/release/data/bindata.go -prefix ".tmp/data/" .tmp/data/...
rm -rf .tmp/data
rm -rf .tmp/ui
# 制品
if [ ! -z "${XIANG_DOMAIN}" ]; then \
mv dist/release/share/const.go dist/release/share/const.go.bak; \
sed "s/*.iqka.com/$(XIANG_DOMAIN)/g" dist/release/share/const.go.bak > dist/release/share/const.go; \
fi;
# cd dist/release && CGO_ENABLED=1 CC=x86_64-linux-musl-gcc CGO_LDFLAGS="-static" GOOS=linux GOARCH=amd64 go build -v -o ../../.tmp/xiang-${VERSION}-linux-amd64
# cd dist/release && GOOS=linux GOARCH=arm GOARM=7 go build -v -o ../../.tmp/xiang-${VERSION}-linux-arm
# cd dist/release && GOOS=linux GOARCH=arm64 GOARM=7 go build -v -o ../../.tmp/xiang-${VERSION}-linux-arm64
cd dist/release && CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -v -o ../../.tmp/xiang-${VERSION}-darwin-amd64
# cd dist/release && GOOS=windows GOARCH=386 go build -v -o ../../.tmp/xiang-${VERSION}-windows-386
rm -rf dist/release
mkdir -p dist/release
mv .tmp/xiang-*-* dist/release/
chmod +x dist/release/xiang-*-*
.PHONY: hi
hi:
echo ${VERSION}
.PHONY: arm
arm: clean
mkdir -p dist/release
git clone git@github.com:YaoApp/yao.git dist/release
git clone git@github.com:YaoApp/kun.git dist/kun
git clone git@github.com:YaoApp/xun.git dist/xun
git clone git@github.com:YaoApp/gou.git dist/gou
# UI制品
git clone git@github.com:YaoApp/xiang-ui.git .tmp/ui
sed -ie "s/url('\/icon/url('\/xiang\/icon/g" .tmp/ui/public/icon/md_icon.css
cd .tmp/ui && cnpm install && npm run build
rm -rf dist/release/ui
mv .tmp/ui/dist dist/release/ui
# 静态文件打包
mkdir -p .tmp/data
cp -r dist/release/ui .tmp/data/
cp -r dist/release/xiang .tmp/data/
go-bindata -fs -pkg data -o dist/release/data/bindata.go -prefix ".tmp/data/" .tmp/data/...
rm -rf .tmp/data
rm -rf .tmp/ui
# 制品
mkdir -p dist
cd dist/release && CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build -v -o ../../.tmp/xiang-${VERSION}-linux-arm
rm -rf dist/release
mkdir -p dist/release
mv .tmp/xiang-*-* dist/release/
chmod +x dist/release/xiang-*-*
.PHONY: linux
linux: clean
mkdir -p dist/release
git clone git@github.com:YaoApp/yao.git dist/release
git clone git@github.com:YaoApp/kun.git dist/kun
git clone git@github.com:YaoApp/xun.git dist/xun
git clone git@github.com:YaoApp/gou.git dist/gou
# UI制品
git clone git@github.com:YaoApp/xiang-ui.git .tmp/ui
sed -ie "s/url('\/icon/url('\/xiang\/icon/g" .tmp/ui/public/icon/md_icon.css
cd .tmp/ui && cnpm install && npm run build
rm -rf dist/release/ui
mv .tmp/ui/dist dist/release/ui
# 静态文件打包
mkdir -p .tmp/data
cp -r dist/release/ui .tmp/data/
cp -r dist/release/xiang .tmp/data/
go-bindata -fs -pkg data -o dist/release/data/bindata.go -prefix ".tmp/data/" .tmp/data/...
rm -rf .tmp/data
rm -rf .tmp/ui
# 制品
mkdir -p dist
cd dist/release && CGO_ENABLED=1 CGO_LDFLAGS="-static" GOOS=linux GOARCH=amd64 go build -v -o ../../.tmp/xiang-${VERSION}-linux-amd64
rm -rf dist/release
mkdir -p dist/release
mv .tmp/xiang-*-* dist/release/
chmod +x dist/release/xiang-*-*
# make artifacts-linux
.PHONY: artifacts-linux
artifacts-linux: clean
mkdir -p dist/release
# UI制品
# Building UI
sed -ie "s/url('\/icon/url('\/xiang\/icon/g" ../ui/public/icon/md_icon.css
cd ../ui && npm install && npm run build
# 静态文件打包
# Packing
mkdir -p .tmp/data
cp -r ../ui/dist .tmp/data/ui
cp -r xiang .tmp/data/
@ -264,7 +128,7 @@ artifacts-linux: clean
rm -rf .tmp/data
rm -rf .tmp/ui
# 制品
# Making artifacts
mkdir -p dist
CGO_ENABLED=1 CGO_LDFLAGS="-static" GOOS=linux GOARCH=amd64 go build -v -o dist/yao-${VERSION}-linux-amd64
CGO_ENABLED=1 CGO_LDFLAGS="-static" GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ go build -v -o dist/yao-${VERSION}-linux-arm64
@ -275,15 +139,16 @@ artifacts-linux: clean
ls -l dist/release/
dist/release/yao-${VERSION}-linux-amd64 version
# make artifacts-macos
.PHONY: artifacts-macos
artifacts-macos: clean
mkdir -p dist/release
# UI制品
# Building UI
sed -ie "s/url('\/icon/url('\/xiang\/icon/g" ../ui/public/icon/md_icon.css
cd ../ui && npm install && npm run build
# 静态文件打包
# Packing
mkdir -p .tmp/data
cp -r ../ui/dist .tmp/data/ui
cp -r xiang .tmp/data/
@ -291,7 +156,7 @@ artifacts-macos: clean
rm -rf .tmp/data
rm -rf .tmp/ui
# 制品
# Making artifacts
mkdir -p dist
CGO_ENABLED=1 CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -v -o dist/yao-${VERSION}-darwin-amd64
CGO_ENABLED=1 CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -v -o dist/yao-${VERSION}-darwin-arm64
@ -302,21 +167,14 @@ artifacts-macos: clean
ls -l dist/release/
dist/release/yao-${VERSION}-darwin-amd64 version
.PHONY: win32
win32: bindata
GOOS=windows GOARCH=386 go build -v -o .tmp/xiang-windows-386
mkdir -p dist/bin
mv .tmp/xiang-*-* dist/bin/
chmod +x dist/bin/xiang-*-*
# make clean
.PHONY: clean
clean:
rm -rf ./tmp
rm -rf .tmp
rm -rf dist
# make migrate ( for unit test)
.PHONY: migrate
migrate:
$(GO) test -tags $(TESTTAGS) -run TestCommandMigrate$

190
README.md
View file

@ -5,6 +5,9 @@
Yao 是一款 **Go** 语言驱动的低代码应用引擎,通过编写 JSON 描述即可快速制作 **API 接口****数据管理系统** **命令行工具** 等应用程序,应用可以运行在本地、云端和物联网设备上。
官方网站: [https://yaoapps.com](https://yaoapps.com)
文档地址: [https://yaoapps.com/doc](https://yaoapps.com/doc)
## 介绍
Yao 基于 **flow-based** 编程思想,采用 **Go** 语言开发,支持多种方式扩展数据流处理器。这使得 Yao 具有极好的**通用性**,大部分场景下可以代替编程语言, 在复用性和编码效率上是传统编程语言的 **10 倍**;应用性能和资源占比上优于 **PHP**, **JAVA** 等语言。
@ -25,16 +28,20 @@ Yao 的名字源于汉字**爻(yáo)**,是构成八卦的基本符号。八卦
## 起步
**注意:开始前需要了解 JSON、RESTFulAPI、关系型数据库的基本概念和常识并可以使用常见终端命令。如需处理非常复杂的业务逻辑则需要掌握 JavaScript 语言。**
**注意**
我们准备了一个在线开发调试环境,帮助您快速上手体验。**在线开发环境仅做体验使用, 数据每小时重置** , 在实际开发中,请在本地安装 Yao 进行开发调试,具体参考 [安装调试](/a.介绍/b.安装调试.mdx) 章节的文档。如果您的应用开发完成,需要在生产环境部署,请参考 [部署](/e.部署.mdx) 章节文档。
- 开始前需要了解 JSON、RESTFul API、关系型数据库的基本概念和常识并可以使用常见终端命令。
- 如需处理非常复杂的业务逻辑,则需要掌握 JavaScript 语言。\*
<Extend
title="打开在线调试环境"
desc="在线开发测试环境仅做体验使用,数据每小时重置"
link="https://ide-demo.yaoapps.com"
### 安装 Yao
> </Extend>
在终端下运行脚本: ( MacOS / Linux )
```bash
curl -fsSL https://website.yaoapps.com/install.sh | bash
```
[Windows 开发者请参考安装调试章节](https://yaoapps.com/doc/a.%E4%BB%8B%E7%BB%8D/b.%E5%AE%89%E8%A3%85%E8%B0%83%E8%AF%95)
### 第一步: 创建项目
@ -46,104 +53,17 @@ cd /data/crm # 进入项目目录
yao init # 运行初始化程序
```
命令运行成功后,将创建 `app.json文件` , `db目录`, `ui目录``data目录`
命令运行成功后,将创建 `app.json文件` , `db`, `ui` , `data` 等目录
```bash
├── data # 用于存放应用产生的文件,如图片,PDF等
├── db # 用于存放 SQLite 数据库文件
│ └── xiang.db
│ └── yao.db
└── ui # 静态文件服务器文件目录,可以放置自定义前端制品,该目录下文件可通过 http://host:port/文件名称 访问。
└── app.json # 应用配置文件, 用来定义应用名称等
```
### 第二步: 创建数据模型
设计一张数据表 customer用于存放客户资料数据。数据表结构如下:
| 字段 | 类型 | 长度/参数 | 默认值 | 说明 |
| ---------- | ---------- | -------------------------- | ------- | ------------------------- |
| id | ID | | | 数据表 ID |
| channel_id | bigInteger | | | 客户来源 |
| name | string | 80 | | 客户姓名 |
| company | string | 200 | | 公司名称 |
| gender | integer | | 0 | 性别 0, 未知1 男2女 |
| birthday | date | | | 生日 |
| desc | text | | | 简历 |
| status | enum | ["enabled"], ["disabled"], | enabled | 状态 |
创建数据表对应的 `JSON 描述文件` :
在项目 `models` 目录下 (例如: `/data/crm/models`),创建数据模型描述文件 `customer.mod.json`
```json
{
"name": "客户",
"table": { "name": "customer", "comment": "客户表" },
"columns": [
{ "label": "ID", "name": "id", "type": "ID", "comment": "ID" },
{
"label": "来源",
"name": "channel_id",
"type": "bigInteger",
"comment": "客户来源",
"nullable": true,
"index": true
},
{
"label": "姓名",
"name": "name",
"type": "string",
"length": 80,
"comment": "客户姓名",
"nullable": true,
"index": true
},
{
"label": "公司",
"name": "company",
"type": "string",
"length": 200,
"comment": "公司全称",
"nullable": true,
"index": true
},
{
"label": "性别",
"name": "gender",
"type": "integer",
"comment": "性别",
"default": 0,
"index": true
},
{
"label": "生日",
"name": "birthday",
"type": "date",
"comment": "性别",
"nullable": true,
"index": true
},
{
"label": "介绍",
"name": "desc",
"type": "text",
"comment": "介绍",
"nullable": true
},
{
"label": "状态",
"name": "status",
"type": "enum",
"default": "enabled",
"option": ["enabled", "disabled"],
"comment": "状态 enabled 开启, disabled 关闭",
"index": true
}
],
"option": { "timestamps": true, "soft_deletes": true },
"values": [{ "id": 1, "name": "莉莉", "company": "yaoapps.com" }]
}
```
### 第二步: 创建数据表
使用 `yao migrate` 命令创建数据表,打开命令行终端,**在项目根录下运行**:
@ -151,77 +71,13 @@ yao init # 运行初始化程序
yao migrate
```
**技巧: 调试过程中,需要频繁检查数据。可以使用 `yao run` 命令查询数据。例如:在命令行终端中运行 `yao run models.customer.find 1` 即可查询 `customer` 数据表 ID=1 的数据。**
初始化菜单
### 第三步: 编写管理界面
在项目 `tables` 目录下 (例如: `/data/crm/models`),创建数据表格描述文件 `customer.tab.json`
```json
{
"name": "客户",
"version": "1.0.0",
"decription": "客户管理数据表格",
"bind": {
"model": "customer"
},
"columns": {},
"filters": {
"关键词": { "@": "filter.关键词", "in": ["where.name.match"] },
"排序": { "@": "filter.排序" }
},
"list": {
"primary": "id",
"layout": {
"columns": [
{ "name": "ID", "width": 80 },
{ "name": "公司", "width": 200 },
{ "name": "姓名", "width": 100 },
{ "name": "性别", "width": 80 },
{ "name": "生日", "width": 100 },
{ "name": "来源", "width": 80 },
{ "name": "状态", "width": 140 },
{ "name": "更新时间", "width": 160 }
],
"filters": [{ "name": "关键词" }, { "name": "来源", "width": 3 }]
},
"actions": {
"create": {
"type": "button",
"props": { "label": "添加客户", "icon": "fas fa-plus" }
},
"pagination": {}
}
},
"edit": {
"primary": "id",
"layout": {
"fieldset": [
{
"columns": [
{ "name": "姓名", "width": 12 },
{ "name": "性别", "width": 3 },
{ "name": "生日", "width": 3 },
{ "name": "来源", "width": 3 },
{ "name": "状态", "width": 3 },
{ "name": "公司", "width": 24 },
{ "name": "介绍", "width": 24 }
]
}
]
},
"actions": {
"cancel": {},
"save": { "@": "action.保存" },
"delete": { "@": "action.删除" }
}
}
}
```bash
yao run flows.setmenu
```
**注意:由于该项目诞生之初主要是为了提高团队内部生产力,在约定俗成的写法描述下,并没有做细粒度的抛错处理,所以开发者可能会在编写 JSON 调试界面的过程当中遇到界面为空的情况。处置方式请查阅组件文档。**
**启动服务**
### 第三步: 启动服务
打开命令行终端,**在项目根录下运行**:
@ -232,7 +88,3 @@ yao start
1. 打开浏览器, 访问 `https://127.0.0.1:5099/xiang/login/admin`
2. 输入默认用户名: `xiang@iqka.com` 密码: `A123456p+`
3. 成功登录后,在地址栏输入 `https://127.0.0.1:5099/xiang/table/customer`
4. 建议将 `/xiang/table/customer` 路由添加为菜单项。

View file

@ -1,6 +0,0 @@
# /bin/bash
go clean --cache
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ \
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 \
go build -ldflags="-extldflags=-static" -v -o ./yao-arm64

View file

@ -1,12 +0,0 @@
#!/bin/bash
make clean
make xiang
VERSION=$(go run . version)
rm -rf ../xiang-spec/xiang/*
cp dist/bin/xiang-* ../xiang-spec/xiang/
rm -f ~/Code/bin/xiang
rm -f ~/Code/bin/yao
ln -s ~/Code/yao/xiang-spec/xiang/xiang-darwin-amd64 ~/Code/bin/xiang
ln -s ~/Code/yao/xiang-spec/xiang/xiang-darwin-amd64 ~/Code/bin/yao
make clean

Binary file not shown.

Before

Width:  |  Height:  |  Size: 333 KiB

View file

@ -1,23 +0,0 @@
#!/bin/bash
repace() {
echo $1
sed -E "$1" /data/release/ui/install.sh > /data/release/ui/install.sh.new
}
# 关闭代理
all_proxy=""
http_proxy=""
https_proxy=""
VERSION=$(go run . version)
ssh max@demo-crm.iqka.com mkdir -p /data/demo-crm/ui/releases/$VERSION/
ssh max@demo-crm.iqka.com "echo {\\\"version\\\":\\\"$VERSION\\\"} > /data/demo-crm/ui/releases/latest.json"
scp ~/Code/bin/xiang-$VERSION-linux-amd64 max@demo-crm.iqka.com:/data/demo-crm/ui/releases/$VERSION/yao-$VERSION-linux-amd64
scp ~/Code/bin/xiang-$VERSION-darwin-amd64 max@demo-crm.iqka.com:/data/demo-crm/ui/releases/$VERSION/yao-$VERSION-darwin-amd64
# scp ~/Code/bin/xiang-$VERSION-windows-386 max@demo-crm.iqka.com:/data/demo-crm/ui/releases/$VERSION/yao-$VERSION-windows-386
repace "s/[0-9]+\.[0-9]+\.[0-9]+/$VERSION/g"
scp ~/Code/yao/xiang/shell/install.sh.new max@demo-crm.iqka.com:/data/demo-crm/ui/releases/$VERSION/install.sh
rm ~/Code/yao/xiang/shell/install.sh.new

24
spec.sh
View file

@ -1,24 +0,0 @@
#!/bin/bash
repace() {
echo $1
sed -E "$1" ~/Code/yao/xiang-spec/README.md > ~/Code/yao/xiang-spec/README.new.md
rm ~/Code/yao/xiang-spec/README.md
mv ~/Code/yao/xiang-spec/README.new.md ~/Code/yao/xiang-spec/README.md
}
make release
VERSION=$(go run . version)
rm -rf ../xiang-spec/xiang/*
cp dist/release/xiang-* ~/Code/bin/
rm -f ~/Code/bin/xiang
rm -f ~/Code/bin/yao
ln -s ~/Code/bin/xiang-$VERSION-darwin-amd64 ~/Code/bin/xiang
ln -s ~/Code/bin/xiang-$VERSION-darwin-amd64 ~/Code/bin/yao
# 更新 README.md 中的版本
# repace "s/\[[0-9]+\.[0-9]+\.[0-9]+\]/[$VERSION]/g"
# repace "s/\-[0-9]+\.[0-9]+\.[0-9]+\-/-$VERSION-/g"
# repace "s/Version\:[0-9]+\.[0-9]+\.[0-9]+/Version:$VERSION/g"
make clean