@lazycatcloud/lzc-cli 1.2.58 → 1.2.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/changelog.md +11 -0
  2. package/lib/app/lpk_build.js +5 -0
  3. package/lib/app/lpk_create_generator.js +0 -152
  4. package/lib/app/lpk_installer.js +9 -5
  5. package/lib/appstore/index.js +15 -6
  6. package/lib/appstore/login.js +13 -1
  7. package/lib/debug_bridge.js +33 -1
  8. package/lib/shellapi.js +0 -31
  9. package/package.json +1 -1
  10. package/template/blank/lzc-build.yml +15 -16
  11. package/template/blank/lzc-manifest.yml +4 -4
  12. package/template/_lpk/golang.manifest.yml.in +0 -16
  13. package/template/_lpk/lite.manifest.yml.in +0 -19
  14. package/template/golang/.godir +0 -1
  15. package/template/golang/README.md +0 -10
  16. package/template/golang/_gitignore +0 -2
  17. package/template/golang/assets/css/bootstrap-responsive.css +0 -1091
  18. package/template/golang/assets/css/bootstrap-responsive.min.css +0 -1073
  19. package/template/golang/assets/css/bootstrap.css +0 -6264
  20. package/template/golang/assets/css/bootstrap.min.css +0 -5307
  21. package/template/golang/assets/css/rego.css +0 -45
  22. package/template/golang/assets/img/glyphicons-halflings-white.png +0 -0
  23. package/template/golang/assets/img/glyphicons-halflings.png +0 -0
  24. package/template/golang/assets/js/bootstrap.js +0 -2054
  25. package/template/golang/assets/js/bootstrap.min.js +0 -1241
  26. package/template/golang/assets/js/rego.js +0 -132
  27. package/template/golang/build.sh +0 -12
  28. package/template/golang/go.mod +0 -3
  29. package/template/golang/index.html +0 -269
  30. package/template/golang/lazycat.png +0 -0
  31. package/template/golang/lzc-build.yml +0 -60
  32. package/template/golang/rego.go +0 -82
  33. package/template/golang/rego_test.go +0 -13
  34. package/template/ionic_vue3/README.md +0 -46
  35. package/template/ionic_vue3/_eslintrc.cjs +0 -24
  36. package/template/ionic_vue3/_gitignore +0 -29
  37. package/template/ionic_vue3/_vscode/extensions.json +0 -6
  38. package/template/ionic_vue3/capacitor.config.ts +0 -10
  39. package/template/ionic_vue3/env.d.ts +0 -1
  40. package/template/ionic_vue3/index.html +0 -13
  41. package/template/ionic_vue3/ionic.config.json +0 -7
  42. package/template/ionic_vue3/lazycat.png +0 -0
  43. package/template/ionic_vue3/lzc-build.yml +0 -61
  44. package/template/ionic_vue3/package-lock.json +0 -8100
  45. package/template/ionic_vue3/package.json +0 -52
  46. package/template/ionic_vue3/postcss.config.js +0 -6
  47. package/template/ionic_vue3/public/favicon.ico +0 -0
  48. package/template/ionic_vue3/src/App.vue +0 -11
  49. package/template/ionic_vue3/src/assets/logo.svg +0 -1
  50. package/template/ionic_vue3/src/index.css +0 -3
  51. package/template/ionic_vue3/src/main.ts +0 -35
  52. package/template/ionic_vue3/src/router/index.ts +0 -15
  53. package/template/ionic_vue3/src/theme/variables.css +0 -231
  54. package/template/ionic_vue3/src/views/Home.vue +0 -38
  55. package/template/ionic_vue3/tailwind.config.js +0 -7
  56. package/template/ionic_vue3/tsconfig.json +0 -16
  57. package/template/ionic_vue3/tsconfig.vite-config.json +0 -8
  58. package/template/ionic_vue3/vite.config.ts +0 -28
  59. package/template/lite/_gitignore +0 -4
  60. package/template/lite/error_pages/502.html.tpl +0 -13
  61. package/template/lite/lazycat.png +0 -0
  62. package/template/lite/lzc-build.yml +0 -59
package/changelog.md CHANGED
@@ -1,3 +1,14 @@
1
+ # 1.2.60
2
+ 1. 添加用户登录友好提示
3
+ 2. 移除已弃用模版
4
+ 3. 支持 lzc-build 文件配置 `compose.override` 字段
5
+
6
+ # 1.2.59
7
+
8
+ 1. 修复 copy-image 网关超时
9
+ 2. 当解析 manifest 失败的时候,继续安装
10
+ 3. 修复盒子 ingress 错误的时候,获取不到本地的默认盒子
11
+
1
12
  # 1.2.58
2
13
 
3
14
  1. 使用 127.0.0.1 替代 localhost 避免解析错误
@@ -305,6 +305,11 @@ export class LpkBuild {
305
305
  dumpToYaml(manifest, path.join(tempDir, "manifest.yml"))
306
306
  }
307
307
 
308
+ // compose.override.yml
309
+ if (this.options['compose_override']) {
310
+ dumpToYaml(this.options['override'], path.join(tempDir, "compose.override.yml"))
311
+ }
312
+
308
313
  // 打包 lpk
309
314
  if (this.beforeDumpLpkFn.length > 0) {
310
315
  await this.beforeDumpLpkFn.reduce(async (prev, curr) => {
@@ -55,81 +55,6 @@ export async function generate(type, to, opts = {}) {
55
55
  writeFileTree(to, files)
56
56
  }
57
57
 
58
- function appendREADME(dir) {
59
- const readme = path.resolve(dir, "README.md")
60
- const readmeTemplate = path.resolve(
61
- __dirname,
62
- "..",
63
- "..",
64
- "template",
65
- "_lpk",
66
- "README.md"
67
- )
68
- if (!isFileExist(readme)) {
69
- fs.copyFileSync(readmeTemplate, readme)
70
- } else {
71
- const contentStream = fs.readFileSync(readmeTemplate, {
72
- encoding: "utf-8"
73
- })
74
- fs.writeFileSync(readme, contentStream, { flag: "a" })
75
- }
76
- }
77
-
78
- function vueTemplate(type) {
79
- const v = type == "vue3" ? "vue@3" : "vue@2"
80
- return {
81
- build: async (to, option) => {
82
- spawn.sync("npm", ["init", v, path.basename(to)], { stdio: "inherit" })
83
- },
84
- after: async function (name, cwd) {
85
- spawn.sync("npm", ["install"], {
86
- cwd: path.resolve(cwd, name),
87
- stdio: "inherit"
88
- })
89
-
90
- const lzcBuildTemplatePath = path.resolve(
91
- __dirname,
92
- "..",
93
- "..",
94
- "template",
95
- "_lpk",
96
- "vue.lzc-build.yml.in"
97
- )
98
- logger.debug("复制", lzcBuildTemplatePath)
99
- fs.copyFileSync(lzcBuildTemplatePath, path.resolve(name, "lzc-build.yml"))
100
-
101
- const iconPngPath = path.resolve(
102
- __dirname,
103
- "..",
104
- "..",
105
- "template",
106
- "_lpk",
107
- "lazycat.png"
108
- )
109
- fs.copyFileSync(iconPngPath, path.resolve(name, "lazycat.png"))
110
-
111
- // 更改默认的端口
112
- const packageJson = path.resolve(name, "package.json")
113
- const pkgInfo = JSON.parse(fs.readFileSync(packageJson))
114
- pkgInfo["scripts"]["dev"] = `vite --port 3000 --host`
115
- fs.writeFileSync(packageJson, JSON.stringify(pkgInfo, null, " "))
116
-
117
- appendREADME(path.resolve(cwd, name))
118
-
119
- console.log(
120
- chalk.green(
121
- `
122
- 🚀 构建 lpk 包
123
- ${chalk.yellow(`lzc-cli project build -o ${name}.lpk`)}
124
- ⚙️ 将应用安装至设备中:
125
- ${chalk.yellow(`lzc-cli app install ${name}.lpk`)}
126
- `.trim()
127
- )
128
- )
129
- }
130
- }
131
- }
132
-
133
58
  function appCreateSuccessTip(name) {
134
59
  console.log(
135
60
  chalk.green(
@@ -162,82 +87,5 @@ export const TemplateConfig = {
162
87
  )
163
88
  )
164
89
  }
165
- },
166
- // vue3: vueTemplate("vue3"),
167
- vue2: vueTemplate("vue2"),
168
- lite: {
169
- build: async (to, option) => {
170
- await generate("lite", to, option)
171
- },
172
- after: async function (name, cwd) {
173
- appendREADME(path.resolve(cwd, name))
174
-
175
- console.log(
176
- chalk.green(
177
- `
178
- ✨ 懒猫云应用 ${name} 已创建:
179
- ${chalk.yellow(`cd ${name}`)}
180
- 🚀 构建 lpk 包
181
- ${chalk.yellow(`lzc-cli project build -o ${name}.lpk`)}
182
- ⚙️ 将应用安装至设备中:
183
- ${chalk.yellow(`lzc-cli app install ${name}.lpk`)}
184
- `.trim()
185
- )
186
- )
187
- }
188
- },
189
- ionic_vue3: {
190
- build: async (to, option) => {
191
- await generate("ionic_vue3", to, option)
192
- },
193
- after: async function (name, cwd) {
194
- appendREADME(path.resolve(cwd, name))
195
-
196
- console.log(chalk.green("开始安装依赖"))
197
- spawn.sync("npm", ["install"], {
198
- cwd: path.join(cwd, name),
199
- stdio: "inherit"
200
- })
201
-
202
- console.log(
203
- chalk.green(
204
- `
205
- ✨ 懒猫云应用 ${name} 已创建:
206
- ${chalk.yellow(`cd ${name}`)}
207
- ${chalk.yellow(`npm run dev`)}
208
- 🚀 构建 lpk 包
209
- ${chalk.yellow(`lzc-cli project build -o ${name}.lpk`)}
210
- ⚙️ 将应用安装至设备中:
211
- ${chalk.yellow(`lzc-cli app install ${name}.lpk`)}
212
- 📄 生成android代码:
213
- ${chalk.yellow(`npm run build_android`)}
214
- 📄 生成ios代码:
215
- ${chalk.yellow(`npm run build_ios`)}
216
- `.trim()
217
- )
218
- )
219
- }
220
- },
221
- golang: {
222
- build: async (to, option) => {
223
- await generate("golang", to, option)
224
- },
225
- after: function (name, cwd) {
226
- appendREADME(path.resolve(cwd, name))
227
-
228
- console.log(
229
- chalk.green(
230
- `
231
- ✨ 懒猫云应用 ${name} 已创建:
232
- ${chalk.yellow(`cd ${name}`)}
233
- ${chalk.yellow(`go run .`)}
234
- 🚀 构建 lpk 包
235
- ${chalk.yellow(`lzc-cli project build -o ${name}.lpk`)}
236
- ⚙️ 将应用安装至设备中:
237
- ${chalk.yellow(`lzc-cli app install ${name}.lpk`)}
238
- `.trim()
239
- )
240
- )
241
- }
242
90
  }
243
91
  }
@@ -113,6 +113,8 @@ export class LpkInstaller {
113
113
  })
114
114
  }
115
115
  logger.debug("lpk manifest", manifest)
116
+ } catch (err) {
117
+ logger.debug("parse manifest ", err)
116
118
  } finally {
117
119
  fs.rmSync(tempDir, { recursive: true })
118
120
  }
@@ -120,12 +122,14 @@ export class LpkInstaller {
120
122
  const bridge = new DebugBridge()
121
123
  await bridge.init()
122
124
  logger.info("开始安装应用")
123
- await bridge.install(pkgPath, manifest["package"])
125
+ await bridge.install(pkgPath, manifest ? manifest["package"] : "")
124
126
  logger.info("\n")
125
127
  logger.info(`安装成功!`)
126
- logger.info(
127
- `👉 请在浏览器中访问 https://${manifest["application"]["subdomain"]}.${shellapi.boxname}.heiyu.space`
128
- )
129
- logger.info(`👉 并使用微服的用户名和密码登录`)
128
+ if (manifest) {
129
+ logger.info(
130
+ `👉 请在浏览器中访问 https://${manifest["application"]["subdomain"]}.${shellapi.boxname}.heiyu.space`
131
+ )
132
+ logger.info(`👉 并使用微服的用户名和密码登录`)
133
+ }
130
134
  }
131
135
  }
@@ -3,6 +3,7 @@ import logger from "loglevel"
3
3
  import { PrePublish } from "./prePublish.js"
4
4
  import { reLogin, request } from "./login.js"
5
5
  import fs from "node:fs"
6
+ import { sleep } from "../utils.js"
6
7
 
7
8
  export function appstoreCommand(program) {
8
9
  let subCommands = [
@@ -72,13 +73,21 @@ export function appstoreCommand(program) {
72
73
  logger.info(
73
74
  `Waiting ... ( copy ${imageName} to lazycat offical registry)`
74
75
  )
75
-
76
76
  try {
77
- const resp = await request(`${baseUrl}/push-image?image=${imageName}`)
78
- if (resp.ok) {
79
- logger.info("lazycat-registry:", await resp.text())
80
- } else {
81
- logger.error("error: ", await resp.text())
77
+ for (; ;) {
78
+ const resp = await request(`${baseUrl}/push-image?image=${imageName}&v=2`)
79
+ if (resp.ok) {
80
+ const tag = await resp.text()
81
+ if (tag.length == 0) {
82
+ await sleep(2500)
83
+ continue
84
+ }
85
+ logger.info("lazycat-registry:", tag)
86
+ } else {
87
+ logger.error("error: ", await resp.text())
88
+ }
89
+
90
+ break;
82
91
  }
83
92
  } catch (err) {
84
93
  console.error(err)
@@ -84,11 +84,19 @@ async function interactiveLogin() {
84
84
  await login(info.username, info.password)
85
85
  } catch (e) {
86
86
  logger.debug("login error: ", e)
87
- logger.info("帐号或者密码错误,请重新输入!")
87
+ logger.error("帐号或者密码错误,请重新输入!")
88
88
  return interactiveLogin()
89
89
  }
90
90
  }
91
91
 
92
+ function tipsFirstLogin() {
93
+ let token = env.get("token")
94
+ if (!token) {
95
+ // 还没登录过的用户提示用户前往 https://developer.lazycat.cloud/manage 注册开发者账号
96
+ logger.info("请登录懒猫微服社区账号,账号注册以及开发者权限申请地址: https://developer.lazycat.cloud/manage")
97
+ }
98
+ }
99
+
92
100
  export async function reLogin() {
93
101
  let token = await isLogin()
94
102
  if (token) {
@@ -105,6 +113,8 @@ export async function reLogin() {
105
113
  logger.info(`token: ${token}`)
106
114
  return
107
115
  }
116
+ } else {
117
+ tipsFirstLogin()
108
118
  }
109
119
  await interactiveLogin()
110
120
  }
@@ -114,6 +124,8 @@ export async function autoLogin() {
114
124
  if (token) {
115
125
  logger.debug("appstore 已经登录")
116
126
  return
127
+ } else {
128
+ tipsFirstLogin()
117
129
  }
118
130
 
119
131
  logger.debug("token错误,尝试自动登录")
@@ -15,6 +15,9 @@ import {
15
15
  import logger from "loglevel"
16
16
  import commandExists from "command-exists"
17
17
  import path from "node:path"
18
+ import fetch from "node-fetch"
19
+
20
+ const bannerfileContent = `˄=ᆽ=ᐟ \\`
18
21
 
19
22
  export function sshBinary() {
20
23
  if (isWindows) {
@@ -42,12 +45,40 @@ export class DebugBridge {
42
45
  }
43
46
 
44
47
  async init() {
48
+ await this.checkDevTools()
45
49
  if (!(await this.canPublicKey())) {
46
50
  // 如果不能 ssh public key 登录则提示授权申请,否则后面可能会出现 rsync 询问密码的问题
47
51
  await this.sshApplyGrant()
48
52
  }
49
53
  }
50
54
 
55
+ async checkDevTools() {
56
+ const url = `https://dev.${this.boxname}.heiyu.space/bannerfile`
57
+ return new Promise((resolve, reject) => {
58
+ fetch(url, { redirect: "error" })
59
+ .then(async (res) => {
60
+ const content = await res.text()
61
+ if (res.status == 200 && content == bannerfileContent) {
62
+ resolve()
63
+ return
64
+ }
65
+ logger.warn(
66
+ `检测到你还没有安装 '懒猫开发者工具',请先到商店中搜索安装
67
+ 点击直接跳转 https://appstore.${this.boxname}.heiyu.space/#/shop/detail/cloud.lazycat.developer.tools
68
+ 点击打开应用 https://dev.${this.boxname}.heiyu.space 查看应用状态
69
+ `
70
+ )
71
+ reject()
72
+ })
73
+ .catch(() => {
74
+ logger.error(
75
+ `检测懒猫开发者工具失败,请检测您当前的网络或者懒猫微服客户端是否正常启动。`
76
+ )
77
+ reject()
78
+ })
79
+ })
80
+ }
81
+
51
82
  async common(cmd, args) {
52
83
  const resolvedIp = await resolveDomain(this.domain)
53
84
  args = args.map((arg) => arg.replace(this.domain, resolvedIp))
@@ -73,7 +104,8 @@ export class DebugBridge {
73
104
  sshBinary(),
74
105
  [
75
106
  ...sshCmdArgs(`box@${resolvedIp}`),
76
- `install --uid ${this.uid} --pkgId ${pkgId}`
107
+ `install --uid ${this.uid}`,
108
+ pkgId ? `--pkgId ${pkgId}` : ""
77
109
  ],
78
110
  {
79
111
  shell: true,
package/lib/shellapi.js CHANGED
@@ -11,9 +11,6 @@ import path from "node:path"
11
11
  import fs from "node:fs"
12
12
  import os from "node:os"
13
13
  import logger from "loglevel"
14
- import fetch from "node-fetch"
15
-
16
- const bannerfileContent = `˄=ᆽ=ᐟ \\`
17
14
 
18
15
  /**
19
16
  * @link {https://www.npmjs.com/package/appdirs}
@@ -77,7 +74,6 @@ NOTE:在指定环境变量的模式下,有些接口依旧不能访问,为
77
74
  this.metadata = md
78
75
  this.info = await this.initBoxInfo()
79
76
  }
80
- await this.checkDevTools()
81
77
  }
82
78
 
83
79
  get boxname() {
@@ -140,33 +136,6 @@ NOTE:在指定环境变量的模式下,有些接口依旧不能访问,为
140
136
  throw "没有默认盒子信息, 请先使用 lzc-cli box switch 设置默认的盒子信息"
141
137
  }
142
138
 
143
- async checkDevTools() {
144
- const url = `https://dev.${this.info.boxname}.heiyu.space/bannerfile`
145
- return new Promise((resolve, reject) => {
146
- fetch(url, { redirect: "error" })
147
- .then(async (res) => {
148
- const content = await res.text()
149
- if (res.status == 200 && content == bannerfileContent) {
150
- resolve()
151
- return
152
- }
153
- logger.warn(
154
- `检测到你还没有安装 '懒猫开发者工具',请先到商店中搜索安装
155
- 点击直接跳转 https://appstore.${this.info.boxname}.heiyu.space/#/shop/detail/cloud.lazycat.developer.tools
156
- 点击打开应用 https://dev.${this.info.boxname}.heiyu.space 查看应用状态
157
- `
158
- )
159
- reject()
160
- })
161
- .catch(() => {
162
- logger.error(
163
- `检测懒猫开发者工具失败,请检测您当前的网络或者懒猫微服客户端是否正常启动。`
164
- )
165
- reject()
166
- })
167
- })
168
- }
169
-
170
139
  checkEnvProxy() {
171
140
  if (
172
141
  process.env.HTTPS_PROXY ||
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazycatcloud/lzc-cli",
3
- "version": "1.2.58",
3
+ "version": "1.2.60",
4
4
  "description": "lazycat cloud developer kit",
5
5
  "scripts": {
6
6
  "prepublishOnly": "node check-changelog.js"
@@ -3,13 +3,13 @@
3
3
  # buildscript
4
4
  # - 可以为构建脚本的路径地址
5
5
  # - 如果构建命令简单,也可以直接写 sh 的命令
6
- buildscript: npm run build
6
+ # buildscript:
7
7
 
8
8
  # manifest: 指定 lpk 包的 manifest.yml 文件路径
9
9
  manifest: ./lzc-manifest.yml
10
10
 
11
11
  # contentdir: 指定打包的内容,将会打包到 lpk 中
12
- contentdir: ./dist
12
+ # contentdir: ./
13
13
 
14
14
  # pkgout: lpk 包的输出路径
15
15
  pkgout: ./
@@ -17,7 +17,6 @@ pkgout: ./
17
17
  # icon 指定 lpk 包 icon 的路径路径,如果不指定将会警告
18
18
  # icon 仅仅允许 png 后缀的文件
19
19
  icon: ./lzc-icon.png
20
-
21
20
  # devshell 自定义应用的开发容器环境
22
21
  # - routers 指定应用容器的访问路由
23
22
 
@@ -44,16 +43,16 @@ icon: ./lzc-icon.png
44
43
  # dvshell 指定开发依赖的情况
45
44
  # 这种情况下,选用 alpine:latest 作为基础镜像,在 dependencies 中添加所需要的开发依赖即可
46
45
  # 如果 dependencies 和 build 同时存在,将会优先使用 dependencies
47
- devshell:
48
- routes:
49
- - /=http://127.0.0.1:3000
50
- dependencies:
51
- - nodejs
52
- - npm
53
- # setupscript 每次进入到app container后都会执行的配置脚本
54
- # - 可以为脚本的路径地址
55
- # - 如果构建命令简单,也可以直接写 sh 的命令
56
- # setupscript: export GOPROXY=https://goproxy.cn
57
- # setupscript: ./setupscript.sh
58
- setupscript: |
59
- export npm_config_registry=https://registry.npmmirror.com
46
+ # devshell:
47
+ # routes:
48
+ # - /=http://127.0.0.1:3000
49
+ # dependencies:
50
+ # - nodejs
51
+ # - npm
52
+ # # setupscript 每次进入到app container后都会执行的配置脚本
53
+ # # - 可以为脚本的路径地址
54
+ # # - 如果构建命令简单,也可以直接写 sh 的命令
55
+ # # setupscript: export GOPROXY=https://goproxy.cn
56
+ # # setupscript: ./setupscript.sh
57
+ # setupscript: |
58
+ # export npm_config_registry=https://registry.npmmirror.com
@@ -2,11 +2,11 @@ lzc-sdk-version: 0.1
2
2
  name: helloworld
3
3
  package: cloud.lazycat.app.helloworld
4
4
  version: 0.0.1
5
- description:
5
+ description:
6
6
  license: https://choosealicense.com/licenses/mit/
7
- homepage:
8
- author:
7
+ homepage:
8
+ author:
9
9
  application:
10
10
  subdomain: helloworld
11
11
  routes:
12
- - /=file:///lzcapp/pkg/content/dist
12
+ - /=https://developer.lazycat.cloud/
@@ -1,16 +0,0 @@
1
- lzc-sdk-version: 0.1
2
-
3
- package: ${package} # app的唯一标识符
4
- version: ${version} # app的版本
5
- name: ${name} # app名称
6
- description: ${description} # app描述
7
-
8
- license: https://choosealicense.com/licenses/mit/
9
- homepage: ${homepage} # 出现bug时候提交反馈的地方
10
- author: ${author} # app author
11
-
12
- #application作为一个特殊的container运行,对应的service名称为固定的`app`,其他service可以通过此名称与app进行通讯
13
- application:
14
- subdomain: ${subdomain} #期望的app域名
15
- routes:
16
- - /=exec://3000,/lzcapp/pkg/content/rego -html /lzcapp/pkg/content/index.html
@@ -1,19 +0,0 @@
1
- lzc-sdk-version: 0.1
2
-
3
- package: ${package} # app的唯一标识符
4
- version: ${version} # app的版本
5
- name: ${name} # app名称
6
- description: ${description} # app描述
7
-
8
- license: https://choosealicense.com/licenses/mit/
9
- homepage: ${homepage} # 出现bug时候提交反馈的地方
10
- author: ${author} # app author
11
-
12
- #application作为一个特殊的container运行,对应的service名称为固定的`app`,其他service可以通过此名称与app进行通讯
13
- application:
14
- subdomain: ${subdomain} #期望的app域名
15
- routes:
16
- - /=https://lazycat.cloud
17
- handlers:
18
- error_page_templates:
19
- 502: /lzcapp/pkg/content/502.html.tpl
@@ -1 +0,0 @@
1
- rego
@@ -1,10 +0,0 @@
1
- # rego
2
-
3
- Rego is an online Go regular expression tester
4
-
5
- Inspired by [rubular](http://rubular.com/).
6
-
7
- ## TODO
8
-
9
- - Sharing (permalink)
10
- - Add developer documentation
@@ -1,2 +0,0 @@
1
- build/*
2
- *.lpk