@leverege/build-tools 2.37.2 → 2.38.0-john.1

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.
@@ -20,10 +20,10 @@
20
20
  */
21
21
  "use strict";
22
22
 
23
- const fs = require('fs');
24
- const cliArgs = require('command-line-args');
25
- const cliHelp = require('command-line-usage');
26
-
23
+ var _fs = _interopRequireDefault(require("fs"));
24
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
25
+ var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
27
  /* eslint-disable no-console */
28
28
  const optionList = [
29
29
  // Use optionList to tie into the Usage statements
@@ -51,17 +51,17 @@ const sections = [{
51
51
  header: 'Options',
52
52
  optionList
53
53
  }];
54
- const args = cliArgs(optionList, {
54
+ const args = (0, _commandLineArgs.default)(optionList, {
55
55
  partial: true
56
56
  });
57
- const help = cliHelp(sections);
57
+ const help = (0, _commandLineUsage.default)(sections);
58
58
  if (!args.file) {
59
59
  console.error('\n***ERROR: Missing a --file param\n');
60
60
  console.log(help);
61
61
  process.exit(1);
62
62
  }
63
63
  try {
64
- const json = JSON.parse(fs.readFileSync(args.file, 'utf8'));
64
+ const json = JSON.parse(_fs.default.readFileSync(args.file, 'utf8'));
65
65
  const value = json[args.key];
66
66
  const match = new RegExp(args.regex || '.*').exec(value);
67
67
  console.log(match ? match[match.length - 1] : '');
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ var _execa = _interopRequireDefault(require("execa"));
5
+ var _semver = require("semver");
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ const pushItGood = async () => {
8
+ const version = await (0, _execa.default)('helm', ['version', '--short']);
9
+ const pusher = (0, _semver.lt)(version.stdout, '3.7.0') ? 'push' : 'cm-push';
10
+ try {
11
+ const museum = await (0, _execa.default)('helm', [pusher, 'helm', 'leverege']);
12
+ console.log(museum.stdout);
13
+ } catch (ex) {
14
+ console.log(ex.stderr);
15
+ process.exit(1);
16
+ }
17
+ };
18
+ pushItGood();
@@ -22,8 +22,14 @@ var _nodeFs = _interopRequireDefault(require("node:fs"));
22
22
  var _nodeOs = _interopRequireDefault(require("node:os"));
23
23
  var _chalk = _interopRequireDefault(require("chalk"));
24
24
  var _execa = _interopRequireDefault(require("execa"));
25
+ var _semver = require("semver");
25
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
27
  // we can't use $ until we upgrade to ESM execa
28
+ if ((0, _semver.lt)(process.version, '18.0.0')) {
29
+ console.log(_chalk.default.red('\n\n***ERROR: must be running at least node 18\n'));
30
+ process.exit(1);
31
+ }
32
+
27
33
  // max age in seconds of the npmrc file before refresh
28
34
  const refreshThreshold = 3600 * 24; // 1 day
29
35
 
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
 
4
- const execa = require('execa');
5
- const SimpleGit = require('simple-git');
6
- const git = new SimpleGit();
4
+ var _execa = _interopRequireDefault(require("execa"));
5
+ var _simpleGit = _interopRequireDefault(require("simple-git"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ const git = new _simpleGit.default();
7
8
  const getCurrentBranchName = async () => {
8
9
  const branchInfo = await git.branch();
9
10
 
@@ -28,7 +29,7 @@ const isProtected = async () => {
28
29
  };
29
30
  const npmRunner = async script => {
30
31
  try {
31
- const results = await execa('npm', ['run', script], {
32
+ const results = await (0, _execa.default)('npm', ['run', script], {
32
33
  stdio: 'inherit'
33
34
  });
34
35
  return results;
@@ -20,10 +20,10 @@
20
20
  */
21
21
  "use strict";
22
22
 
23
- const fs = require('fs');
24
- const cliArgs = require('command-line-args');
25
- const cliHelp = require('command-line-usage');
26
-
23
+ var _fs = _interopRequireDefault(require("fs"));
24
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
25
+ var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
27
  /* eslint-disable no-console */
28
28
  const optionList = [
29
29
  // Use optionList to tie into the Usage statements
@@ -51,17 +51,17 @@ const sections = [{
51
51
  header: 'Options',
52
52
  optionList
53
53
  }];
54
- const args = cliArgs(optionList, {
54
+ const args = (0, _commandLineArgs.default)(optionList, {
55
55
  partial: true
56
56
  });
57
- const help = cliHelp(sections);
57
+ const help = (0, _commandLineUsage.default)(sections);
58
58
  if (!args.file) {
59
59
  console.error('\n***ERROR: Missing a --file param\n');
60
60
  console.log(help);
61
61
  process.exit(1);
62
62
  }
63
63
  try {
64
- const json = JSON.parse(fs.readFileSync(args.file, 'utf8'));
64
+ const json = JSON.parse(_fs.default.readFileSync(args.file, 'utf8'));
65
65
  const value = json[args.key];
66
66
  const match = new RegExp(args.regex || '.*').exec(value);
67
67
  console.log(match ? match[match.length - 1] : '');
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ var _execa = _interopRequireDefault(require("execa"));
5
+ var _semver = require("semver");
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ const pushItGood = async () => {
8
+ const version = await (0, _execa.default)('helm', ['version', '--short']);
9
+ const pusher = (0, _semver.lt)(version.stdout, '3.7.0') ? 'push' : 'cm-push';
10
+ try {
11
+ const museum = await (0, _execa.default)('helm', [pusher, 'helm', 'leverege']);
12
+ console.log(museum.stdout);
13
+ } catch (ex) {
14
+ console.log(ex.stderr);
15
+ process.exit(1);
16
+ }
17
+ };
18
+ pushItGood();
@@ -22,8 +22,14 @@ var _nodeFs = _interopRequireDefault(require("node:fs"));
22
22
  var _nodeOs = _interopRequireDefault(require("node:os"));
23
23
  var _chalk = _interopRequireDefault(require("chalk"));
24
24
  var _execa = _interopRequireDefault(require("execa"));
25
+ var _semver = require("semver");
25
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
27
  // we can't use $ until we upgrade to ESM execa
28
+ if ((0, _semver.lt)(process.version, '18.0.0')) {
29
+ console.log(_chalk.default.red('\n\n***ERROR: must be running at least node 18\n'));
30
+ process.exit(1);
31
+ }
32
+
27
33
  // max age in seconds of the npmrc file before refresh
28
34
  const refreshThreshold = 3600 * 24; // 1 day
29
35
 
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
 
4
- const execa = require('execa');
5
- const SimpleGit = require('simple-git');
6
- const git = new SimpleGit();
4
+ var _execa = _interopRequireDefault(require("execa"));
5
+ var _simpleGit = _interopRequireDefault(require("simple-git"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ const git = new _simpleGit.default();
7
8
  const getCurrentBranchName = async () => {
8
9
  const branchInfo = await git.branch();
9
10
 
@@ -28,7 +29,7 @@ const isProtected = async () => {
28
29
  };
29
30
  const npmRunner = async script => {
30
31
  try {
31
- const results = await execa('npm', ['run', script], {
32
+ const results = await (0, _execa.default)('npm', ['run', script], {
32
33
  stdio: 'inherit'
33
34
  });
34
35
  return results;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leverege/build-tools",
3
- "version": "2.37.2",
3
+ "version": "2.38.0-john.1",
4
4
  "description": "A collection of build / support tools for Leverege developers",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -19,24 +19,24 @@
19
19
  },
20
20
  "bin": {
21
21
  "build-tools": "src/build-tools.js",
22
- "circleate": "src/circleate",
22
+ "circleate": "src/circleate.sh",
23
23
  "decrypt-secrets": "src/decrypt-secrets",
24
24
  "dirty-git": "src/dirty-git",
25
25
  "dockreate": "src/dockreate",
26
26
  "encrypt-secrets": "src/encrypt-secrets",
27
27
  "firebaseDeploy": "src/firebaseDeploy.mjs",
28
28
  "firebaseServe": "src/firebaseServe.mjs",
29
- "getfbcfg": "src/getfbcfg.js",
30
- "getjson": "src/getjson.js",
29
+ "getfbcfg": "src/getfbcfg.mjs",
30
+ "getjson": "src/getjson.mjs",
31
31
  "git-tar": "src/git-tar",
32
32
  "helmdn": "src/helmdn",
33
- "helmup": "src/helmup",
34
- "helminit": "src/helmup",
35
- "helmwhat": "src/helmup",
36
- "k8cryo": "src/k8cryo",
37
- "k8scale": "src/k8scale",
38
- "k8thaw": "src/k8cryo",
39
- "k8x": "src/k8x",
33
+ "helmup": "src/helmup.sh",
34
+ "helminit": "src/helmup.sh",
35
+ "helmwhat": "src/helmup.sh",
36
+ "k8cryo": "src/k8cryo.sh",
37
+ "k8scale": "src/k8scale.sh",
38
+ "k8thaw": "src/k8cryo.sh",
39
+ "k8x": "src/k8x.sh",
40
40
  "klog": "src/klog",
41
41
  "npm-link": "src/npm-link",
42
42
  "npm-unlink": "src/npm-unlink",
@@ -45,10 +45,10 @@
45
45
  "pkglint": "src/pkglint",
46
46
  "prune-git": "src/prune-git",
47
47
  "pull-git": "src/pull-git",
48
- "push-my-chart": "src/push-my-chart",
48
+ "push-my-chart": "src/push-my-chart.mjs",
49
49
  "refresh-npm-token": "src/refresh-npm-token.mjs",
50
50
  "tag-release": "src/tag-release.mjs",
51
- "unleash": "src/unleash.js"
51
+ "unleash": "src/unleash.mjs"
52
52
  },
53
53
  "author": "Leverege Devs",
54
54
  "license": "SEE LICENSE IN LICENSE.md",
package/src/bash-funcs CHANGED
@@ -5,6 +5,12 @@
5
5
  # and can now be easily added to a script via bash sourcing:
6
6
  # . `build-tools --bashfun`
7
7
 
8
+ # Typically /dev/null is used to redirect the noise but sometimes we need to
9
+ # see exactly what certain commands are complaining about. Running any of the
10
+ # build-tools with BUILD_TOOLS_DEBUG=1 will redirect the noise to stdout.
11
+ DEVNULL="/dev/null"
12
+ [ ! -z "BUILD_TOOLS_DEBUG" ] && DEVNULL="/dev/stdout" && printf "\n***BUILD_TOOLS_DEBUG DEVNULL=>$DEVNULL\n"
13
+
8
14
  # Simple ANSI color coded string generator.
9
15
  function color() {
10
16
  local color=
@@ -121,13 +127,13 @@ function addHelmRepo() {
121
127
  Adding helm repo => $(color g "$chart") from $(color g "$url")
122
128
 
123
129
  REPOADD
124
- helm repo add --force-update $chart $url &> /dev/null
125
- helm repo update &> /dev/null
130
+ helm repo add --force-update $chart $url &> $DEVNULL
131
+ helm repo update &> $DEVNULL
126
132
  }
127
133
 
128
134
  function removeHelmRepo(){
129
135
  [ ! -z "$SKIP_RM_HELM_REPO" ] && return
130
- helm repo remove $1 &>/dev/null
136
+ helm repo remove $1 &> $DEVNULL
131
137
  }
132
138
 
133
139
  # initial use for logging helm activities
@@ -141,5 +147,5 @@ function postToSlack() {
141
147
 
142
148
  curl -X POST -H 'Content-type: application/json' \
143
149
  --data "{\"text\":\"$slackmsg\",\"channel\":\"$channel\"}" \
144
- "$slackURL" &>/dev/null
150
+ "$slackURL" &> $DEVNULL
145
151
  }
package/src/dockreate CHANGED
@@ -5,6 +5,7 @@ if [ -z "$1" ]; then
5
5
  fi
6
6
 
7
7
  # printf "\n****LOCAL DOCKREATE****\n\n" && sleep 1
8
+ DOCKER_BUILDKIT=1
8
9
 
9
10
  # Load common bash functions
10
11
  . `build-tools --bashfun`
@@ -18,9 +18,9 @@
18
18
  /**
19
19
  * Get a command line switch parser.
20
20
  */
21
- const fs = require( 'fs' )
22
- const cliArgs = require( 'command-line-args' )
23
- const cliHelp = require( 'command-line-usage' )
21
+ import fs from 'fs'
22
+ import cliArgs from 'command-line-args'
23
+ import cliHelp from 'command-line-usage'
24
24
 
25
25
  /* eslint-disable no-console */
26
26
  const optionList = [ // Use optionList to tie into the Usage statements
@@ -80,7 +80,7 @@ WORKLOAD_ID
80
80
 
81
81
  # Verify the Kubernetes SA and create it if necessary
82
82
  printf "\nChecking for the $NAMESPACE/$SVC_ACCT k8s SA\n"
83
- kubectl get sa -n $NAMESPACE $SVC_ACCT &>/dev/null
83
+ kubectl get sa -n $NAMESPACE $SVC_ACCT &> $DEVNULL
84
84
  if [[ $? -eq 1 ]];
85
85
  then
86
86
  printf "Creating the k8s $SVC_ACCT SA in $NAMESPACE\n"
@@ -101,7 +101,7 @@ function generatePassword() {
101
101
 
102
102
  function createNamespaceIfNeeded() {
103
103
  # Check the namespace exists in kubernetes
104
- kubectl get namespace $1 &> /dev/null
104
+ kubectl get namespace $1 &> $DEVNULL
105
105
  if [[ $? -eq 1 ]];
106
106
  then
107
107
  printf "\n*** Creating $1 namespace ***\n\n"
@@ -155,7 +155,7 @@ MISSING_HELMUP_PLUGIN
155
155
 
156
156
  function errorIfMissingSecret() {
157
157
  SECRET="$1"
158
- kubectl get secret $SECRET &> /dev/null
158
+ kubectl get secret $SECRET &> $DEVNULL
159
159
  if [[ $? = 1 || SECRET = "" ]];
160
160
  then
161
161
  errorExit "missing secret `color y $SECRET` - did you `color g 'service-man --new-k8s'` ?"
@@ -176,9 +176,9 @@ function installStackdriverExporterEnvironment() {
176
176
 
177
177
  # guarantee any previous remnants of the exporter are gone
178
178
  printf "\n*** Removing the previous $SDEXP_SA installation...\n"
179
- helm uninstall -n $SDEXP_NS $SDEXP_SA &> /dev/null
180
- kubectl delete serviceaccounts -n $SDEXP_NS $SDEXP_SA &> /dev/null
181
- gcloud --quiet iam service-accounts delete $SDEXP_EM &> /dev/null
179
+ helm uninstall -n $SDEXP_NS $SDEXP_SA &> $DEVNULL
180
+ kubectl delete serviceaccounts -n $SDEXP_NS $SDEXP_SA &> $DEVNULL
181
+ gcloud --quiet iam service-accounts delete $SDEXP_EM &> $DEVNULL
182
182
 
183
183
  # NOTE: The k8s SA != GCP SA - the former is created by the helm chart
184
184
  # that installs the stackdriver-exporter, the latter is handled here in
@@ -188,13 +188,13 @@ function installStackdriverExporterEnvironment() {
188
188
  printf "\n*** Creating GCP SA with $SDEXP_NS/viewer ***\n"
189
189
  gcloud iam service-accounts create $SDEXP_SA \
190
190
  --project "$GCP_PROJECT_ID" \
191
- --display-name "Prometheus Stackdriver Exporter" &>/dev/null
191
+ --display-name "Prometheus Stackdriver Exporter" &> $DEVNULL
192
192
  warnOnError $? "the GCP SA $SDEXP_SA may already exist"
193
193
 
194
194
  printf "\n*** Binding IAM role of $SDEXP_NS viewer to $SDEXP_SA in $GCP_PROJECT_ID\n"
195
195
  gcloud projects add-iam-policy-binding "$GCP_PROJECT_ID" \
196
196
  --role "roles/$SDEXP_NS.viewer" \
197
- --member "serviceAccount:$SDEXP_EM" &>/dev/null
197
+ --member "serviceAccount:$SDEXP_EM" &> $DEVNULL
198
198
  sleep 2 # give the IAM binding a chance to complete before moving on
199
199
 
200
200
  bindWorkloadIdentity $SDEXP_SA $SDEXP_NS
@@ -289,7 +289,7 @@ function installPreemptibleKiller() {
289
289
  printf "\nBinding the IAM role to the $SVC_ACCT SA\n"
290
290
  gcloud projects add-iam-policy-binding $GCP_PROJECT_ID \
291
291
  --member=serviceAccount:${service_account_email} \
292
- --role=projects/${GCP_PROJECT_ID}/roles/preemptibleKiller &> /dev/null
292
+ --role=projects/${GCP_PROJECT_ID}/roles/preemptibleKiller &> $DEVNULL
293
293
  warnOnError $? "Binding may have failed or it already exists"
294
294
 
295
295
  bindWorkloadIdentity $SVC_ACCT $NAMESPACE
@@ -368,7 +368,7 @@ function installCertManagerSecret() {
368
368
  createNamespaceIfNeeded cert-manager
369
369
 
370
370
  local NSPACE="default"
371
- kubectl get secret cloudflare --namespace $NSPACE &>/dev/null
371
+ kubectl get secret cloudflare --namespace $NSPACE &> $DEVNULL
372
372
  if [[ $? -eq 1 ]];
373
373
  then
374
374
  cat<<NEED_MANAGED_SECRET
@@ -405,7 +405,7 @@ function installVeleroEnvironment() {
405
405
  BUCKET="$GCP_PROJECT_ID-velero-$VELERO_HELM_CHART"
406
406
  GCE_REGION=`overwhelm -k GCE_REGION`
407
407
  printf "\nCreating storage bucket `color g $BUCKET` in `color g $GCE_REGION`\n"
408
- gsutil mb -l $GCE_REGION gs://$BUCKET/ &> /dev/null
408
+ gsutil mb -l $GCE_REGION gs://$BUCKET/ &> $DEVNULL
409
409
  warnOnError $? "Bucket failed to create or already exists - go check it\n"
410
410
 
411
411
  ## Create a service account
@@ -413,7 +413,7 @@ function installVeleroEnvironment() {
413
413
  gcloud iam service-accounts create velero \
414
414
  --project $GCP_PROJECT_ID \
415
415
  --display-name "Velero service account" \
416
- --description "Velero service account" &>/dev/null
416
+ --description "Velero service account" &> $DEVNULL
417
417
  if [ $? -eq 0 ];
418
418
  then
419
419
  # no error means a new SA was created - slight delay to let it update
@@ -446,7 +446,7 @@ function installVeleroEnvironment() {
446
446
  gcloud iam roles create velero.server \
447
447
  --project $GCP_PROJECT_ID \
448
448
  --title "Velero Server" \
449
- --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")" &>/dev/null
449
+ --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")" &> $DEVNULL
450
450
  if [ $? -ne 0 ];
451
451
  then
452
452
  # assume error is that role exists so try updating instead
@@ -454,7 +454,7 @@ function installVeleroEnvironment() {
454
454
  gcloud iam roles update velero.server \
455
455
  --project $GCP_PROJECT_ID \
456
456
  --title "Velero Server" \
457
- --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")" &>/dev/null
457
+ --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")" &> $DEVNULL
458
458
  fi
459
459
  warnOnError $? "Failed to add roles to velero.server - perhaps they already exist?"
460
460
 
@@ -463,7 +463,7 @@ function installVeleroEnvironment() {
463
463
  --project $GCP_PROJECT_ID \
464
464
  --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
465
465
  --condition 'None' \
466
- --role projects/$GCP_PROJECT_ID/roles/velero.server &>/dev/null
466
+ --role projects/$GCP_PROJECT_ID/roles/velero.server &> $DEVNULL
467
467
  warnOnError $? "gcloud problem binding IAM policy"
468
468
 
469
469
  printf "\nBinding workload identity IAM policy to the SA\n"
@@ -485,7 +485,7 @@ function installVeleroEnvironment() {
485
485
  gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://$BUCKET
486
486
 
487
487
  ## Clean up from previous failed install
488
- kubectl delete volumesnapshotlocation.velero.io -n velero gcp &>/dev/null
488
+ kubectl delete volumesnapshotlocation.velero.io -n velero gcp &> $DEVNULL
489
489
  }
490
490
 
491
491
  # If a helmup.plugin file exists and is executable helmup assumes it is
@@ -522,7 +522,7 @@ function getServiceAndChartVersion() {
522
522
  [ ! -z "$CHARTVER" ] && return # service and chart version from CLI
523
523
 
524
524
  # force the move away from the old approach
525
- LCL_CHART=`compgen -G $SERVICE/Chart-?*.?*.?*` &>/dev/null
525
+ LCL_CHART=`compgen -G $SERVICE/Chart-?*.?*.?*` &> $DEVNULL
526
526
  if [ ! -z "$LCL_CHART" ];
527
527
  then
528
528
  CHARTVER=${LCL_CHART#*/Chart-}
@@ -564,7 +564,7 @@ CHARTVER=
564
564
  FROM_VERSIONS=
565
565
  function doInstall() {
566
566
 
567
- helm repo update &> /dev/null
567
+ helm repo update &> $DEVNULL
568
568
 
569
569
  for PARAM in "$@";
570
570
  do
@@ -786,4 +786,4 @@ overwhelm
786
786
  GCP_PROJECT_ID="$(getProjectIdFromK8sContext)"
787
787
 
788
788
  doInstall $@
789
- cd - &> /dev/null
789
+ cd - &> $DEVNULL
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const execa = require( 'execa' )
4
- const semverLt = require( 'semver/functions/lt' )
3
+ import execa from 'execa'
4
+ import { lt as semverLt } from 'semver'
5
5
 
6
6
  const pushItGood = async () => {
7
7
  const version = await execa( 'helm', [ 'version', '--short' ] )
@@ -22,6 +22,13 @@ import os from 'node:os'
22
22
  import chalk from 'chalk'
23
23
  import execa from 'execa' // we can't use $ until we upgrade to ESM execa
24
24
 
25
+ import { lt as semverLt } from 'semver'
26
+
27
+ if ( semverLt ( process.version, '18.0.0' ) ) {
28
+ console.log( chalk.red( '\n\n***ERROR: must be running at least node 18\n' ) )
29
+ process.exit( 1 )
30
+ }
31
+
25
32
  // max age in seconds of the npmrc file before refresh
26
33
  const refreshThreshold = 3600 * 24 // 1 day
27
34
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const execa = require( 'execa' )
4
- const SimpleGit = require( 'simple-git' )
3
+ import execa from 'execa'
4
+ import SimpleGit from 'simple-git'
5
5
 
6
6
  const git = new SimpleGit()
7
7
 
File without changes
File without changes
File without changes
File without changes
File without changes