@leverege/build-tools 2.8.12 → 2.8.13
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/lib/server/repo-init/config.tgz +0 -0
- package/package.json +5 -1
- package/src/anchor +41 -0
- package/src/dockreate +1 -1
- package/lib/server/service-man/Config.js +0 -45
- package/lib/server/service-man/ServiceMan.js +0 -42
- package/lib/server/service-man/index.js +0 -6
- package/lib/server/service-man/utils/Shell.js +0 -102
- package/lib/server/service-man/utils/VersionCheck.js +0 -82
- package/lib/server/service-man/utils/index.js +0 -67
- package/lib/web/service-man/Config.js +0 -45
- package/lib/web/service-man/ServiceMan.js +0 -42
- package/lib/web/service-man/index.js +0 -6
- package/lib/web/service-man/utils/Shell.js +0 -102
- package/lib/web/service-man/utils/VersionCheck.js +0 -82
- package/lib/web/service-man/utils/index.js +0 -67
- package/src/helm-starters/baseline/Chart.yaml +0 -4
- package/src/helm-starters/baseline/templates/NOTES.txt +0 -52
- package/src/helm-starters/baseline/templates/configmap.yaml +0 -6
- package/src/helm-starters/baseline/templates/deployment.yaml +0 -97
- package/src/helm-starters/baseline/templates/hpa.yaml +0 -12
- package/src/helm-starters/baseline/templates/ingress.yaml +0 -17
- package/src/helm-starters/baseline/templates/pdb.yaml +0 -9
- package/src/helm-starters/baseline/templates/service.yaml +0 -16
- package/src/helm-starters/baseline/templates/serviceaccount.yaml +0 -10
- package/src/helm-starters/baseline/values.yaml +0 -57
- package/src/helm-starters/deprecated/Chart.yaml +0 -4
- package/src/helm-starters/deprecated/templates/NOTES.txt +0 -52
- package/src/helm-starters/deprecated/templates/configmap.yaml +0 -11
- package/src/helm-starters/deprecated/templates/deployment.yaml +0 -103
- package/src/helm-starters/deprecated/templates/hpa.yaml +0 -12
- package/src/helm-starters/deprecated/templates/ingress.yaml +0 -17
- package/src/helm-starters/deprecated/templates/pdb.yaml +0 -9
- package/src/helm-starters/deprecated/templates/service.yaml +0 -13
- package/src/helm-starters/deprecated/templates/serviceaccount.yaml +0 -10
- package/src/helm-starters/deprecated/values.yaml +0 -44
- package/src/sa-tools/imp-sa +0 -26
- package/src/sa-tools/roles/baseline/leveregeBigQueryReader.json +0 -10
- package/src/sa-tools/roles/baseline/leveregeBigQueryWriter.json +0 -10
- package/src/sa-tools/roles/baseline/leveregeCloudFunctionsAdmin.json +0 -12
- package/src/sa-tools/roles/baseline/leveregeFirebaseUpdates.json +0 -8
- package/src/sa-tools/roles/baseline/leveregeLogsViewer.json +0 -8
- package/src/sa-tools/roles/baseline/leveregePubSub.json +0 -13
- package/src/sa-tools/roles/baseline/leveregeSecretsViewer.json +0 -8
- package/src/sa-tools/roles/baseline/leveregeStorageObjectAccess.json +0 -10
- package/src/sa-tools/roles/baseline/leveregeSvcAcctActor.json +0 -8
- package/src/sa-tools/roles/baseline/leveregeSvcAcctTokenCreator.json +0 -8
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeBigQueryReader.json +0 -10
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeBigQueryWriter.json +0 -10
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeCloudFunctionsAdmin.json +0 -12
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeFirebaseUpdates.json +0 -8
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeLogsViewer.json +0 -8
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregePubSub.json +0 -13
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeSecretsViewer.json +0 -8
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeStorageObjectAccess.json +0 -10
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeSvcAcctActor.json +0 -8
- package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeSvcAcctTokenCreator.json +0 -8
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeBigQueryReader.json +0 -10
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeBigQueryWriter.json +0 -10
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeCloudFunctionsAdmin.json +0 -12
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeFirebaseUpdates.json +0 -8
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeLogsViewer.json +0 -8
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregePubSub.json +0 -13
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeSecretsViewer.json +0 -8
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeStorageObjectAccess.json +0 -10
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeSvcAcctActor.json +0 -8
- package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeSvcAcctTokenCreator.json +0 -8
- package/src/sa-tools/roles-grab +0 -30
- package/src/sa-tools/roles-push +0 -19
- package/src/sa-tools/sh-make-sa +0 -58
- package/src/service-man/Config.js +0 -40
- package/src/service-man/ServiceMan.js +0 -32
- package/src/service-man/index.js +0 -5
- package/src/service-man/utils/Shell.js +0 -95
- package/src/service-man/utils/VersionCheck.js +0 -77
- package/src/service-man/utils/index.js +0 -54
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "Leverege limited Cloud Functions Admin",
|
|
3
|
-
"includedPermissions": [
|
|
4
|
-
"cloudfunctions.functions.create",
|
|
5
|
-
"cloudfunctions.functions.delete",
|
|
6
|
-
"cloudfunctions.functions.get",
|
|
7
|
-
"cloudfunctions.functions.sourceCodeSet",
|
|
8
|
-
"cloudfunctions.functions.update"
|
|
9
|
-
],
|
|
10
|
-
"stage": "BETA",
|
|
11
|
-
"title": "Leverege Cloud Functions Admin"
|
|
12
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "Leverege Pub/Sub",
|
|
3
|
-
"includedPermissions": [
|
|
4
|
-
"pubsub.subscriptions.consume",
|
|
5
|
-
"pubsub.subscriptions.create",
|
|
6
|
-
"pubsub.topics.attachSubscription",
|
|
7
|
-
"pubsub.topics.create",
|
|
8
|
-
"pubsub.topics.list",
|
|
9
|
-
"pubsub.topics.publish"
|
|
10
|
-
],
|
|
11
|
-
"stage": "BETA",
|
|
12
|
-
"title": "Leverege Pub/Sub"
|
|
13
|
-
}
|
package/src/sa-tools/roles/leverege-dev-john/20220113-121423/leveregeCloudFunctionsAdmin.json
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "Leverege limited Cloud Functions Admin",
|
|
3
|
-
"includedPermissions": [
|
|
4
|
-
"cloudfunctions.functions.create",
|
|
5
|
-
"cloudfunctions.functions.delete",
|
|
6
|
-
"cloudfunctions.functions.get",
|
|
7
|
-
"cloudfunctions.functions.sourceCodeSet",
|
|
8
|
-
"cloudfunctions.functions.update"
|
|
9
|
-
],
|
|
10
|
-
"stage": "BETA",
|
|
11
|
-
"title": "Leverege Cloud Functions Admin"
|
|
12
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "Leverege Pub/Sub",
|
|
3
|
-
"includedPermissions": [
|
|
4
|
-
"pubsub.subscriptions.consume",
|
|
5
|
-
"pubsub.subscriptions.create",
|
|
6
|
-
"pubsub.topics.attachSubscription",
|
|
7
|
-
"pubsub.topics.create",
|
|
8
|
-
"pubsub.topics.list",
|
|
9
|
-
"pubsub.topics.publish"
|
|
10
|
-
],
|
|
11
|
-
"stage": "BETA",
|
|
12
|
-
"title": "Leverege Pub/Sub"
|
|
13
|
-
}
|
package/src/sa-tools/roles/prd-indoor-zoning/20220113-121935/leveregeCloudFunctionsAdmin.json
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "Leverege limited Cloud Functions Admin",
|
|
3
|
-
"includedPermissions": [
|
|
4
|
-
"cloudfunctions.functions.create",
|
|
5
|
-
"cloudfunctions.functions.delete",
|
|
6
|
-
"cloudfunctions.functions.get",
|
|
7
|
-
"cloudfunctions.functions.sourceCodeSet",
|
|
8
|
-
"cloudfunctions.functions.update"
|
|
9
|
-
],
|
|
10
|
-
"stage": "BETA",
|
|
11
|
-
"title": "Leverege Cloud Functions Admin"
|
|
12
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "Leverege Pub/Sub",
|
|
3
|
-
"includedPermissions": [
|
|
4
|
-
"pubsub.subscriptions.consume",
|
|
5
|
-
"pubsub.subscriptions.create",
|
|
6
|
-
"pubsub.topics.attachSubscription",
|
|
7
|
-
"pubsub.topics.create",
|
|
8
|
-
"pubsub.topics.list",
|
|
9
|
-
"pubsub.topics.publish"
|
|
10
|
-
],
|
|
11
|
-
"stage": "BETA",
|
|
12
|
-
"title": "Leverege Pub/Sub"
|
|
13
|
-
}
|
package/src/sa-tools/roles-grab
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# To fetch Leverege custom role names:
|
|
4
|
-
# gcloud --project=<PROJ_NAME> iam roles list --filter=Leverege | grep name
|
|
5
|
-
#
|
|
6
|
-
LEVEREGE_ROLES=(
|
|
7
|
-
leveregeBigQueryReader
|
|
8
|
-
leveregeBigQueryWriter
|
|
9
|
-
leveregeCloudFunctionsAdmin
|
|
10
|
-
leveregeFirebaseUpdates
|
|
11
|
-
leveregeLogsViewer
|
|
12
|
-
leveregePubSub
|
|
13
|
-
leveregeSecretsViewer
|
|
14
|
-
leveregeStorageObjectAccess
|
|
15
|
-
leveregeSvcAcctActor
|
|
16
|
-
leveregeSvcAcctTokenCreator
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
PROJ=${1:-leverege-sandbox}
|
|
20
|
-
DTS="`date +\"%Y%m%d-%H%M%S\"`"
|
|
21
|
-
ROLESDIR="roles/${PROJ}/${DTS}"
|
|
22
|
-
mkdir -p $ROLESDIR
|
|
23
|
-
|
|
24
|
-
for ROLE in "${LEVEREGE_ROLES[@]}";
|
|
25
|
-
do
|
|
26
|
-
JSON="${ROLESDIR}/${ROLE}.json"
|
|
27
|
-
printf "Fetching role $ROLE\n"
|
|
28
|
-
gcloud --project leverege-sandbox iam roles describe $ROLE \
|
|
29
|
-
--format=json | jq '{description,includedPermissions,stage,title}' > $JSON
|
|
30
|
-
done
|
package/src/sa-tools/roles-push
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
PROJ="${1:-leverege-sandbox}"
|
|
4
|
-
|
|
5
|
-
printf "\n Create/Update IAM Roles for => $PROJ\n\n"
|
|
6
|
-
|
|
7
|
-
cd roles/baseline
|
|
8
|
-
for JSON in leverege*.json;
|
|
9
|
-
do
|
|
10
|
-
ROLE=`basename $JSON .json`
|
|
11
|
-
IAM_VERB="create"
|
|
12
|
-
|
|
13
|
-
gcloud --project $PROJ iam roles describe $ROLE &>/dev/null
|
|
14
|
-
[ "$?" == "0" ] && IAM_VERB="update"
|
|
15
|
-
|
|
16
|
-
printf "Attempting to $IAM_VERB role $ROLE on $PROJ\n"
|
|
17
|
-
gcloud --project $PROJ iam roles $IAM_VERB $ROLE --file $JSON
|
|
18
|
-
done
|
|
19
|
-
cd -
|
package/src/sa-tools/sh-make-sa
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
SVC_PROJ="leverege-dev-john"
|
|
4
|
-
|
|
5
|
-
SVC_NAME="terraform"
|
|
6
|
-
SVC_ACCT="${SVC_NAME}@${SVC_PROJ}.iam.gserviceaccount.com"
|
|
7
|
-
|
|
8
|
-
function countdown() {
|
|
9
|
-
local SEC=${1}
|
|
10
|
-
shift
|
|
11
|
-
local MSG=${@}
|
|
12
|
-
while [ $SEC -ne 0 ];
|
|
13
|
-
do
|
|
14
|
-
printf "\r\033[KWaiting %.d seconds $MSG" $((SEC--))
|
|
15
|
-
sleep 1
|
|
16
|
-
done
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
gcloud config unset auth/impersonate_service_account
|
|
20
|
-
|
|
21
|
-
gcloud iam service-accounts create ${SVC_NAME} \
|
|
22
|
-
--project=${SVC_PROJ} --quiet \
|
|
23
|
-
--description="${SVC_NAME} SA" \
|
|
24
|
-
--display-name="${SVC_NAME}" &> /dev/null
|
|
25
|
-
|
|
26
|
-
gcloud projects add-iam-policy-binding ${SVC_PROJ} \
|
|
27
|
-
--project=${SVC_PROJ} --quiet \
|
|
28
|
-
--member=serviceAccount:${SVC_ACCT} \
|
|
29
|
-
--role=roles/editor &> /dev/null
|
|
30
|
-
|
|
31
|
-
gcloud projects add-iam-policy-binding ${SVC_PROJ} \
|
|
32
|
-
--project=${SVC_PROJ} --quiet \
|
|
33
|
-
--member=serviceAccount:${SVC_ACCT} \
|
|
34
|
-
--role=roles/iam.securityAdmin &> /dev/null
|
|
35
|
-
|
|
36
|
-
gcloud projects add-iam-policy-binding ${SVC_PROJ} \
|
|
37
|
-
--project=${SVC_PROJ} --quiet \
|
|
38
|
-
--member=serviceAccount:${SVC_ACCT} \
|
|
39
|
-
--role=roles/iam.serviceAccountTokenCreator &> /dev/null
|
|
40
|
-
|
|
41
|
-
countdown 30 "will delete ${SVC_NAME} service account"
|
|
42
|
-
|
|
43
|
-
gcloud projects remove-iam-policy-binding ${SVC_PROJ} \
|
|
44
|
-
--project=${SVC_PROJ} --quiet \
|
|
45
|
-
--member=serviceAccount:${SVC_ACCT} \
|
|
46
|
-
--role=roles/iam.serviceAccountTokenCreator &> /dev/null
|
|
47
|
-
|
|
48
|
-
gcloud projects remove-iam-policy-binding ${SVC_PROJ} \
|
|
49
|
-
--project=${SVC_PROJ} --quiet \
|
|
50
|
-
--member=serviceAccount:${SVC_ACCT} \
|
|
51
|
-
--role=roles/iam.securityAdmin &> /dev/null
|
|
52
|
-
|
|
53
|
-
gcloud projects remove-iam-policy-binding ${SVC_PROJ} \
|
|
54
|
-
--project=${SVC_PROJ} --quiet \
|
|
55
|
-
--member=serviceAccount:${SVC_ACCT} \
|
|
56
|
-
--role=roles/editor &> /dev/null
|
|
57
|
-
|
|
58
|
-
gcloud iam service-accounts delete ${SVC_ACCT} --quiet &> /dev/null
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
const chalk = require( 'chalk' )
|
|
2
|
-
const fs = require( 'fs' )
|
|
3
|
-
|
|
4
|
-
class Config {
|
|
5
|
-
|
|
6
|
-
constructor() {
|
|
7
|
-
this.configDir = `${__dirname}/config`
|
|
8
|
-
const jsonText = fs.readFileSync( `${this.configDir}/config.json` )
|
|
9
|
-
this.config = JSON.parse( jsonText )
|
|
10
|
-
this.verifyConfig( this.config )
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
verifyConfig( config ) {
|
|
14
|
-
/**
|
|
15
|
-
* Verify reference sources exist.
|
|
16
|
-
*/
|
|
17
|
-
let errors
|
|
18
|
-
config.templates.forEach( ( template ) => {
|
|
19
|
-
if ( !template.enabled ) return
|
|
20
|
-
template.sources.forEach( ( source ) => {
|
|
21
|
-
if ( typeof source === 'object' ) {
|
|
22
|
-
console.log( source, 'STILL TODO' )
|
|
23
|
-
} else {
|
|
24
|
-
const fullName = `${this.configDir}/${source}`
|
|
25
|
-
if ( !fs.existsSync( fullName ) ) {
|
|
26
|
-
console.log( chalk.red(
|
|
27
|
-
`***ERROR: missing source ${fullName}`
|
|
28
|
-
) )
|
|
29
|
-
errors = true
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
} )
|
|
33
|
-
} )
|
|
34
|
-
if ( errors ) { process.exit( 1 ) }
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
module.exports = {
|
|
39
|
-
Config,
|
|
40
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
const chalk = require( 'chalk' )
|
|
2
|
-
const cliArgs = require( 'command-line-args' )
|
|
3
|
-
const cliHelp = require( 'command-line-usage' )
|
|
4
|
-
const execa = require( 'execa' )
|
|
5
|
-
const figlet = require( 'figlet' )
|
|
6
|
-
|
|
7
|
-
const { Config } = require( './Config' )
|
|
8
|
-
const { clear, condir, proceed, Shell, VersionCheck } = require( './utils' )
|
|
9
|
-
|
|
10
|
-
const greet = async () => {
|
|
11
|
-
clear()
|
|
12
|
-
console.log(
|
|
13
|
-
chalk.keyword( 'orange' ).bold(
|
|
14
|
-
figlet.textSync( 'service-man', { horizontalLayout : 'full' } )
|
|
15
|
-
), chalk.green`
|
|
16
|
-
|
|
17
|
-
This utility attempts to ease the pain of managing IAM roles and the
|
|
18
|
-
creation of service accounts for new clusters and services.
|
|
19
|
-
`
|
|
20
|
-
)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const start = async () => {
|
|
24
|
-
|
|
25
|
-
await greet()
|
|
26
|
-
|
|
27
|
-
await proceed()
|
|
28
|
-
|
|
29
|
-
console.log( 'Weeeeee....' )
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
exports.start = start
|
package/src/service-man/index.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shell like things can go in here. I mostly created this to make it
|
|
3
|
-
* easier to push and pop around the directory trees for repo-init. It
|
|
4
|
-
* might make sense to add other things in here to make writing node CLI
|
|
5
|
-
* commands a little less painful.
|
|
6
|
-
*/
|
|
7
|
-
const fs = require( 'fs' )
|
|
8
|
-
const process = require( 'process' )
|
|
9
|
-
|
|
10
|
-
const dirStack = []
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Simple wrapper functions for debugging.
|
|
14
|
-
*/
|
|
15
|
-
const cwd = () => {
|
|
16
|
-
return process.cwd()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const chdir = ( dir ) => {
|
|
20
|
-
return process.chdir( dir )
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const dirs = () => {
|
|
24
|
-
console.log( dirStack )
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const pushd = ( dir ) => {
|
|
28
|
-
if ( !dir ) {
|
|
29
|
-
throw new Error( 'pushd: no other directory' )
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
dirStack.push( cwd() )
|
|
33
|
-
chdir( dir )
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const throwIfEmptyStack = () => {
|
|
37
|
-
if ( dirStack.length === 0 ) {
|
|
38
|
-
throw new Error( 'popd: directory stack empty' )
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const popd = ( all ) => {
|
|
43
|
-
throwIfEmptyStack()
|
|
44
|
-
chdir( dirStack.pop() )
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const popdAll = () => {
|
|
48
|
-
throwIfEmptyStack()
|
|
49
|
-
chdir( dirStack[0] )
|
|
50
|
-
dirStack.length = 0
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* This function will do an upwards traversal of a file tree looking for the
|
|
55
|
-
* specified file. An error will be thrown if the file is not found within
|
|
56
|
-
* maxLevels.
|
|
57
|
-
*/
|
|
58
|
-
const reverseFindFile = ( findFile, options ) => {
|
|
59
|
-
pushd( options.startDir || cwd() )
|
|
60
|
-
let maxLevels = options.maxLevels || 5
|
|
61
|
-
let fileRoot
|
|
62
|
-
while ( maxLevels > 0 ) {
|
|
63
|
-
if ( fs.existsSync( findFile ) ) {
|
|
64
|
-
fileRoot = cwd()
|
|
65
|
-
break
|
|
66
|
-
}
|
|
67
|
-
pushd( '..' ) // walk up the tree
|
|
68
|
-
maxLevels -= 1
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
popdAll()
|
|
72
|
-
|
|
73
|
-
if ( !fileRoot ) {
|
|
74
|
-
throw new Error( `reverseFindFile: ${findFile} not found` )
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return fileRoot
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const findRepoRoot = () => {
|
|
81
|
-
return reverseFindFile( 'package.json', { startDir : __dirname } )
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
module.exports = {
|
|
85
|
-
dirs,
|
|
86
|
-
pushd,
|
|
87
|
-
popd,
|
|
88
|
-
popdAll,
|
|
89
|
-
|
|
90
|
-
reverseFindFile,
|
|
91
|
-
findRepoRoot,
|
|
92
|
-
|
|
93
|
-
cwd,
|
|
94
|
-
chdir,
|
|
95
|
-
}
|