mono repo utils - has strong opinions!
npm install @pie-api/mrumono repo utils - has strong opinions!
You have a cloud funtion here: functions/my-fn, then mru my-fn will:
1. bundles functions/my-fn/lib/index.ts
2. creates zip file
3. pushes zip to gcloud storage
4. gcloud deploys w/ env vars + flags
mru my-container will:
1. bundle containers/my-container/lib/index.ts
2. docker builds w/ tag
3. docker push tag
3. gcloud deploys w/ env vars
mru will read mru.config.js from the cwd. It can overrides the following properties.
mru will also read in command line flags, these will take highest priority.
From the above we build a Config that has the following form:
``ts
export type Config = {
envDir: string; // required
projectId: string; // required
region: string; // required
bucketPath: (projectId: string, region: string) => string; // required
dockerRegistry: string; // 'grc.io'
containers: string; //'containers'
functions: string; //'functions'
dryRun: boolean; // false
/**
* All true by default set --no-bundle to disable bundle.
* same for the others
*/
steps: {
bundle: boolean;
docker: boolean;
deploy: boolean;
};
/**
* This is generated by mru - don't need to set it
*/
git?: {
hash: string;
};
}
`
mru will generate the deployment arguments for a container/function using 2 sources:
1. the loaded env file loaded from $envDir/$projectId.yaml.cloud
1. the map in the package's package.json
json
{
"name": "my-fn",
"cloud": {
"deployFlags": {
"foo": "$ENV_VAR"
},
"environment":{
"ENV_VAR": "$ENV_VAR"
}
}
}
`
env:
`yaml
ENV_VAR: bar`
in the above:
1. deployFlags.foo will be converted to --foo bar and passed to the appropriate gcloud command.
1. the env vars will be set to --set-env-vars ENV_VAR=bar`By doing this, we can put all our env vars in 1 place, and each pkg will only pull what it needs.