From 09dd5b7a0261f592c18d1405aef280dc0c0c42ab Mon Sep 17 00:00:00 2001 From: Mark McKim Date: Thu, 12 Oct 2023 10:23:08 +0100 Subject: [PATCH 1/8] Bump version to 118.0.0 --- lib/chromedriver.js | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/chromedriver.js b/lib/chromedriver.js index 85d690b..c1b359f 100644 --- a/lib/chromedriver.js +++ b/lib/chromedriver.js @@ -17,7 +17,7 @@ function getPortFromArgs(args) { } process.env.PATH = path.join(__dirname, 'chromedriver') + path.delimiter + process.env.PATH; exports.path = process.platform === 'win32' ? path.join(__dirname, 'chromedriver', 'chromedriver.exe') : path.join(__dirname, 'chromedriver', 'chromedriver'); -exports.version = '117.0.5938.92'; +exports.version = '118.0.5993.70'; exports.start = function (args, returnPromise) { let command = exports.path; if (!fs.existsSync(command)) { diff --git a/package-lock.json b/package-lock.json index 63ec54d..bc163e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "chromedriver", - "version": "117.0.3", + "version": "118.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "chromedriver", - "version": "117.0.3", + "version": "118.0.0", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index e3c58bf..db11b9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chromedriver", - "version": "117.0.3", + "version": "118.0.0", "keywords": [ "chromedriver", "selenium" From 157d4190d997f50e79159068bdee45c1762bbb9f Mon Sep 17 00:00:00 2001 From: Giovanni Bassi Date: Sat, 14 Oct 2023 00:25:26 -0300 Subject: [PATCH 2/8] Add token to enable PR --- .github/workflows/check-for-update.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/check-for-update.yml b/.github/workflows/check-for-update.yml index ceefd78..fb95f81 100644 --- a/.github/workflows/check-for-update.yml +++ b/.github/workflows/check-for-update.yml @@ -18,14 +18,27 @@ jobs: - run: | npm ci + VERSION_BEFORE=`node --eval 'console.log(require("./package.json").version)'` ./update.js --no-commit VERSION=`node --eval 'console.log(require("./package.json").version)'` + if [ "$VERSION" == "$VERSION_BEFORE" ]; then + echo "No update needed" + exit 0 + fi echo "NEW_VERSION=$VERSION" >> "$GITHUB_OUTPUT" id: update name: Run update + - uses: tibdex/github-app-token@v1 + id: generate-token + if: steps.update.outputs.NEW_VERSION != '' + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + - uses: peter-evans/create-pull-request@v5 name: Create Pull Request + if: steps.update.outputs.NEW_VERSION != '' with: commit-message: Bump version to ${{ steps.update.outputs.NEW_VERSION }} branch: update-${{ steps.update.outputs.NEW_VERSION }} @@ -38,3 +51,4 @@ jobs: update chromedriver assignees: giggio reviewers: giggio + token: ${{ steps.generate-token.outputs.token }} From f43d7f85dc232d7ee02659481e3097beb7d44b67 Mon Sep 17 00:00:00 2001 From: Giovanni Bassi Date: Sat, 14 Oct 2023 00:31:54 -0300 Subject: [PATCH 3/8] Make install faster for update check --- .github/workflows/check-for-update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-for-update.yml b/.github/workflows/check-for-update.yml index fb95f81..2ed64cc 100644 --- a/.github/workflows/check-for-update.yml +++ b/.github/workflows/check-for-update.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v4 - run: | - npm ci + npm ci --ignore-scripts --no-audit --no-fund VERSION_BEFORE=`node --eval 'console.log(require("./package.json").version)'` ./update.js --no-commit VERSION=`node --eval 'console.log(require("./package.json").version)'` From f6edc1e6507cede4c6ee4acc734eec2eb62040d2 Mon Sep 17 00:00:00 2001 From: Giovanni Bassi Date: Mon, 16 Oct 2023 11:16:28 -0300 Subject: [PATCH 4/8] Add provenance See: https://docs.npmjs.com/generating-provenance-statements#publishing-packages-with-provenance-via-github-actions https://github.blog/2023-04-19-introducing-npm-package-provenance/ --- .github/workflows/build.yml | 5 ++++- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 76088c0..ac388b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -185,6 +185,9 @@ jobs: name: Verify install publish: + permissions: + contents: read + id-token: write name: Publish to npm runs-on: ubuntu-latest needs: [build, build_arm64, build_s390x, build_proxy] @@ -195,6 +198,6 @@ jobs: with: node-version: 20.x registry-url: "https://registry.npmjs.org" - - run: npm publish + - run: npm publish --provenance --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/package-lock.json b/package-lock.json index bc163e9..8a9fa83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "chromedriver", - "version": "118.0.0", + "version": "118.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "chromedriver", - "version": "118.0.0", + "version": "118.0.1", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index db11b9d..83c803b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chromedriver", - "version": "118.0.0", + "version": "118.0.1", "keywords": [ "chromedriver", "selenium" From c99283d2ee351da26d6dfd47e63dd3d99b8117cc Mon Sep 17 00:00:00 2001 From: giggio Date: Wed, 1 Nov 2023 01:27:20 +0000 Subject: [PATCH 5/8] Bump version to 119.0.0 --- lib/chromedriver.js | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/chromedriver.js b/lib/chromedriver.js index c1b359f..7d89b3d 100644 --- a/lib/chromedriver.js +++ b/lib/chromedriver.js @@ -17,7 +17,7 @@ function getPortFromArgs(args) { } process.env.PATH = path.join(__dirname, 'chromedriver') + path.delimiter + process.env.PATH; exports.path = process.platform === 'win32' ? path.join(__dirname, 'chromedriver', 'chromedriver.exe') : path.join(__dirname, 'chromedriver', 'chromedriver'); -exports.version = '118.0.5993.70'; +exports.version = '119.0.6045.105'; exports.start = function (args, returnPromise) { let command = exports.path; if (!fs.existsSync(command)) { diff --git a/package-lock.json b/package-lock.json index 8a9fa83..5546f95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "chromedriver", - "version": "118.0.1", + "version": "119.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "chromedriver", - "version": "118.0.1", + "version": "119.0.0", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 83c803b..5f95cc0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chromedriver", - "version": "118.0.1", + "version": "119.0.0", "keywords": [ "chromedriver", "selenium" From 5b708ad5a5ddddbd9194ba7a04c9ab3cf3f9db32 Mon Sep 17 00:00:00 2001 From: Giovanni Bassi Date: Wed, 1 Nov 2023 02:30:47 -0300 Subject: [PATCH 6/8] Add tests for Node.js version 21 --- .devcontainer/Dockerfile | 4 ++-- .github/workflows/build.yml | 6 +++--- testInstall.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 71eb4ba..f403ade 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -14,6 +14,6 @@ RUN echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ && chmod 0440 /etc/sudoers.d/$USERNAME USER $USERNAME RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash -RUN [ "/bin/bash", "-c", "source $HOME/.nvm/nvm.sh && nvm i --no-progress 18.18.0 && nvm i --no-progress 20.7.0" ] -RUN [ "/bin/bash", "-c", "source $HOME/.nvm/nvm.sh && nvm alias default 20" ] +RUN [ "/bin/bash", "-c", "source $HOME/.nvm/nvm.sh && nvm i --no-progress 18.18.0 && nvm i --no-progress 20.7.0 && nvm i --no-progress 21.1.0" ] +RUN [ "/bin/bash", "-c", "source $HOME/.nvm/nvm.sh && nvm alias default 21" ] ENV DEBIAN_FRONTEND=dialog diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac388b1..8396dc3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,7 +36,7 @@ jobs: strategy: fail-fast: false matrix: - node: ["18.x", "20.x"] + node: ["18.x", "20.x", "21.x"] runner: ["windows-latest", "ubuntu-latest", "macos-latest"] steps: - uses: actions/checkout@v4 @@ -72,7 +72,7 @@ jobs: strategy: fail-fast: false matrix: - node: ["18", "20"] + node: ["18", "20", "21"] steps: - uses: actions/checkout@v4 - uses: uraimo/run-on-arch-action@v2.5.1 @@ -116,7 +116,7 @@ jobs: strategy: fail-fast: false matrix: - node: ["18", "20"] + node: ["18", "20", "21"] steps: - uses: actions/checkout@v4 - uses: uraimo/run-on-arch-action@v2.5.1 diff --git a/testInstall.js b/testInstall.js index 7443ab8..b2114e0 100755 --- a/testInstall.js +++ b/testInstall.js @@ -6,7 +6,7 @@ const os = require('os'); const path = require('path'); const fs = require('fs'); const spawnSync = require('child_process').spawnSync; -const versions = ['18', '20']; +const versions = ['18', '20', '21']; const tempInstallPath = path.resolve(os.tmpdir(), 'chromedriver-test'); const packedFile = path.resolve(tempInstallPath, 'chromedriver.tgz'); From 379046e6213932d6d63d532ccb63b223b07162a3 Mon Sep 17 00:00:00 2001 From: Giovanni Bassi Date: Wed, 1 Nov 2023 02:36:39 -0300 Subject: [PATCH 7/8] Update package dependencies --- package-lock.json | 55 ++++++++++++++++++++++++++--------------------- package.json | 12 +++++------ 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5546f95..f318a2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,21 +10,21 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@testim/chrome-version": "^1.1.3", - "axios": "^1.4.0", - "compare-versions": "^6.0.0", + "@testim/chrome-version": "^1.1.4", + "axios": "^1.6.0", + "compare-versions": "^6.1.0", "extract-zip": "^2.0.1", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^1.1.0", - "tcp-port-used": "^1.0.1" + "tcp-port-used": "^1.0.2" }, "bin": { "chromedriver": "bin/chromedriver" }, "devDependencies": { - "eslint": "^8.45.0", + "eslint": "^8.52.0", "semver": "^7.5.4", - "typescript": "^5.1.6" + "typescript": "^5.2.2" }, "engines": { "node": ">=18" @@ -87,21 +87,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -123,9 +123,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@nodelib/fs.scandir": { @@ -183,6 +183,12 @@ "@types/node": "*" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -267,9 +273,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -441,18 +447,19 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/js": "8.52.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", diff --git a/package.json b/package.json index 5f95cc0..a7902cd 100644 --- a/package.json +++ b/package.json @@ -28,18 +28,18 @@ "lint": "eslint" }, "dependencies": { - "@testim/chrome-version": "^1.1.3", - "axios": "^1.4.0", - "compare-versions": "^6.0.0", + "@testim/chrome-version": "^1.1.4", + "axios": "^1.6.0", + "compare-versions": "^6.1.0", "extract-zip": "^2.0.1", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^1.1.0", - "tcp-port-used": "^1.0.1" + "tcp-port-used": "^1.0.2" }, "devDependencies": { - "eslint": "^8.45.0", + "eslint": "^8.52.0", "semver": "^7.5.4", - "typescript": "^5.1.6" + "typescript": "^5.2.2" }, "engines": { "node": ">=18" From de961e34e023afcf4fa5c0faeeec69aaa6c3c815 Mon Sep 17 00:00:00 2001 From: Giovanni Bassi Date: Tue, 7 Nov 2023 19:06:37 -0300 Subject: [PATCH 8/8] Hide private attributes from exports --- .npmignore | 1 + lib/chromedriver.js | 40 +++++++++++++++++++++++++--------------- package-lock.json | 4 ++-- package.json | 2 +- testStart.js | 14 ++++++++++++++ update.js | 4 ++-- 6 files changed, 45 insertions(+), 20 deletions(-) create mode 100755 testStart.js diff --git a/.npmignore b/.npmignore index bc4f15c..7195c76 100644 --- a/.npmignore +++ b/.npmignore @@ -5,6 +5,7 @@ tmp Dockerfile *.sh testInstall.js +testStart.js update.js *.tgz .vscode diff --git a/lib/chromedriver.js b/lib/chromedriver.js index 7d89b3d..d43d37d 100644 --- a/lib/chromedriver.js +++ b/lib/chromedriver.js @@ -3,23 +3,23 @@ const path = require('path'); const tcpPortUsed = require('tcp-port-used'); function getPortFromArgs(args) { let port = 9515; - if (!args) { + if (!args) return port; - } const portRegexp = /--port=(\d*)/; const portArg = args.find(function (arg) { return portRegexp.test(arg); }); - if (portArg) { + if (portArg) port = parseInt(portRegexp.exec(portArg)[1]); - } return port; } process.env.PATH = path.join(__dirname, 'chromedriver') + path.delimiter + process.env.PATH; -exports.path = process.platform === 'win32' ? path.join(__dirname, 'chromedriver', 'chromedriver.exe') : path.join(__dirname, 'chromedriver', 'chromedriver'); -exports.version = '119.0.6045.105'; -exports.start = function (args, returnPromise) { - let command = exports.path; +const crpath = process.platform === 'win32' ? path.join(__dirname, 'chromedriver', 'chromedriver.exe') : path.join(__dirname, 'chromedriver', 'chromedriver'); +const version = '119.0.6045.105'; +let defaultInstance = null; + +function start(args, returnPromise) { + let command = crpath; if (!fs.existsSync(command)) { console.log('Could not find chromedriver in default path: ', command); console.log('Falling back to use global chromedriver bin'); @@ -28,10 +28,9 @@ exports.start = function (args, returnPromise) { const cp = require('child_process').spawn(command, args); cp.stdout.pipe(process.stdout); cp.stderr.pipe(process.stderr); - exports.defaultInstance = cp; - if (!returnPromise) { + defaultInstance = cp; + if (!returnPromise) return cp; - } const port = getPortFromArgs(args); const pollInterval = 100; const timeout = 10000; @@ -39,9 +38,20 @@ exports.start = function (args, returnPromise) { .then(function () { return cp; }); -}; -exports.stop = function () { - if (exports.defaultInstance != null) { - exports.defaultInstance.kill(); +} + +function stop() { + if (defaultInstance != null) + defaultInstance.kill(); + defaultInstance = null; +} + +module.exports = { + path: crpath, + version, + start, + stop, + get defaultInstance() { + return defaultInstance; } }; diff --git a/package-lock.json b/package-lock.json index f318a2d..1351ee2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "chromedriver", - "version": "119.0.0", + "version": "119.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "chromedriver", - "version": "119.0.0", + "version": "119.0.1", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index a7902cd..3dce5c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chromedriver", - "version": "119.0.0", + "version": "119.0.1", "keywords": [ "chromedriver", "selenium" diff --git a/testStart.js b/testStart.js new file mode 100755 index 0000000..2c4edf2 --- /dev/null +++ b/testStart.js @@ -0,0 +1,14 @@ +#!/usr/bin/env node + +"use strict"; +const chromedriver = require('./lib/chromedriver'); + +async function run() { + console.log(`Starting chromedriver. Instance: ${JSON.stringify(chromedriver)}`); + await chromedriver.start(null, true); + console.log(`Started Chromedriver. Instance is null: ${chromedriver.defaultInstance === null}.`); + chromedriver.stop(); + console.log(`Stopped Chromedriver. Instance is null: ${chromedriver.defaultInstance === null}.`); +} + +run(); diff --git a/update.js b/update.js index 73ecdfe..62fa16e 100755 --- a/update.js +++ b/update.js @@ -21,14 +21,14 @@ async function getLatest() { } /* Provided a new Chromedriver version such as 77.0.3865.40: - - update the version inside the ./lib/chromedriver helper file e.g. exports.version = '77.0.3865.40'; + - update the version inside the ./lib/chromedriver helper file e.g. const version = '77.0.3865.40'; - bumps package.json version number - add a git tag using the new node-chromedriver version - add a git commit, e.g. Bump version to 77.0.0 */ async function writeUpdate(newVersion, shouldCommit) { const helper = fs.readFileSync('./lib/chromedriver.js', 'utf8'); - const versionExport = 'exports.version'; + const versionExport = 'const version'; const regex = new RegExp(`^.*${versionExport}.*$`, 'gm'); const updated = helper.replace(regex, `${versionExport} = '${newVersion}';`); const currentMajor = semver.major(currentVersionInPackageJson);