@fnet/cli 0.14.1 → 0.14.2
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.
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/readme.md +43 -4
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e,t,s=require("@flownet/lib-load-fnet-config"),i=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),w=require("keycloak-connect"),p=require("qs");function _(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var b,f,m,y,k={name:"@fnet/cli",version:"0.14.
|
|
2
|
+
"use strict";var e,t,s=require("@flownet/lib-load-fnet-config"),i=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),w=require("keycloak-connect"),p=require("qs");function _(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var b,f,m,y,k={name:"@fnet/cli",version:"0.14.2",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},dependencies:{"@flownet/lib-atom-api-js":"^0.1.8","@flownet/lib-bpmn-from-flow":"^0.1.7","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-load-fnet-config":"^0.2.1","@flownet/lib-parse-imports-js":"^0.1.35","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@flownet/lib-upload-files-to-gcs":"^0.1.12","@flownet/template-node-common":"^0.12.0","@flownet/template-node-library":"^0.12.0","@flownet/template-node-workflow":"^0.12.0","@fnet/expression":"^0.1.5","@fnet/shell":"^0.1.9","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^22.0.3","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^3.29.1"}};const v=process.cwd();s({name:["server","redis"],dir:v,optional:!0}),async function(){const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,s=n,i=o,r=l,g=function(){if(f)return b;f=1;const e=n,t=d,s=c,{nanoid:i}=a;return b=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;s.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),j=function(){if(y)return m;y=1;const e=n,t=d,s=c,{nanoid:i}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),E=u,x=h,q=new(0,x.MemoryStore),S=new w({store:q}),I=s(),R=p;I.set("query parser",(function(e){return R.parse(e,{depth:12})})),I.use(x({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:q})),I.use(r()),I.use(i()),I.use(s.json({limit:"1024kb"})),I.get("/healthz",(function(e,t){t.sendStatus(200)})),I.use(E.mw()),I.use(S.middleware()),new g({keycloak:S,wdir:v,redisClient:e}).join("/v1",I),new j({keycloak:S,wdir:v,redisClient:e}).join("/v1",I),I.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)}().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -86,12 +86,10 @@ env:
|
|
|
86
86
|
```
|
|
87
87
|
Replace `YOUR_NPM_TOKEN` with your npm token for deployment authentication.
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
### Configuration for GCS Deployment
|
|
90
90
|
|
|
91
91
|
The `@fnet/cli` also facilitates deploying build packages directly to a Google Cloud Storage bucket.
|
|
92
92
|
|
|
93
|
-
### Configuration for GCS Deployment
|
|
94
|
-
|
|
95
93
|
To deploy to a Google Cloud Storage bucket, add a new target named `gcs` under the `targets` section in your `devops.yaml`:
|
|
96
94
|
|
|
97
95
|
```yaml
|
|
@@ -123,4 +121,45 @@ Make sure to replace the placeholders with the appropriate values:
|
|
|
123
121
|
|
|
124
122
|
- `YOUR_PROJECT_ID`: Your Google Cloud project ID.
|
|
125
123
|
- `YOUR_BUCKET_NAME`: The name of the GCS bucket where you want to deploy.
|
|
126
|
-
- `PATH_TO_YOUR_SERVICE_ACCOUNT_KEY_JSON`: Path to the service account key in JSON format, which has the necessary permissions to upload files to the specified bucket.
|
|
124
|
+
- `PATH_TO_YOUR_SERVICE_ACCOUNT_KEY_JSON`: Path to the service account key in JSON format, which has the necessary permissions to upload files to the specified bucket.
|
|
125
|
+
|
|
126
|
+
### Configuration for GitLab Deployment
|
|
127
|
+
|
|
128
|
+
With the `@fnet/cli`, you can also deploy the contents of the `.workspace` directory directly to GitLab.
|
|
129
|
+
|
|
130
|
+
To deploy to GitLab, introduce a new target named `gitlab` under the `targets` section in your `devops.yaml`:
|
|
131
|
+
|
|
132
|
+
```yaml
|
|
133
|
+
targets:
|
|
134
|
+
...
|
|
135
|
+
- name: gitlab
|
|
136
|
+
enabled: true
|
|
137
|
+
params:
|
|
138
|
+
name: PROJECT-NAME
|
|
139
|
+
branch: BRANCH-NAME
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Replace `PROJECT-NAME` with the name of your GitLab project and `BRANCH-NAME` with the branch where you want to deploy the contents.
|
|
143
|
+
|
|
144
|
+
### GitLab Configuration File:
|
|
145
|
+
|
|
146
|
+
For the GitLab deployment, the CLI searches for a `gitlab.fnet` file under the first `.fnet` directory (either in the project root, parent directory, or user's home directory). The expected format for this file is:
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
version: 1
|
|
150
|
+
type: fnet.config
|
|
151
|
+
data:
|
|
152
|
+
projectGroupId: "YOUR_PROJECT_GROUP_ID"
|
|
153
|
+
gitlabHost: "YOUR_GITLAB_HOST"
|
|
154
|
+
gitlabToken: "YOUR_GITLAB_TOKEN"
|
|
155
|
+
gitlabUsername: "YOUR_USERNAME"
|
|
156
|
+
gitlabUserEmail: "YOUR_EMAIL"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Make sure to replace the placeholders with the appropriate values:
|
|
160
|
+
|
|
161
|
+
- `YOUR_PROJECT_GROUP_ID`: The ID of your GitLab project group.
|
|
162
|
+
- `YOUR_GITLAB_HOST`: The hostname of your GitLab instance (e.g., "gitlab.com" for GitLab's public instance).
|
|
163
|
+
- `YOUR_GITLAB_TOKEN`: Your GitLab personal access token.
|
|
164
|
+
- `YOUR_USERNAME`: Your GitLab username.
|
|
165
|
+
- `YOUR_EMAIL`: The email associated with your GitLab account.
|