UNPKG

@adenin/generator-cloud-function

Version:
180 lines (120 loc) 7.04 kB
# generator-cloud-function > Generate a boilerplate adenin cloud function repo ## Installation First, install [Yeoman](http://yeoman.io) and generator-cloud-function using [npm](https://www.npmjs.com/) (we assume you have pre-installed [node.js](https://nodejs.org/)). ```bash npm install -g yo npm install -g @adenin/generator-cloud-function ``` ## Usage Generate your new project: ```bash yo @adenin/cloud-function ``` You will then be guided through the creation process with terminal prompts, asking you enter a server name and create any desired activity templates. ## Adding to an existing project From within an existing repo, you can add a new activity boilerplate by just calling the generator while your terminal is inside the existing function folder. ```bash # make sure you're in your project folder cd my-project # generate one or more services with the given names yo @adenin/cloud-function ``` Once generated, you simply need to implement your function behaviour in `./activities/{activityName}.js`, and the remainder of the files can be left alone. You can also run either of the commands without arguments to construct boilerplate through prompting interface: To update the infrastructure of a cloud function repo to a newer version, use the update subgenerator: ```bash npm update -g @adenin/generator-cloud-function cd my-cloud-function yo @adenin/cloud-function:update ``` Check any override warnings to ensure that none of your own code is going to be overwritten. ## Using the repo as a hybrid v1 connector Generation will also create `.yaml` configuration files which affect behaviour in v1 only. The process of creating a hybrid connector within v1 is much the same as above, and from start to end, might look like: ```bash npm install -g @adenin/generator-cloud-function cd SpacesLocal\\Global\\Connectors yo @adenin/cloud-function # ... follow the on screen creation prompts ``` You'd then end up with a repo similar to this: ```txt ./my-hybrid-connector ├── .vscode | ├── launch.json | └── settings.json ├── activities | ├── common | | └── api.js | ├── ping.js | └── function.json ├── _definition.yaml ├── _service.ping.yaml ├── .gcloudignore ├── .gitignore ├── app.js ├── azure-pipelines.yml ├── host.json ├── index.js └── README.md ``` The connector would be exposed to v1 with name _my-hybrid-connector_ by default, with service _ping_ available, where `ping.js` would only contain empty boilerplate. The YAML configurations could then be altered as normal to adjust the functionality of the connector and service, and another service boilerplate could be added with: ```bash cd my-hybrid-connector yo @adenin/cloud-function ``` ...and then following the on screen prompts as before. The generator will automatically run `npm install` upon completion. ## Developing with the cf dependencies locally (cf-provider, cf-activity, cf-logger) For the generator to reflect any changes made to one of the three common dependencies, any changes must be published to npm. You will therefore also need to develop and test locally with the repos beforehand. ### Link your function repo to the development dependency clone When developing with the dependencies, you probably want your function repo to reflect the changes you are making without having to manually edit require statements, copy and paste changes, or publish unstable versions to npm itself. This can be achieved by using the `npm link` functionality as follows: ```bash # clone the dependency you want to update, e.g. cf-activity git clone https://github.com/adenin-platform/cf-activity cd cf-activity # link the clone to a global node_modules installation npm link ``` You will now have a global installation of the module which actually references the development folder, and any changes to the code will be immediately reflected. Next is to tell your function repo to now refer to this local installation: ```bash # cd into your function repo cd my-function # tell the repo to reference the previously created link (cf-activity in this example) npm link @adenin/cf-activity ``` Your function repo will now be calling the scripts in your local development clone of the dependency, and during debugging in VS code, breakpoints within your dependency clone should also be hit. Once you have finished testing your changes and want to reset your function repo to refer the the published npm package again, do the following: ```bash # enter your function repo cd my-function # reinstall the dependency from npm npm uninstall --no-save @adenin/cf-activity && npm install ``` The `npm unlink` command is only an alias for `npm uninstall` and so running it will not simply undo the linking process, but uninstall the dependency completely. So instead use the above process to reinstall from npm without affecting your `package.json`. > If the module you are linking depends on another local module that you want to develop and debug simultaneously - e.g. _cf-logger_ could be such a case - you need to work through the steps in this section once for each level of project nesting. > >For example with _cf-logger_, first linking it to a global reference, then linking your copy of _cf-activity_ and/or _cf-provider_ to that reference, then linking those to a global reference, before finally linking your function repo to those references. ### Updating one of the dependencies For the updates to the dependencies to be installable by other users, and for the generator to install them upon next use, they must be re-published to npm. The process is as follows (using cf-activity as an example, but same for all repos): ```bash # go into the local repo clone where you have been making changes cd cf-activity # commit them git add . git commit -m "my changes" # increment npm version and publish npm version patch # or 'minor' for new features, 'major' for breaking API changes (see below) npm publish # push to git to reflect changes + new version number git push origin master # go into the function repo and fetch the new changes cd my-cloud-function npm update # OR yo @adenin/cloud-function:update # (also apply any changes to generator) ``` #### Major npm versions If the changes break the API of the module, npm version should be incremented by 'major' number. To avoid accidentally breaking existing function repos, neither `npm update`, nor the update subgenerator, will fetch new major versions. The major version number will have to be explicitly specified to the npm update command to override this, or the generator will need to be changed to ensure the API changes are addressed, then have it's `package.json` template, and update subgenerator npm commands, updated to allow the new major version.