https://github.com/battis/partly-gcloudy
Idiosyncratic collection of interactions with `gcloud` CLI tool
https://github.com/battis/partly-gcloudy
gcloud google-api-client google-cloud
Last synced: 15 days ago
JSON representation
Idiosyncratic collection of interactions with `gcloud` CLI tool
- Host: GitHub
- URL: https://github.com/battis/partly-gcloudy
- Owner: battis
- License: gpl-3.0
- Created: 2023-06-19T15:54:53.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-05T17:35:32.000Z (about 2 months ago)
- Last Synced: 2025-03-27T12:52:30.385Z (about 1 month ago)
- Topics: gcloud, google-api-client, google-cloud
- Language: TypeScript
- Homepage:
- Size: 1.4 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# @battis/partly-gcloudy
Idiosyncratic collection of interactions with `gcloud` CLI tool
[](https://badge.fury.io/js/@battis%2Fpartly-gcloudy)
[](https://nodejs.org/api/esm.html)## Install
`npm i @battis/partly-gcloudy`
## Usage
This is an ESM module that depends on other ESM modules, and so really can only feasibly be imported by ESM modules.
```js
import * as gcloud from '@battis/partly-gcloudy';await gcloud.init();
await gcloud.app.deploy();
```## Design
This is really designed to meet my needs (type-safe, fat-finger-preventative, repetitive interactions with Google Cloud). There are a few basic principles:
- Property names match up with the `gcloud` CLI verbs.
`gcloud projects describe` becomes `gcloud.projects.describe()`
- Method parameters are the names used in the corresponding `gcloud` CLI tool documentation, camelCased.
`gcloud projects describe PROJECT_ID_OR_NUMBER` becomes
`gcloud.projects.describe({ projectId: 'flim-flam-1234' })`
- Methods are typed to hint their parameters, which are passed as object arguments to facilitate hyper-aggressive type-checking in a loosey-goosey manner. Argument order is too much to worry about.
`gcloud.projects.describe({ projectId: 'flim-flam-1234' })`
- Methods are information-agnostic -- if you don't pass some or all of the arguments, they'll interactively ask the user for what they need.
`gcloud.projects.create()` works. If it really can't be done, it will fail with a demonstrative error.
- All "verb" methods are asynchronous.
- All input is validated to the extent possible.#### `gcloud.*.input*()` and `gcloud.*.select*()`
Where user input may be required (or validated) the different types of input relevant to a `gcloud` verb are grouped within the property.
```js
let projectId = '_$argle-bargle';
projectId = await gcloud.projects.inputProjectId({ projectId });
```The initial `projectId` value is invalid, will fail the validation, and result in interactive user-input to choose a valid project ID.
## Batch operations
As I need them, I am packaging up modular batches of operations in the `gcloud.batch` namespace.
```js
import gcloud from '@battis/partly-gcloudy';await gcloud.batch.appEnginePublish();
```This will create a Google Cloud project (or reuse an existing one, if you enter an existing project ID or have your environment variable `PROJECT` set), configure an App Engine Instance in that project, if necessary, and deploy the current project to that App Engine instance.