Compare commits

...

24 Commits

Author SHA1 Message Date
Henry Mercer 5ccef82244 Address review comments 2026-06-03 18:31:11 +01:00
Henry Mercer bab673d0e0 Cache CLI version information across Actions steps 2026-06-02 19:27:05 +01:00
Henry Mercer 8ed7f7c384 Merge pull request #3941 from github/mergeback/v4.36.1-to-main-87557b9c
Mergeback v4.36.1 refs/heads/releases/v4 into main
2026-06-02 10:35:51 +00:00
github-actions[bot] 0ad7c1f95e Rebuild 2026-06-02 10:09:37 +00:00
github-actions[bot] 25c25b5e09 Update changelog and version after v4.36.1 2026-06-02 10:09:22 +00:00
Henry Mercer 87557b9c84 Merge pull request #3940 from github/update-v4.36.1-2a1689ed4
Merge main into releases/v4
2026-06-02 11:07:55 +01:00
github-actions[bot] 9431011964 Update changelog for v4.36.1 2026-06-02 09:50:57 +00:00
Henry Mercer 2a1689ed43 Merge pull request #3939 from github/henrymercer/skip-overlay-revert-when-explicit
Disable missing diff-ranges fallback when overlay enabled manually
2026-06-01 17:25:10 +00:00
Henry Mercer 524532393a Disable missing diff-ranges fallback when overlay enabled manually 2026-06-01 15:34:08 +01:00
Henry Mercer d1eb1207b4 Merge pull request #3933 from github/update-supported-enterprise-server-versions
Update supported GitHub Enterprise Server versions
2026-05-29 11:10:43 +00:00
Michael B. Gale 115001ba8d Merge pull request #3934 from github/dependabot/npm_and_yarn/npm-minor-86fb5ccea6
Bump the npm-minor group across 1 directory with 2 updates
2026-05-28 14:53:43 +00:00
Michael B. Gale cef2e7a910 Merge pull request #3925 from github/dependabot/github_actions/dot-github/workflows/actions-minor-da8be134b1
Bump ruby/setup-ruby from 1.306.0 to 1.307.0 in /.github/workflows in the actions-minor group across 1 directory
2026-05-28 13:59:27 +00:00
Michael B. Gale 5e6adf70ed Merge pull request #3936 from github/dependabot/npm_and_yarn/tmp-0.2.7
Bump tmp from 0.2.4 to 0.2.7
2026-05-28 13:54:02 +00:00
Michael B. Gale ad170e6c4e Merge branch 'main' into dependabot/github_actions/dot-github/workflows/actions-minor-da8be134b1 2026-05-28 14:48:30 +01:00
github-actions[bot] 6a37b3a57a Rebuild 2026-05-28 02:48:34 +00:00
dependabot[bot] bef1eb7126 Bump tmp from 0.2.4 to 0.2.7
Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.4 to 0.2.7.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.4...v0.2.7)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-28 02:46:38 +00:00
dependabot[bot] b42b7546a5 Bump the npm-minor group across 1 directory with 2 updates
Bumps the npm-minor group with 2 updates in the / directory: [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) and [tsx](https://github.com/privatenumber/tsx).


Updates `typescript-eslint` from 8.59.3 to 8.59.4
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.59.4/packages/typescript-eslint)

Updates `tsx` from 4.21.0 to 4.22.3
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.21.0...v4.22.3)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.59.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor
- dependency-name: tsx
  dependency-version: 4.22.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-27 20:06:49 +00:00
github-actions[bot] 8b0c522441 Update supported GitHub Enterprise Server versions 2026-05-27 00:44:49 +00:00
Michael B. Gale 0e150e4076 Merge pull request #3921 from github/dependabot/npm_and_yarn/npm-minor-28e225f5ad
Bump the npm-minor group across 1 directory with 6 updates
2026-05-22 14:35:33 +00:00
Michael B. Gale 8a1e375368 Merge branch 'main' into dependabot/npm_and_yarn/npm-minor-28e225f5ad 2026-05-22 15:08:30 +01:00
github-actions[bot] 14c150999e Rebuild 2026-05-20 22:08:52 +00:00
github-actions[bot] 89c58e65c1 Rebuild 2026-05-20 22:07:31 +00:00
dependabot[bot] a0a8d16e7b Bump ruby/setup-ruby
Bumps the actions-minor group with 1 update in the /.github/workflows directory: [ruby/setup-ruby](https://github.com/ruby/setup-ruby).


Updates `ruby/setup-ruby` from 1.306.0 to 1.307.0
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](https://github.com/ruby/setup-ruby/compare/c4e5b1316158f92e3d49443a9d58b31d25ac0f8f...6aaa311d81eba98ae12eaffbcb63296ace0efcde)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.307.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-20 22:06:56 +00:00
dependabot[bot] bd77449ac2 Bump the npm-minor group across 1 directory with 6 updates
Bumps the npm-minor group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [semver](https://github.com/npm/node-semver) | `7.7.4` | `7.8.0` |
| [@eslint/compat](https://github.com/eslint/rewrite/tree/HEAD/packages/compat) | `2.0.5` | `2.1.0` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.19.39` | `20.19.41` |
| [nock](https://github.com/nock/nock) | `14.0.12` | `14.0.15` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.59.2` | `8.59.3` |
| [yaml](https://github.com/eemeli/yaml) | `2.8.4` | `2.9.0` |



Updates `semver` from 7.7.4 to 7.8.0
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.7.4...v7.8.0)

Updates `@eslint/compat` from 2.0.5 to 2.1.0
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/packages/compat/CHANGELOG.md)
- [Commits](https://github.com/eslint/rewrite/commits/compat-v2.1.0/packages/compat)

Updates `@types/node` from 20.19.39 to 20.19.41
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `nock` from 14.0.12 to 14.0.15
- [Release notes](https://github.com/nock/nock/releases)
- [Changelog](https://github.com/nock/nock/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nock/nock/compare/v14.0.12...v14.0.15)

Updates `typescript-eslint` from 8.59.2 to 8.59.3
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.59.3/packages/typescript-eslint)

Updates `yaml` from 2.8.4 to 2.9.0
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.8.4...v2.9.0)

---
updated-dependencies:
- dependency-name: semver
  dependency-version: 7.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor
- dependency-name: "@eslint/compat"
  dependency-version: 2.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor
- dependency-name: "@types/node"
  dependency-version: 20.19.41
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor
- dependency-name: nock
  dependency-version: 14.0.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor
- dependency-name: typescript-eslint
  dependency-version: 8.59.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor
- dependency-name: yaml
  dependency-version: 2.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-20 22:05:27 +00:00
15 changed files with 578 additions and 763 deletions
+1 -1
View File
@@ -59,7 +59,7 @@ jobs:
use-all-platform-bundle: 'false' use-all-platform-bundle: 'false'
setup-kotlin: 'true' setup-kotlin: 'true'
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@c4e5b1316158f92e3d49443a9d58b31d25ac0f8f # v1.306.0 uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1.307.0
with: with:
ruby-version: 2.6 ruby-version: 2.6
- name: Install Code Scanning integration - name: Install Code Scanning integration
+4
View File
@@ -6,6 +6,10 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th
No user facing changes. No user facing changes.
## 4.36.1 - 02 Jun 2026
No user facing changes.
## 4.36.0 - 22 May 2026 ## 4.36.0 - 22 May 2026
- _Breaking change_: Bump the minimum required CodeQL bundle version to 2.19.4. [#3894](https://github.com/github/codeql-action/pull/3894) - _Breaking change_: Bump the minimum required CodeQL bundle version to 2.19.4. [#3894](https://github.com/github/codeql-action/pull/3894)
+229 -132
View File
@@ -19179,12 +19179,12 @@ var require_lib = __commonJS({
throw new Error("Client has already been disposed."); throw new Error("Client has already been disposed.");
} }
const parsedUrl = new URL(requestUrl); const parsedUrl = new URL(requestUrl);
let info7 = this._prepareRequest(verb, parsedUrl, headers); let info8 = this._prepareRequest(verb, parsedUrl, headers);
const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1; const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1;
let numTries = 0; let numTries = 0;
let response; let response;
do { do {
response = yield this.requestRaw(info7, data); response = yield this.requestRaw(info8, data);
if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
let authenticationHandler; let authenticationHandler;
for (const handler2 of this.handlers) { for (const handler2 of this.handlers) {
@@ -19194,7 +19194,7 @@ var require_lib = __commonJS({
} }
} }
if (authenticationHandler) { if (authenticationHandler) {
return authenticationHandler.handleAuthentication(this, info7, data); return authenticationHandler.handleAuthentication(this, info8, data);
} else { } else {
return response; return response;
} }
@@ -19217,8 +19217,8 @@ var require_lib = __commonJS({
} }
} }
} }
info7 = this._prepareRequest(verb, parsedRedirectUrl, headers); info8 = this._prepareRequest(verb, parsedRedirectUrl, headers);
response = yield this.requestRaw(info7, data); response = yield this.requestRaw(info8, data);
redirectsRemaining--; redirectsRemaining--;
} }
if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) { if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) {
@@ -19247,7 +19247,7 @@ var require_lib = __commonJS({
* @param info * @param info
* @param data * @param data
*/ */
requestRaw(info7, data) { requestRaw(info8, data) {
return __awaiter2(this, void 0, void 0, function* () { return __awaiter2(this, void 0, void 0, function* () {
return new Promise((resolve13, reject) => { return new Promise((resolve13, reject) => {
function callbackForResult(err, res) { function callbackForResult(err, res) {
@@ -19259,7 +19259,7 @@ var require_lib = __commonJS({
resolve13(res); resolve13(res);
} }
} }
this.requestRawWithCallback(info7, data, callbackForResult); this.requestRawWithCallback(info8, data, callbackForResult);
}); });
}); });
} }
@@ -19269,12 +19269,12 @@ var require_lib = __commonJS({
* @param data * @param data
* @param onResult * @param onResult
*/ */
requestRawWithCallback(info7, data, onResult) { requestRawWithCallback(info8, data, onResult) {
if (typeof data === "string") { if (typeof data === "string") {
if (!info7.options.headers) { if (!info8.options.headers) {
info7.options.headers = {}; info8.options.headers = {};
} }
info7.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8"); info8.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
} }
let callbackCalled = false; let callbackCalled = false;
function handleResult(err, res) { function handleResult(err, res) {
@@ -19283,7 +19283,7 @@ var require_lib = __commonJS({
onResult(err, res); onResult(err, res);
} }
} }
const req = info7.httpModule.request(info7.options, (msg) => { const req = info8.httpModule.request(info8.options, (msg) => {
const res = new HttpClientResponse(msg); const res = new HttpClientResponse(msg);
handleResult(void 0, res); handleResult(void 0, res);
}); });
@@ -19295,7 +19295,7 @@ var require_lib = __commonJS({
if (socket) { if (socket) {
socket.end(); socket.end();
} }
handleResult(new Error(`Request timeout: ${info7.options.path}`)); handleResult(new Error(`Request timeout: ${info8.options.path}`));
}); });
req.on("error", function(err) { req.on("error", function(err) {
handleResult(err); handleResult(err);
@@ -19331,27 +19331,27 @@ var require_lib = __commonJS({
return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
} }
_prepareRequest(method, requestUrl, headers) { _prepareRequest(method, requestUrl, headers) {
const info7 = {}; const info8 = {};
info7.parsedUrl = requestUrl; info8.parsedUrl = requestUrl;
const usingSsl = info7.parsedUrl.protocol === "https:"; const usingSsl = info8.parsedUrl.protocol === "https:";
info7.httpModule = usingSsl ? https3 : http; info8.httpModule = usingSsl ? https3 : http;
const defaultPort = usingSsl ? 443 : 80; const defaultPort = usingSsl ? 443 : 80;
info7.options = {}; info8.options = {};
info7.options.host = info7.parsedUrl.hostname; info8.options.host = info8.parsedUrl.hostname;
info7.options.port = info7.parsedUrl.port ? parseInt(info7.parsedUrl.port) : defaultPort; info8.options.port = info8.parsedUrl.port ? parseInt(info8.parsedUrl.port) : defaultPort;
info7.options.path = (info7.parsedUrl.pathname || "") + (info7.parsedUrl.search || ""); info8.options.path = (info8.parsedUrl.pathname || "") + (info8.parsedUrl.search || "");
info7.options.method = method; info8.options.method = method;
info7.options.headers = this._mergeHeaders(headers); info8.options.headers = this._mergeHeaders(headers);
if (this.userAgent != null) { if (this.userAgent != null) {
info7.options.headers["user-agent"] = this.userAgent; info8.options.headers["user-agent"] = this.userAgent;
} }
info7.options.agent = this._getAgent(info7.parsedUrl); info8.options.agent = this._getAgent(info8.parsedUrl);
if (this.handlers) { if (this.handlers) {
for (const handler2 of this.handlers) { for (const handler2 of this.handlers) {
handler2.prepareRequest(info7.options); handler2.prepareRequest(info8.options);
} }
} }
return info7; return info8;
} }
_mergeHeaders(headers) { _mergeHeaders(headers) {
if (this.requestOptions && this.requestOptions.headers) { if (this.requestOptions && this.requestOptions.headers) {
@@ -21406,7 +21406,7 @@ var require_core = __commonJS({
exports2.error = error3; exports2.error = error3;
exports2.warning = warning14; exports2.warning = warning14;
exports2.notice = notice; exports2.notice = notice;
exports2.info = info7; exports2.info = info8;
exports2.startGroup = startGroup4; exports2.startGroup = startGroup4;
exports2.endGroup = endGroup4; exports2.endGroup = endGroup4;
exports2.group = group; exports2.group = group;
@@ -21503,7 +21503,7 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
function notice(message, properties = {}) { function notice(message, properties = {}) {
(0, command_1.issueCommand)("notice", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); (0, command_1.issueCommand)("notice", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
} }
function info7(message) { function info8(message) {
process.stdout.write(message + os7.EOL); process.stdout.write(message + os7.EOL);
} }
function startGroup4(name) { function startGroup4(name) {
@@ -26704,6 +26704,47 @@ var require_coerce = __commonJS({
} }
}); });
// node_modules/semver/functions/truncate.js
var require_truncate = __commonJS({
"node_modules/semver/functions/truncate.js"(exports2, module2) {
"use strict";
var parse2 = require_parse2();
var constants = require_constants6();
var SemVer = require_semver();
var truncate = (version, truncation, options) => {
if (!constants.RELEASE_TYPES.includes(truncation)) {
return null;
}
const clonedVersion = cloneInputVersion(version, options);
return clonedVersion && doTruncation(clonedVersion, truncation);
};
var cloneInputVersion = (version, options) => {
const versionStringToParse = version instanceof SemVer ? version.version : version;
return parse2(versionStringToParse, options);
};
var doTruncation = (version, truncation) => {
if (isPrerelease(truncation)) {
return version.version;
}
version.prerelease = [];
switch (truncation) {
case "major":
version.minor = 0;
version.patch = 0;
break;
case "minor":
version.patch = 0;
break;
}
return version.format();
};
var isPrerelease = (type2) => {
return type2.startsWith("pre");
};
module2.exports = truncate;
}
});
// node_modules/semver/internal/lrucache.js // node_modules/semver/internal/lrucache.js
var require_lrucache = __commonJS({ var require_lrucache = __commonJS({
"node_modules/semver/internal/lrucache.js"(exports2, module2) { "node_modules/semver/internal/lrucache.js"(exports2, module2) {
@@ -27738,6 +27779,7 @@ var require_semver2 = __commonJS({
var lte = require_lte(); var lte = require_lte();
var cmp = require_cmp(); var cmp = require_cmp();
var coerce3 = require_coerce(); var coerce3 = require_coerce();
var truncate = require_truncate();
var Comparator = require_comparator(); var Comparator = require_comparator();
var Range2 = require_range(); var Range2 = require_range();
var satisfies2 = require_satisfies(); var satisfies2 = require_satisfies();
@@ -27776,6 +27818,7 @@ var require_semver2 = __commonJS({
lte, lte,
cmp, cmp,
coerce: coerce3, coerce: coerce3,
truncate,
Comparator, Comparator,
Range: Range2, Range: Range2,
satisfies: satisfies2, satisfies: satisfies2,
@@ -42359,12 +42402,12 @@ var require_operationHelpers = __commonJS({
if (hasOriginalRequest(request3)) { if (hasOriginalRequest(request3)) {
return getOperationRequestInfo(request3[originalRequestSymbol]); return getOperationRequestInfo(request3[originalRequestSymbol]);
} }
let info7 = state_js_1.state.operationRequestMap.get(request3); let info8 = state_js_1.state.operationRequestMap.get(request3);
if (!info7) { if (!info8) {
info7 = {}; info8 = {};
state_js_1.state.operationRequestMap.set(request3, info7); state_js_1.state.operationRequestMap.set(request3, info8);
} }
return info7; return info8;
} }
} }
}); });
@@ -76911,9 +76954,9 @@ var require_reflection_type_check = __commonJS({
var reflection_info_1 = require_reflection_info(); var reflection_info_1 = require_reflection_info();
var oneof_1 = require_oneof(); var oneof_1 = require_oneof();
var ReflectionTypeCheck = class { var ReflectionTypeCheck = class {
constructor(info7) { constructor(info8) {
var _a; var _a;
this.fields = (_a = info7.fields) !== null && _a !== void 0 ? _a : []; this.fields = (_a = info8.fields) !== null && _a !== void 0 ? _a : [];
} }
prepare() { prepare() {
if (this.data) if (this.data)
@@ -77159,8 +77202,8 @@ var require_reflection_json_reader = __commonJS({
var assert_1 = require_assert(); var assert_1 = require_assert();
var reflection_long_convert_1 = require_reflection_long_convert(); var reflection_long_convert_1 = require_reflection_long_convert();
var ReflectionJsonReader = class { var ReflectionJsonReader = class {
constructor(info7) { constructor(info8) {
this.info = info7; this.info = info8;
} }
prepare() { prepare() {
var _a; var _a;
@@ -77456,9 +77499,9 @@ var require_reflection_json_writer = __commonJS({
var reflection_info_1 = require_reflection_info(); var reflection_info_1 = require_reflection_info();
var assert_1 = require_assert(); var assert_1 = require_assert();
var ReflectionJsonWriter = class { var ReflectionJsonWriter = class {
constructor(info7) { constructor(info8) {
var _a; var _a;
this.fields = (_a = info7.fields) !== null && _a !== void 0 ? _a : []; this.fields = (_a = info8.fields) !== null && _a !== void 0 ? _a : [];
} }
/** /**
* Converts the message to a JSON object, based on the field descriptors. * Converts the message to a JSON object, based on the field descriptors.
@@ -77711,8 +77754,8 @@ var require_reflection_binary_reader = __commonJS({
var reflection_long_convert_1 = require_reflection_long_convert(); var reflection_long_convert_1 = require_reflection_long_convert();
var reflection_scalar_default_1 = require_reflection_scalar_default(); var reflection_scalar_default_1 = require_reflection_scalar_default();
var ReflectionBinaryReader = class { var ReflectionBinaryReader = class {
constructor(info7) { constructor(info8) {
this.info = info7; this.info = info8;
} }
prepare() { prepare() {
var _a; var _a;
@@ -77885,8 +77928,8 @@ var require_reflection_binary_writer = __commonJS({
var assert_1 = require_assert(); var assert_1 = require_assert();
var pb_long_1 = require_pb_long(); var pb_long_1 = require_pb_long();
var ReflectionBinaryWriter = class { var ReflectionBinaryWriter = class {
constructor(info7) { constructor(info8) {
this.info = info7; this.info = info8;
} }
prepare() { prepare() {
if (!this.fields) { if (!this.fields) {
@@ -78136,9 +78179,9 @@ var require_reflection_merge_partial = __commonJS({
"use strict"; "use strict";
Object.defineProperty(exports2, "__esModule", { value: true }); Object.defineProperty(exports2, "__esModule", { value: true });
exports2.reflectionMergePartial = void 0; exports2.reflectionMergePartial = void 0;
function reflectionMergePartial(info7, target, source) { function reflectionMergePartial(info8, target, source) {
let fieldValue, input = source, output; let fieldValue, input = source, output;
for (let field of info7.fields) { for (let field of info8.fields) {
let name = field.localName; let name = field.localName;
if (field.oneof) { if (field.oneof) {
const group = input[field.oneof]; const group = input[field.oneof];
@@ -78207,12 +78250,12 @@ var require_reflection_equals = __commonJS({
Object.defineProperty(exports2, "__esModule", { value: true }); Object.defineProperty(exports2, "__esModule", { value: true });
exports2.reflectionEquals = void 0; exports2.reflectionEquals = void 0;
var reflection_info_1 = require_reflection_info(); var reflection_info_1 = require_reflection_info();
function reflectionEquals(info7, a, b) { function reflectionEquals(info8, a, b) {
if (a === b) if (a === b)
return true; return true;
if (!a || !b) if (!a || !b)
return false; return false;
for (let field of info7.fields) { for (let field of info8.fields) {
let localName = field.localName; let localName = field.localName;
let val_a = field.oneof ? a[field.oneof][localName] : a[localName]; let val_a = field.oneof ? a[field.oneof][localName] : a[localName];
let val_b = field.oneof ? b[field.oneof][localName] : b[localName]; let val_b = field.oneof ? b[field.oneof][localName] : b[localName];
@@ -91232,7 +91275,7 @@ var require_async = __commonJS({
} }
} }
var sortBy$1 = awaitify(sortBy, 3); var sortBy$1 = awaitify(sortBy, 3);
function timeout(asyncFn, milliseconds, info7) { function timeout(asyncFn, milliseconds, info8) {
var fn = wrapAsync(asyncFn); var fn = wrapAsync(asyncFn);
return initialParams((args, callback) => { return initialParams((args, callback) => {
var timedOut = false; var timedOut = false;
@@ -91241,8 +91284,8 @@ var require_async = __commonJS({
var name = asyncFn.name || "anonymous"; var name = asyncFn.name || "anonymous";
var error3 = new Error('Callback function "' + name + '" timed out.'); var error3 = new Error('Callback function "' + name + '" timed out.');
error3.code = "ETIMEDOUT"; error3.code = "ETIMEDOUT";
if (info7) { if (info8) {
error3.info = info7; error3.info = info8;
} }
timedOut = true; timedOut = true;
callback(error3); callback(error3);
@@ -114638,12 +114681,12 @@ var require_lib4 = __commonJS({
throw new Error("Client has already been disposed."); throw new Error("Client has already been disposed.");
} }
const parsedUrl = new URL(requestUrl); const parsedUrl = new URL(requestUrl);
let info7 = this._prepareRequest(verb, parsedUrl, headers); let info8 = this._prepareRequest(verb, parsedUrl, headers);
const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1; const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1;
let numTries = 0; let numTries = 0;
let response; let response;
do { do {
response = yield this.requestRaw(info7, data); response = yield this.requestRaw(info8, data);
if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
let authenticationHandler; let authenticationHandler;
for (const handler2 of this.handlers) { for (const handler2 of this.handlers) {
@@ -114653,7 +114696,7 @@ var require_lib4 = __commonJS({
} }
} }
if (authenticationHandler) { if (authenticationHandler) {
return authenticationHandler.handleAuthentication(this, info7, data); return authenticationHandler.handleAuthentication(this, info8, data);
} else { } else {
return response; return response;
} }
@@ -114676,8 +114719,8 @@ var require_lib4 = __commonJS({
} }
} }
} }
info7 = this._prepareRequest(verb, parsedRedirectUrl, headers); info8 = this._prepareRequest(verb, parsedRedirectUrl, headers);
response = yield this.requestRaw(info7, data); response = yield this.requestRaw(info8, data);
redirectsRemaining--; redirectsRemaining--;
} }
if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) { if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) {
@@ -114706,7 +114749,7 @@ var require_lib4 = __commonJS({
* @param info * @param info
* @param data * @param data
*/ */
requestRaw(info7, data) { requestRaw(info8, data) {
return __awaiter2(this, void 0, void 0, function* () { return __awaiter2(this, void 0, void 0, function* () {
return new Promise((resolve13, reject) => { return new Promise((resolve13, reject) => {
function callbackForResult(err, res) { function callbackForResult(err, res) {
@@ -114718,7 +114761,7 @@ var require_lib4 = __commonJS({
resolve13(res); resolve13(res);
} }
} }
this.requestRawWithCallback(info7, data, callbackForResult); this.requestRawWithCallback(info8, data, callbackForResult);
}); });
}); });
} }
@@ -114728,12 +114771,12 @@ var require_lib4 = __commonJS({
* @param data * @param data
* @param onResult * @param onResult
*/ */
requestRawWithCallback(info7, data, onResult) { requestRawWithCallback(info8, data, onResult) {
if (typeof data === "string") { if (typeof data === "string") {
if (!info7.options.headers) { if (!info8.options.headers) {
info7.options.headers = {}; info8.options.headers = {};
} }
info7.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8"); info8.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
} }
let callbackCalled = false; let callbackCalled = false;
function handleResult(err, res) { function handleResult(err, res) {
@@ -114742,7 +114785,7 @@ var require_lib4 = __commonJS({
onResult(err, res); onResult(err, res);
} }
} }
const req = info7.httpModule.request(info7.options, (msg) => { const req = info8.httpModule.request(info8.options, (msg) => {
const res = new HttpClientResponse(msg); const res = new HttpClientResponse(msg);
handleResult(void 0, res); handleResult(void 0, res);
}); });
@@ -114754,7 +114797,7 @@ var require_lib4 = __commonJS({
if (socket) { if (socket) {
socket.end(); socket.end();
} }
handleResult(new Error(`Request timeout: ${info7.options.path}`)); handleResult(new Error(`Request timeout: ${info8.options.path}`));
}); });
req.on("error", function(err) { req.on("error", function(err) {
handleResult(err); handleResult(err);
@@ -114790,27 +114833,27 @@ var require_lib4 = __commonJS({
return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
} }
_prepareRequest(method, requestUrl, headers) { _prepareRequest(method, requestUrl, headers) {
const info7 = {}; const info8 = {};
info7.parsedUrl = requestUrl; info8.parsedUrl = requestUrl;
const usingSsl = info7.parsedUrl.protocol === "https:"; const usingSsl = info8.parsedUrl.protocol === "https:";
info7.httpModule = usingSsl ? https3 : http; info8.httpModule = usingSsl ? https3 : http;
const defaultPort = usingSsl ? 443 : 80; const defaultPort = usingSsl ? 443 : 80;
info7.options = {}; info8.options = {};
info7.options.host = info7.parsedUrl.hostname; info8.options.host = info8.parsedUrl.hostname;
info7.options.port = info7.parsedUrl.port ? parseInt(info7.parsedUrl.port) : defaultPort; info8.options.port = info8.parsedUrl.port ? parseInt(info8.parsedUrl.port) : defaultPort;
info7.options.path = (info7.parsedUrl.pathname || "") + (info7.parsedUrl.search || ""); info8.options.path = (info8.parsedUrl.pathname || "") + (info8.parsedUrl.search || "");
info7.options.method = method; info8.options.method = method;
info7.options.headers = this._mergeHeaders(headers); info8.options.headers = this._mergeHeaders(headers);
if (this.userAgent != null) { if (this.userAgent != null) {
info7.options.headers["user-agent"] = this.userAgent; info8.options.headers["user-agent"] = this.userAgent;
} }
info7.options.agent = this._getAgent(info7.parsedUrl); info8.options.agent = this._getAgent(info8.parsedUrl);
if (this.handlers) { if (this.handlers) {
for (const handler2 of this.handlers) { for (const handler2 of this.handlers) {
handler2.prepareRequest(info7.options); handler2.prepareRequest(info8.options);
} }
} }
return info7; return info8;
} }
_mergeHeaders(headers) { _mergeHeaders(headers) {
if (this.requestOptions && this.requestOptions.headers) { if (this.requestOptions && this.requestOptions.headers) {
@@ -121198,11 +121241,11 @@ var require_dist_node12 = __commonJS({
} }
async function wrapRequest2(state, request3, options) { async function wrapRequest2(state, request3, options) {
const limiter = new Bottleneck2(); const limiter = new Bottleneck2();
limiter.on("failed", function(error3, info7) { limiter.on("failed", function(error3, info8) {
const maxRetries = ~~error3.request.request.retries; const maxRetries = ~~error3.request.request.retries;
const after = ~~error3.request.request.retryAfter; const after = ~~error3.request.request.retryAfter;
options.request.retryCount = info7.retryCount + 1; options.request.retryCount = info8.retryCount + 1;
if (maxRetries > info7.retryCount) { if (maxRetries > info8.retryCount) {
return after * state.retryAfterBaseValue; return after * state.retryAfterBaseValue;
} }
}); });
@@ -122410,12 +122453,12 @@ var require_lib5 = __commonJS({
throw new Error("Client has already been disposed."); throw new Error("Client has already been disposed.");
} }
const parsedUrl = new URL(requestUrl); const parsedUrl = new URL(requestUrl);
let info7 = this._prepareRequest(verb, parsedUrl, headers); let info8 = this._prepareRequest(verb, parsedUrl, headers);
const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1; const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1;
let numTries = 0; let numTries = 0;
let response; let response;
do { do {
response = yield this.requestRaw(info7, data); response = yield this.requestRaw(info8, data);
if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
let authenticationHandler; let authenticationHandler;
for (const handler2 of this.handlers) { for (const handler2 of this.handlers) {
@@ -122425,7 +122468,7 @@ var require_lib5 = __commonJS({
} }
} }
if (authenticationHandler) { if (authenticationHandler) {
return authenticationHandler.handleAuthentication(this, info7, data); return authenticationHandler.handleAuthentication(this, info8, data);
} else { } else {
return response; return response;
} }
@@ -122448,8 +122491,8 @@ var require_lib5 = __commonJS({
} }
} }
} }
info7 = this._prepareRequest(verb, parsedRedirectUrl, headers); info8 = this._prepareRequest(verb, parsedRedirectUrl, headers);
response = yield this.requestRaw(info7, data); response = yield this.requestRaw(info8, data);
redirectsRemaining--; redirectsRemaining--;
} }
if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) { if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) {
@@ -122478,7 +122521,7 @@ var require_lib5 = __commonJS({
* @param info * @param info
* @param data * @param data
*/ */
requestRaw(info7, data) { requestRaw(info8, data) {
return __awaiter2(this, void 0, void 0, function* () { return __awaiter2(this, void 0, void 0, function* () {
return new Promise((resolve13, reject) => { return new Promise((resolve13, reject) => {
function callbackForResult(err, res) { function callbackForResult(err, res) {
@@ -122490,7 +122533,7 @@ var require_lib5 = __commonJS({
resolve13(res); resolve13(res);
} }
} }
this.requestRawWithCallback(info7, data, callbackForResult); this.requestRawWithCallback(info8, data, callbackForResult);
}); });
}); });
} }
@@ -122500,12 +122543,12 @@ var require_lib5 = __commonJS({
* @param data * @param data
* @param onResult * @param onResult
*/ */
requestRawWithCallback(info7, data, onResult) { requestRawWithCallback(info8, data, onResult) {
if (typeof data === "string") { if (typeof data === "string") {
if (!info7.options.headers) { if (!info8.options.headers) {
info7.options.headers = {}; info8.options.headers = {};
} }
info7.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8"); info8.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
} }
let callbackCalled = false; let callbackCalled = false;
function handleResult(err, res) { function handleResult(err, res) {
@@ -122514,7 +122557,7 @@ var require_lib5 = __commonJS({
onResult(err, res); onResult(err, res);
} }
} }
const req = info7.httpModule.request(info7.options, (msg) => { const req = info8.httpModule.request(info8.options, (msg) => {
const res = new HttpClientResponse(msg); const res = new HttpClientResponse(msg);
handleResult(void 0, res); handleResult(void 0, res);
}); });
@@ -122526,7 +122569,7 @@ var require_lib5 = __commonJS({
if (socket) { if (socket) {
socket.end(); socket.end();
} }
handleResult(new Error(`Request timeout: ${info7.options.path}`)); handleResult(new Error(`Request timeout: ${info8.options.path}`));
}); });
req.on("error", function(err) { req.on("error", function(err) {
handleResult(err); handleResult(err);
@@ -122562,27 +122605,27 @@ var require_lib5 = __commonJS({
return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
} }
_prepareRequest(method, requestUrl, headers) { _prepareRequest(method, requestUrl, headers) {
const info7 = {}; const info8 = {};
info7.parsedUrl = requestUrl; info8.parsedUrl = requestUrl;
const usingSsl = info7.parsedUrl.protocol === "https:"; const usingSsl = info8.parsedUrl.protocol === "https:";
info7.httpModule = usingSsl ? https3 : http; info8.httpModule = usingSsl ? https3 : http;
const defaultPort = usingSsl ? 443 : 80; const defaultPort = usingSsl ? 443 : 80;
info7.options = {}; info8.options = {};
info7.options.host = info7.parsedUrl.hostname; info8.options.host = info8.parsedUrl.hostname;
info7.options.port = info7.parsedUrl.port ? parseInt(info7.parsedUrl.port) : defaultPort; info8.options.port = info8.parsedUrl.port ? parseInt(info8.parsedUrl.port) : defaultPort;
info7.options.path = (info7.parsedUrl.pathname || "") + (info7.parsedUrl.search || ""); info8.options.path = (info8.parsedUrl.pathname || "") + (info8.parsedUrl.search || "");
info7.options.method = method; info8.options.method = method;
info7.options.headers = this._mergeHeaders(headers); info8.options.headers = this._mergeHeaders(headers);
if (this.userAgent != null) { if (this.userAgent != null) {
info7.options.headers["user-agent"] = this.userAgent; info8.options.headers["user-agent"] = this.userAgent;
} }
info7.options.agent = this._getAgent(info7.parsedUrl); info8.options.agent = this._getAgent(info8.parsedUrl);
if (this.handlers) { if (this.handlers) {
for (const handler2 of this.handlers) { for (const handler2 of this.handlers) {
handler2.prepareRequest(info7.options); handler2.prepareRequest(info8.options);
} }
} }
return info7; return info8;
} }
_mergeHeaders(headers) { _mergeHeaders(headers) {
if (this.requestOptions && this.requestOptions.headers) { if (this.requestOptions && this.requestOptions.headers) {
@@ -124572,10 +124615,10 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
(0, command_1.issueCommand)("notice", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); (0, command_1.issueCommand)("notice", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
} }
exports2.notice = notice; exports2.notice = notice;
function info7(message) { function info8(message) {
process.stdout.write(message + os7.EOL); process.stdout.write(message + os7.EOL);
} }
exports2.info = info7; exports2.info = info8;
function startGroup4(name) { function startGroup4(name) {
(0, command_1.issue)("group", name); (0, command_1.issue)("group", name);
} }
@@ -124988,7 +125031,7 @@ var require_tmp = __commonJS({
cb(null, path28.join(parentDir, path28.basename(pathToResolve))); cb(null, path28.join(parentDir, path28.basename(pathToResolve)));
}); });
} else { } else {
fs30.realpath(path28, cb); fs30.realpath(pathToResolve, cb);
} }
}); });
} }
@@ -125020,16 +125063,31 @@ var require_tmp = __commonJS({
].join(""); ].join("");
return path28.join(tmpDir, opts.dir, name); return path28.join(tmpDir, opts.dir, name);
} }
function _assertPath(option, value) {
if (typeof value !== "string") {
throw new Error(`${option} option must be a string, got "${typeof value}".`);
}
if (value.includes("..")) {
throw new Error("Relative value not allowed");
}
return value;
}
function _assertOptionsBase(options) { function _assertOptionsBase(options) {
if (!_isUndefined(options.name)) { if (!_isUndefined(options.name)) {
const name = options.name; const name = options.name;
if (path28.isAbsolute(name)) throw new Error(`name option must not contain an absolute path, found "${name}".`); if (path28.isAbsolute(name)) throw new Error(`name option must not contain an absolute path, found "${name}".`);
const basename2 = path28.basename(name); const basename2 = path28.basename(name);
if (basename2 === ".." || basename2 === "." || basename2 !== name) if (basename2 === ".." || basename2 === "." || basename2 !== name) {
throw new Error(`name option must not contain a path, found "${name}".`); throw new Error(`name option must not contain a path, found "${name}".`);
}
} }
if (!_isUndefined(options.template) && !options.template.match(TEMPLATE_PATTERN)) { if (!_isUndefined(options.template)) {
throw new Error(`Invalid template, found "${options.template}".`); if (typeof options.template !== "string") {
throw new Error(`template option must be a string, got "${typeof options.template}".`);
}
if (!options.template.match(TEMPLATE_PATTERN)) {
throw new Error(`Invalid template, found "${options.template}".`);
}
} }
if (!_isUndefined(options.tries) && isNaN(options.tries) || options.tries < 0) { if (!_isUndefined(options.tries) && isNaN(options.tries) || options.tries < 0) {
throw new Error(`Invalid tries, found "${options.tries}".`); throw new Error(`Invalid tries, found "${options.tries}".`);
@@ -125039,15 +125097,16 @@ var require_tmp = __commonJS({
options.detachDescriptor = !!options.detachDescriptor; options.detachDescriptor = !!options.detachDescriptor;
options.discardDescriptor = !!options.discardDescriptor; options.discardDescriptor = !!options.discardDescriptor;
options.unsafeCleanup = !!options.unsafeCleanup; options.unsafeCleanup = !!options.unsafeCleanup;
options.prefix = _isUndefined(options.prefix) ? "" : options.prefix; options.prefix = _isUndefined(options.prefix) ? "" : _assertPath("prefix", options.prefix);
options.postfix = _isUndefined(options.postfix) ? "" : options.postfix; options.postfix = _isUndefined(options.postfix) ? "" : _assertPath("postfix", options.postfix);
options.template = _isUndefined(options.template) ? void 0 : _assertPath("template", options.template);
} }
function _getRelativePath(option, name, tmpDir, cb) { function _getRelativePath(option, name, tmpDir, cb) {
if (_isUndefined(name)) return cb(null); if (_isUndefined(name)) return cb(null);
_resolvePath(name, tmpDir, function(err, resolvedPath) { _resolvePath(name, tmpDir, function(err, resolvedPath) {
if (err) return cb(err); if (err) return cb(err);
const relativePath = path28.relative(tmpDir, resolvedPath); const relativePath = path28.relative(tmpDir, resolvedPath);
if (!resolvedPath.startsWith(tmpDir)) { if (relativePath.startsWith("..") || path28.isAbsolute(relativePath)) {
return cb(new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`)); return cb(new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`));
} }
cb(null, relativePath); cb(null, relativePath);
@@ -125057,7 +125116,7 @@ var require_tmp = __commonJS({
if (_isUndefined(name)) return; if (_isUndefined(name)) return;
const resolvedPath = _resolvePathSync(name, tmpDir); const resolvedPath = _resolvePathSync(name, tmpDir);
const relativePath = path28.relative(tmpDir, resolvedPath); const relativePath = path28.relative(tmpDir, resolvedPath);
if (!resolvedPath.startsWith(tmpDir)) { if (relativePath.startsWith("..") || path28.isAbsolute(relativePath)) {
throw new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`); throw new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`);
} }
return relativePath; return relativePath;
@@ -147623,7 +147682,7 @@ var safeDump = renamed("safeDump", "dump");
var semver = __toESM(require_semver2()); var semver = __toESM(require_semver2());
// src/api-compatibility.json // src/api-compatibility.json
var maximumVersion = "3.21"; var maximumVersion = "3.22";
var minimumVersion = "3.16"; var minimumVersion = "3.16";
// src/json/index.ts // src/json/index.ts
@@ -148003,13 +148062,42 @@ function asHTTPError(arg) {
return void 0; return void 0;
} }
var cachedCodeQlVersion = void 0; var cachedCodeQlVersion = void 0;
function cacheCodeQlVersion(version) { function isVersionInfo(x) {
const candidate = x;
return typeof candidate === "object" && candidate !== null && typeof candidate.version === "string" && (candidate.features === void 0 || typeof candidate.features === "object" && candidate.features !== null) && (candidate.overlayVersion === void 0 || typeof candidate.overlayVersion === "number");
}
function isPersistedVersionInfo(x) {
const candidate = x;
return typeof candidate === "object" && candidate !== null && typeof candidate.cmd === "string" && isVersionInfo(candidate.version);
}
function cacheCodeQlVersion(cmd, version) {
if (cachedCodeQlVersion !== void 0) { if (cachedCodeQlVersion !== void 0) {
throw new Error("cacheCodeQlVersion() should be called only once"); throw new Error("cacheCodeQlVersion() should be called only once");
} }
cachedCodeQlVersion = version; cachedCodeQlVersion = version;
core3.exportVariable(
"CODEQL_ACTION_CLI_VERSION_INFO" /* CODEQL_VERSION_INFO */,
JSON.stringify({ cmd, version })
);
} }
function getCachedCodeQlVersion() { function getCachedCodeQlVersion(cmd) {
if (cachedCodeQlVersion !== void 0) {
return cachedCodeQlVersion;
}
const serialized = process.env["CODEQL_ACTION_CLI_VERSION_INFO" /* CODEQL_VERSION_INFO */];
if (!serialized) {
return void 0;
}
let persisted;
try {
persisted = JSON.parse(serialized);
} catch {
return void 0;
}
if (!isPersistedVersionInfo(persisted) || cmd !== void 0 && persisted.cmd !== cmd) {
return void 0;
}
cachedCodeQlVersion = persisted.version;
return cachedCodeQlVersion; return cachedCodeQlVersion;
} }
async function codeQlVersionAtLeast(codeql, requiredVersion) { async function codeQlVersionAtLeast(codeql, requiredVersion) {
@@ -148307,7 +148395,7 @@ function getDiffRangesJsonFilePath() {
return path2.join(getTemporaryDirectory(), PR_DIFF_RANGE_JSON_FILENAME); return path2.join(getTemporaryDirectory(), PR_DIFF_RANGE_JSON_FILENAME);
} }
function getActionVersion() { function getActionVersion() {
return "4.36.1"; return "4.36.2";
} }
function getWorkflowEventName() { function getWorkflowEventName() {
return getRequiredEnvParam("GITHUB_EVENT_NAME"); return getRequiredEnvParam("GITHUB_EVENT_NAME");
@@ -148610,11 +148698,11 @@ async function errorRequest(state, octokit, error3, options) {
} }
async function wrapRequest(state, octokit, request3, options) { async function wrapRequest(state, octokit, request3, options) {
const limiter = new import_light.default(); const limiter = new import_light.default();
limiter.on("failed", function(error3, info7) { limiter.on("failed", function(error3, info8) {
const maxRetries = ~~error3.request.request?.retries; const maxRetries = ~~error3.request.request?.retries;
const after = ~~error3.request.request?.retryAfter; const after = ~~error3.request.request?.retryAfter;
options.request.retryCount = info7.retryCount + 1; options.request.retryCount = info8.retryCount + 1;
if (maxRetries > info7.retryCount) { if (maxRetries > info8.retryCount) {
return after * state.retryAfterBaseValue; return after * state.retryAfterBaseValue;
} }
}); });
@@ -151652,6 +151740,7 @@ async function initActionState({
extraQueryExclusions: [], extraQueryExclusions: [],
overlayDatabaseMode: "none" /* None */, overlayDatabaseMode: "none" /* None */,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: false,
repositoryProperties, repositoryProperties,
enableFileCoverageInformation enableFileCoverageInformation
}; };
@@ -151780,6 +151869,7 @@ async function checkOverlayEnablement(codeql, features, languages, sourceRoot, b
return validateOverlayDatabaseMode( return validateOverlayDatabaseMode(
modeEnv, modeEnv,
false, false,
true,
codeql, codeql,
languages, languages,
sourceRoot, sourceRoot,
@@ -151854,6 +151944,7 @@ async function checkOverlayEnablement(codeql, features, languages, sourceRoot, b
return validateOverlayDatabaseMode( return validateOverlayDatabaseMode(
overlayDatabaseMode, overlayDatabaseMode,
true, true,
false,
codeql, codeql,
languages, languages,
sourceRoot, sourceRoot,
@@ -151862,7 +151953,7 @@ async function checkOverlayEnablement(codeql, features, languages, sourceRoot, b
logger logger
); );
} }
async function validateOverlayDatabaseMode(overlayDatabaseMode, useOverlayDatabaseCaching, codeql, languages, sourceRoot, buildMode, gitVersion, logger) { async function validateOverlayDatabaseMode(overlayDatabaseMode, useOverlayDatabaseCaching, overlayModeSetExplicitly, codeql, languages, sourceRoot, buildMode, gitVersion, logger) {
if (buildMode !== "none" /* None */ && (await Promise.all( if (buildMode !== "none" /* None */ && (await Promise.all(
languages.map( languages.map(
async (l) => l !== "go" /* go */ && // Workaround to allow overlay analysis for Go with any build async (l) => l !== "go" /* go */ && // Workaround to allow overlay analysis for Go with any build
@@ -151906,7 +151997,8 @@ async function validateOverlayDatabaseMode(overlayDatabaseMode, useOverlayDataba
} }
return new Success({ return new Success({
overlayDatabaseMode, overlayDatabaseMode,
useOverlayDatabaseCaching useOverlayDatabaseCaching,
overlayModeSetExplicitly
}); });
} }
async function isTrapCachingEnabled(features, overlayDatabaseMode) { async function isTrapCachingEnabled(features, overlayDatabaseMode) {
@@ -151944,7 +152036,7 @@ function hasQueryCustomisation(userConfig) {
return isDefined2(userConfig["disable-default-queries"]) || isDefined2(userConfig.queries) || isDefined2(userConfig["query-filters"]); return isDefined2(userConfig["disable-default-queries"]) || isDefined2(userConfig.queries) || isDefined2(userConfig["query-filters"]);
} }
async function applyIncrementalAnalysisSettings(config, hasDiffRanges, codeql, logger) { async function applyIncrementalAnalysisSettings(config, hasDiffRanges, codeql, logger) {
if (config.overlayDatabaseMode === "overlay" /* Overlay */ && !hasDiffRanges) { if (config.overlayDatabaseMode === "overlay" /* Overlay */ && !hasDiffRanges && !config.overlayModeSetExplicitly) {
logger.info( logger.info(
`Reverting overlay database mode to ${"none" /* None */} because the PR diff ranges could not be computed.` `Reverting overlay database mode to ${"none" /* None */} because the PR diff ranges could not be computed.`
); );
@@ -152052,12 +152144,17 @@ async function initConfig(features, inputs) {
logger logger
); );
if (overlayDatabaseModeResult.isSuccess()) { if (overlayDatabaseModeResult.isSuccess()) {
const { overlayDatabaseMode, useOverlayDatabaseCaching } = overlayDatabaseModeResult.value; const {
overlayDatabaseMode,
useOverlayDatabaseCaching,
overlayModeSetExplicitly
} = overlayDatabaseModeResult.value;
logger.info( logger.info(
`Using overlay database mode: ${overlayDatabaseMode} ${useOverlayDatabaseCaching ? "with" : "without"} caching.` `Using overlay database mode: ${overlayDatabaseMode} ${useOverlayDatabaseCaching ? "with" : "without"} caching.`
); );
config.overlayDatabaseMode = overlayDatabaseMode; config.overlayDatabaseMode = overlayDatabaseMode;
config.useOverlayDatabaseCaching = useOverlayDatabaseCaching; config.useOverlayDatabaseCaching = useOverlayDatabaseCaching;
config.overlayModeSetExplicitly = overlayModeSetExplicitly;
} else { } else {
const overlayDisabledReason = overlayDatabaseModeResult.value; const overlayDisabledReason = overlayDatabaseModeResult.value;
logger.info( logger.info(
@@ -153805,7 +153902,7 @@ async function getCodeQLForCmd(cmd, checkVersion) {
return cmd; return cmd;
}, },
async getVersion() { async getVersion() {
let result = getCachedCodeQlVersion(); let result = getCachedCodeQlVersion(cmd);
if (result === void 0) { if (result === void 0) {
const output = await runCli(cmd, ["version", "--format=json"], { const output = await runCli(cmd, ["version", "--format=json"], {
noStreamStdout: true noStreamStdout: true
@@ -153817,12 +153914,12 @@ async function getCodeQLForCmd(cmd, checkVersion) {
`Invalid JSON output from \`version --format=json\`: ${output}` `Invalid JSON output from \`version --format=json\`: ${output}`
); );
} }
cacheCodeQlVersion(result); cacheCodeQlVersion(cmd, result);
} }
return result; return result;
}, },
async printVersion() { async printVersion() {
await runCli(cmd, ["version", "--format=json"]); core11.info(JSON.stringify(await this.getVersion(), null, 2));
}, },
async supportsFeature(feature) { async supportsFeature(feature) {
return isSupportedToolsFeature(await this.getVersion(), feature); return isSupportedToolsFeature(await this.getVersion(), feature);
+93 -578
View File
@@ -1,12 +1,12 @@
{ {
"name": "codeql", "name": "codeql",
"version": "4.36.1", "version": "4.36.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "codeql", "name": "codeql",
"version": "4.36.1", "version": "4.36.2",
"license": "MIT", "license": "MIT",
"workspaces": [ "workspaces": [
"pr-checks" "pr-checks"
@@ -32,18 +32,18 @@
"jsonschema": "1.5.0", "jsonschema": "1.5.0",
"long": "^5.3.2", "long": "^5.3.2",
"node-forge": "^1.4.0", "node-forge": "^1.4.0",
"semver": "^7.7.4", "semver": "^7.8.0",
"uuid": "^14.0.0" "uuid": "^14.0.0"
}, },
"devDependencies": { "devDependencies": {
"@ava/typescript": "6.0.0", "@ava/typescript": "6.0.0",
"@eslint/compat": "^2.0.5", "@eslint/compat": "^2.1.0",
"@microsoft/eslint-formatter-sarif": "^3.1.0", "@microsoft/eslint-formatter-sarif": "^3.1.0",
"@octokit/types": "^16.0.0", "@octokit/types": "^16.0.0",
"@types/archiver": "^7.0.0", "@types/archiver": "^7.0.0",
"@types/follow-redirects": "^1.14.4", "@types/follow-redirects": "^1.14.4",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/node": "^20.19.39", "@types/node": "^20.19.41",
"@types/node-forge": "^1.3.14", "@types/node-forge": "^1.3.14",
"@types/sarif": "^2.1.7", "@types/sarif": "^2.1.7",
"@types/semver": "^7.7.1", "@types/semver": "^7.7.1",
@@ -58,10 +58,10 @@
"eslint-plugin-no-async-foreach": "^0.1.1", "eslint-plugin-no-async-foreach": "^0.1.1",
"glob": "^11.1.0", "glob": "^11.1.0",
"globals": "^17.6.0", "globals": "^17.6.0",
"nock": "^14.0.12", "nock": "^14.0.15",
"sinon": "^22.0.0", "sinon": "^22.0.0",
"typescript": "^6.0.3", "typescript": "^6.0.3",
"typescript-eslint": "^8.59.2" "typescript-eslint": "^8.59.4"
} }
}, },
"node_modules/@aashutoshrathi/word-wrap": { "node_modules/@aashutoshrathi/word-wrap": {
@@ -1316,9 +1316,9 @@
} }
}, },
"node_modules/@eslint/compat": { "node_modules/@eslint/compat": {
"version": "2.0.5", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.1.0.tgz",
"integrity": "sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg==", "integrity": "sha512-LgaSCymEpw7tF53xvDw9SNsraPb1IBHxpdABIOM0hW8UAlP8znrjYtuxfR58FSJ3L9BhwD+FaPRFQpZq84Nh6g==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
@@ -2469,9 +2469,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.19.39", "version": "20.19.41",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz",
"integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -2528,17 +2528,17 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.4.tgz",
"integrity": "sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==", "integrity": "sha512-PegsU+XfyJJNjd4+u/k6f9yTyp0lEXXiPopUNobZcIAUJFGICFLN+sP0Rb3JehVmiij1Ph0dFGYqODoRo/2+6A==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.12.2", "@eslint-community/regexpp": "^4.12.2",
"@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/scope-manager": "8.59.4",
"@typescript-eslint/type-utils": "8.59.2", "@typescript-eslint/type-utils": "8.59.4",
"@typescript-eslint/utils": "8.59.2", "@typescript-eslint/utils": "8.59.4",
"@typescript-eslint/visitor-keys": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.4",
"ignore": "^7.0.5", "ignore": "^7.0.5",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"ts-api-utils": "^2.5.0" "ts-api-utils": "^2.5.0"
@@ -2551,7 +2551,7 @@
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
}, },
"peerDependencies": { "peerDependencies": {
"@typescript-eslint/parser": "^8.59.2", "@typescript-eslint/parser": "^8.59.4",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.1.0" "typescript": ">=4.8.4 <6.1.0"
} }
@@ -2567,16 +2567,16 @@
} }
}, },
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.4.tgz",
"integrity": "sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ==", "integrity": "sha512-zORHqO/tuhxY1zWuTvMUqddRxpiFJ72xVfcNoWpqdLjs6lfPbuQBJuW4pk+49/uBMy7Ssr4bzgjiKmmDB1UbZQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/scope-manager": "8.59.4",
"@typescript-eslint/types": "8.59.2", "@typescript-eslint/types": "8.59.4",
"@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.4",
"@typescript-eslint/visitor-keys": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.4",
"debug": "^4.4.3" "debug": "^4.4.3"
}, },
"engines": { "engines": {
@@ -2610,14 +2610,14 @@
} }
}, },
"node_modules/@typescript-eslint/project-service": { "node_modules/@typescript-eslint/project-service": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.4.tgz",
"integrity": "sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw==", "integrity": "sha512-Ly00Vu4oAacfDeHp2Zg85ioNG6l8HG+tN1D7J+xTHSxu9y0awYKJ2zH1rFBn8ZSfuGK+7FxK3Cgl3uAz0aZZLg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/tsconfig-utils": "^8.59.2", "@typescript-eslint/tsconfig-utils": "^8.59.4",
"@typescript-eslint/types": "^8.59.2", "@typescript-eslint/types": "^8.59.4",
"debug": "^4.4.3" "debug": "^4.4.3"
}, },
"engines": { "engines": {
@@ -2650,14 +2650,14 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.4.tgz",
"integrity": "sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg==", "integrity": "sha512-mUeR/3H1WrTAddJrwut8OoPjfauaztMQmRwV5fQTUyNVJCLiUXXe4lGEyYIL2oFDpP7UtgbGJXCt72wT0z2S3Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.59.2", "@typescript-eslint/types": "8.59.4",
"@typescript-eslint/visitor-keys": "8.59.2" "@typescript-eslint/visitor-keys": "8.59.4"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2668,9 +2668,9 @@
} }
}, },
"node_modules/@typescript-eslint/tsconfig-utils": { "node_modules/@typescript-eslint/tsconfig-utils": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.4.tgz",
"integrity": "sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw==", "integrity": "sha512-DLCpnKgD4alVxTBSKulK+gU1KCqOgUXfDRDXh2mZgzokQKa/70ax93I2uVO3m/LLvIAtWZIFoiifudmIqAxpMA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -2685,15 +2685,15 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.4.tgz",
"integrity": "sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ==", "integrity": "sha512-uonTuPAAKr9XaBGqJ3LjYTh72zy5DyGesljO9gtmk/eFW0W1fRHjnwVYKB35Lm8d5Q5CluEW3gPHjTvZTmgrfA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.59.2", "@typescript-eslint/types": "8.59.4",
"@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.4",
"@typescript-eslint/utils": "8.59.2", "@typescript-eslint/utils": "8.59.4",
"debug": "^4.4.3", "debug": "^4.4.3",
"ts-api-utils": "^2.5.0" "ts-api-utils": "^2.5.0"
}, },
@@ -2728,9 +2728,9 @@
} }
}, },
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.4.tgz",
"integrity": "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==", "integrity": "sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -2742,16 +2742,16 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.4.tgz",
"integrity": "sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg==", "integrity": "sha512-F+RuOmcDXo4+TPdfd/TCLS3m2nw8gE9XXyZLrA3JBfaA5tz9TtdkyD3YJFmPxulyc2cKbEok/CvFE3MgSLWnag==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/project-service": "8.59.2", "@typescript-eslint/project-service": "8.59.4",
"@typescript-eslint/tsconfig-utils": "8.59.2", "@typescript-eslint/tsconfig-utils": "8.59.4",
"@typescript-eslint/types": "8.59.2", "@typescript-eslint/types": "8.59.4",
"@typescript-eslint/visitor-keys": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.4",
"debug": "^4.4.3", "debug": "^4.4.3",
"minimatch": "^10.2.2", "minimatch": "^10.2.2",
"semver": "^7.7.3", "semver": "^7.7.3",
@@ -2827,16 +2827,16 @@
} }
}, },
"node_modules/@typescript-eslint/utils": { "node_modules/@typescript-eslint/utils": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.4.tgz",
"integrity": "sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q==", "integrity": "sha512-cYXeNAUsG4lJo5dbc1FcKm+JwIWrj1/UpTORsC6tGMjEZ81DYcvIr9/ueikhMa/Y/gDQYGp+YX9/xQrXje5BJw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.9.1", "@eslint-community/eslint-utils": "^4.9.1",
"@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/scope-manager": "8.59.4",
"@typescript-eslint/types": "8.59.2", "@typescript-eslint/types": "8.59.4",
"@typescript-eslint/typescript-estree": "8.59.2" "@typescript-eslint/typescript-estree": "8.59.4"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2851,13 +2851,13 @@
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/visitor-keys": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.4.tgz",
"integrity": "sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA==", "integrity": "sha512-U3gxVaDVnuZKhSspW/MzMxE1kq7zOdc072FcSNoqA1I9p8HyKbBFfEHoWckBAMgNMph4MamwS5iTVzFmrnt8TQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.59.2", "@typescript-eslint/types": "8.59.4",
"eslint-visitor-keys": "^5.0.0" "eslint-visitor-keys": "^5.0.0"
}, },
"engines": { "engines": {
@@ -7415,9 +7415,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/nock": { "node_modules/nock": {
"version": "14.0.12", "version": "14.0.15",
"resolved": "https://registry.npmjs.org/nock/-/nock-14.0.12.tgz", "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.15.tgz",
"integrity": "sha512-kZM3bHV0KzhHH6E2eRszHyML/w87AUzLBwupNTHohtYWP9fZYgUPmCbSKq6ITfEEmHqN4/p0MscvUipT4P5Qsg==", "integrity": "sha512-S0a47C9pLvcYx/Ugf0H30BVBEcUgMMBDk9VJIDlJ8XGrfH2QDUD4Tgdp45qDIiHttokBG+IbsOtsvIjGR/j3bg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -8311,9 +8311,9 @@
} }
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "7.7.4", "version": "7.8.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz",
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
"license": "ISC", "license": "ISC",
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
@@ -9047,9 +9047,9 @@
} }
}, },
"node_modules/tmp": { "node_modules/tmp": {
"version": "0.2.4", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz",
"integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=14.14" "node": ">=14.14"
@@ -9140,14 +9140,13 @@
"license": "0BSD" "license": "0BSD"
}, },
"node_modules/tsx": { "node_modules/tsx": {
"version": "4.21.0", "version": "4.22.3",
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.3.tgz",
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "integrity": "sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"esbuild": "~0.27.0", "esbuild": "~0.28.0"
"get-tsconfig": "^4.7.5"
}, },
"bin": { "bin": {
"tsx": "dist/cli.mjs" "tsx": "dist/cli.mjs"
@@ -9159,490 +9158,6 @@
"fsevents": "~2.3.3" "fsevents": "~2.3.3"
} }
}, },
"node_modules/tsx/node_modules/@esbuild/aix-ppc64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
"integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"aix"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/android-arm": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
"integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/android-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
"integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/android-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
"integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/darwin-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
"integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/darwin-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
"integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/freebsd-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
"integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/freebsd-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
"integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-arm": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
"integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
"integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-ia32": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
"integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-loong64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
"integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
"cpu": [
"loong64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-mips64el": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
"integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
"cpu": [
"mips64el"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-ppc64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
"integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-riscv64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
"integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-s390x": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
"integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
"cpu": [
"s390x"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/linux-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
"integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/netbsd-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
"integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/netbsd-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
"integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/openbsd-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
"integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/openbsd-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
"integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/openharmony-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
"integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/sunos-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
"integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/win32-arm64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
"integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/win32-ia32": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
"integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/@esbuild/win32-x64": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
"integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=18"
}
},
"node_modules/tsx/node_modules/esbuild": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz",
"integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=18"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.27.7",
"@esbuild/android-arm": "0.27.7",
"@esbuild/android-arm64": "0.27.7",
"@esbuild/android-x64": "0.27.7",
"@esbuild/darwin-arm64": "0.27.7",
"@esbuild/darwin-x64": "0.27.7",
"@esbuild/freebsd-arm64": "0.27.7",
"@esbuild/freebsd-x64": "0.27.7",
"@esbuild/linux-arm": "0.27.7",
"@esbuild/linux-arm64": "0.27.7",
"@esbuild/linux-ia32": "0.27.7",
"@esbuild/linux-loong64": "0.27.7",
"@esbuild/linux-mips64el": "0.27.7",
"@esbuild/linux-ppc64": "0.27.7",
"@esbuild/linux-riscv64": "0.27.7",
"@esbuild/linux-s390x": "0.27.7",
"@esbuild/linux-x64": "0.27.7",
"@esbuild/netbsd-arm64": "0.27.7",
"@esbuild/netbsd-x64": "0.27.7",
"@esbuild/openbsd-arm64": "0.27.7",
"@esbuild/openbsd-x64": "0.27.7",
"@esbuild/openharmony-arm64": "0.27.7",
"@esbuild/sunos-x64": "0.27.7",
"@esbuild/win32-arm64": "0.27.7",
"@esbuild/win32-ia32": "0.27.7",
"@esbuild/win32-x64": "0.27.7"
}
},
"node_modules/tunnel": { "node_modules/tunnel": {
"version": "0.0.6", "version": "0.0.6",
"license": "MIT", "license": "MIT",
@@ -9777,16 +9292,16 @@
} }
}, },
"node_modules/typescript-eslint": { "node_modules/typescript-eslint": {
"version": "8.59.2", "version": "8.59.4",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.2.tgz", "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.4.tgz",
"integrity": "sha512-pJw051uomb3ZeCzGTpRb8RbEqB5Y4WWet8gl/GcTlU35BSx0PVdZ86/bqkQCyKKuraVQEK7r6kBHQXF+fBhkoQ==", "integrity": "sha512-Rw6+44QNFaXtgHSjPy+Kw8hrJniMYzR85E9yLmOLcfZ91/rz+JXQbDTCmc6ccxMPY6K6PgAq26f0JCBfR7LIPQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/eslint-plugin": "8.59.2", "@typescript-eslint/eslint-plugin": "8.59.4",
"@typescript-eslint/parser": "8.59.2", "@typescript-eslint/parser": "8.59.4",
"@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.4",
"@typescript-eslint/utils": "8.59.2" "@typescript-eslint/utils": "8.59.4"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10212,9 +9727,9 @@
} }
}, },
"node_modules/yaml": { "node_modules/yaml": {
"version": "2.8.4", "version": "2.9.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
"integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
"license": "ISC", "license": "ISC",
"bin": { "bin": {
"yaml": "bin.mjs" "yaml": "bin.mjs"
@@ -10302,11 +9817,11 @@
"@octokit/core": "^7.0.6", "@octokit/core": "^7.0.6",
"@octokit/plugin-paginate-rest": ">=9.2.2", "@octokit/plugin-paginate-rest": ">=9.2.2",
"@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0",
"yaml": "^2.8.4" "yaml": "^2.9.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^20.19.39", "@types/node": "^20.19.41",
"tsx": "^4.21.0" "tsx": "^4.22.3"
} }
} }
} }
+6 -6
View File
@@ -1,6 +1,6 @@
{ {
"name": "codeql", "name": "codeql",
"version": "4.36.1", "version": "4.36.2",
"private": true, "private": true,
"description": "CodeQL action", "description": "CodeQL action",
"scripts": { "scripts": {
@@ -40,18 +40,18 @@
"jsonschema": "1.5.0", "jsonschema": "1.5.0",
"long": "^5.3.2", "long": "^5.3.2",
"node-forge": "^1.4.0", "node-forge": "^1.4.0",
"semver": "^7.7.4", "semver": "^7.8.0",
"uuid": "^14.0.0" "uuid": "^14.0.0"
}, },
"devDependencies": { "devDependencies": {
"@ava/typescript": "6.0.0", "@ava/typescript": "6.0.0",
"@eslint/compat": "^2.0.5", "@eslint/compat": "^2.1.0",
"@microsoft/eslint-formatter-sarif": "^3.1.0", "@microsoft/eslint-formatter-sarif": "^3.1.0",
"@octokit/types": "^16.0.0", "@octokit/types": "^16.0.0",
"@types/archiver": "^7.0.0", "@types/archiver": "^7.0.0",
"@types/follow-redirects": "^1.14.4", "@types/follow-redirects": "^1.14.4",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/node": "^20.19.39", "@types/node": "^20.19.41",
"@types/node-forge": "^1.3.14", "@types/node-forge": "^1.3.14",
"@types/sarif": "^2.1.7", "@types/sarif": "^2.1.7",
"@types/semver": "^7.7.1", "@types/semver": "^7.7.1",
@@ -66,10 +66,10 @@
"eslint-plugin-no-async-foreach": "^0.1.1", "eslint-plugin-no-async-foreach": "^0.1.1",
"glob": "^11.1.0", "glob": "^11.1.0",
"globals": "^17.6.0", "globals": "^17.6.0",
"nock": "^14.0.12", "nock": "^14.0.15",
"sinon": "^22.0.0", "sinon": "^22.0.0",
"typescript": "^6.0.3", "typescript": "^6.0.3",
"typescript-eslint": "^8.59.2" "typescript-eslint": "^8.59.4"
}, },
"overrides": { "overrides": {
"@actions/tool-cache": { "@actions/tool-cache": {
+1 -1
View File
@@ -5,7 +5,7 @@ versions:
- default - default
steps: steps:
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@c4e5b1316158f92e3d49443a9d58b31d25ac0f8f # v1.306.0 uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1.307.0
with: with:
ruby-version: 2.6 ruby-version: 2.6
- name: Install Code Scanning integration - name: Install Code Scanning integration
+3 -3
View File
@@ -7,10 +7,10 @@
"@octokit/core": "^7.0.6", "@octokit/core": "^7.0.6",
"@octokit/plugin-paginate-rest": ">=9.2.2", "@octokit/plugin-paginate-rest": ">=9.2.2",
"@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0",
"yaml": "^2.8.4" "yaml": "^2.9.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^20.19.39", "@types/node": "^20.19.41",
"tsx": "^4.21.0" "tsx": "^4.22.3"
} }
} }
+1 -1
View File
@@ -1 +1 @@
{"maximumVersion": "3.21", "minimumVersion": "3.16"} {"maximumVersion": "3.22", "minimumVersion": "3.16"}
+4 -3
View File
@@ -523,7 +523,7 @@ async function getCodeQLForCmd(
return cmd; return cmd;
}, },
async getVersion() { async getVersion() {
let result = util.getCachedCodeQlVersion(); let result = util.getCachedCodeQlVersion(cmd);
if (result === undefined) { if (result === undefined) {
const output = await runCli(cmd, ["version", "--format=json"], { const output = await runCli(cmd, ["version", "--format=json"], {
noStreamStdout: true, noStreamStdout: true,
@@ -535,12 +535,13 @@ async function getCodeQLForCmd(
`Invalid JSON output from \`version --format=json\`: ${output}`, `Invalid JSON output from \`version --format=json\`: ${output}`,
); );
} }
util.cacheCodeQlVersion(result); util.cacheCodeQlVersion(cmd, result);
} }
return result; return result;
}, },
async printVersion() { async printVersion() {
await runCli(cmd, ["version", "--format=json"]); // Reuse the cached version information rather than invoking the CLI again.
core.info(JSON.stringify(await this.getVersion(), null, 2));
}, },
async supportsFeature(feature: ToolsFeature) { async supportsFeature(feature: ToolsFeature) {
return isSupportedToolsFeature(await this.getVersion(), feature); return isSupportedToolsFeature(await this.getVersion(), feature);
+70 -26
View File
@@ -1044,6 +1044,7 @@ const checkOverlayEnablementMacro = makeMacro({
| { | {
overlayDatabaseMode: OverlayDatabaseMode; overlayDatabaseMode: OverlayDatabaseMode;
useOverlayDatabaseCaching: boolean; useOverlayDatabaseCaching: boolean;
overlayModeSetExplicitly?: boolean;
} }
| { | {
disabledReason: OverlayDisabledReason; disabledReason: OverlayDisabledReason;
@@ -1124,7 +1125,13 @@ const checkOverlayEnablementMacro = makeMacro({
if ("disabledReason" in expected) { if ("disabledReason" in expected) {
t.deepEqual(result, new Failure(expected.disabledReason)); t.deepEqual(result, new Failure(expected.disabledReason));
} else { } else {
t.deepEqual(result, new Success(expected)); t.deepEqual(
result,
new Success({
overlayModeSetExplicitly: false,
...expected,
}),
);
} }
} finally { } finally {
// Restore the original environment // Restore the original environment
@@ -1143,6 +1150,7 @@ checkOverlayEnablementMacro.serial(
{ {
overlayDatabaseMode: OverlayDatabaseMode.Overlay, overlayDatabaseMode: OverlayDatabaseMode.Overlay,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: true,
}, },
); );
@@ -1154,6 +1162,7 @@ checkOverlayEnablementMacro.serial(
{ {
overlayDatabaseMode: OverlayDatabaseMode.OverlayBase, overlayDatabaseMode: OverlayDatabaseMode.OverlayBase,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: true,
}, },
); );
@@ -1812,6 +1821,7 @@ checkOverlayEnablementMacro.serial(
{ {
overlayDatabaseMode: OverlayDatabaseMode.Overlay, overlayDatabaseMode: OverlayDatabaseMode.Overlay,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: true,
}, },
); );
@@ -1824,6 +1834,7 @@ checkOverlayEnablementMacro.serial(
{ {
overlayDatabaseMode: OverlayDatabaseMode.Overlay, overlayDatabaseMode: OverlayDatabaseMode.Overlay,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: true,
}, },
); );
@@ -1920,6 +1931,7 @@ checkOverlayEnablementMacro.serial(
{ {
overlayDatabaseMode: OverlayDatabaseMode.Overlay, overlayDatabaseMode: OverlayDatabaseMode.Overlay,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: true,
}, },
); );
@@ -1965,6 +1977,7 @@ checkOverlayEnablementMacro.serial(
{ {
overlayDatabaseMode: OverlayDatabaseMode.Overlay, overlayDatabaseMode: OverlayDatabaseMode.Overlay,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: true,
}, },
); );
@@ -2182,33 +2195,64 @@ test("applyIncrementalAnalysisSettings: keeps overlay mode and adds exclusions w
]); ]);
}); });
test("applyIncrementalAnalysisSettings: disables overlay analysis when diff ranges are unavailable", async (t) => { test.serial(
const config = createTestConfig({ "applyIncrementalAnalysisSettings: disables overlay analysis when diff ranges are unavailable",
overlayDatabaseMode: OverlayDatabaseMode.Overlay, async (t) => {
}); const config = createTestConfig({
config.useOverlayDatabaseCaching = true; overlayDatabaseMode: OverlayDatabaseMode.Overlay,
const codeql = createStubCodeQL({}); });
const logger = getRunnerLogger(true); config.useOverlayDatabaseCaching = true;
const addDiagnosticsStub = sinon const codeql = createStubCodeQL({});
.stub(overlayDiagnostics, "addOverlayDisablementDiagnostics") const logger = getRunnerLogger(true);
.resolves(); const addDiagnosticsStub = sinon
.stub(overlayDiagnostics, "addOverlayDisablementDiagnostics")
.resolves();
await configUtils.applyIncrementalAnalysisSettings( await configUtils.applyIncrementalAnalysisSettings(
config, config,
false, false,
codeql, codeql,
logger, logger,
); );
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None); t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None);
t.is(config.useOverlayDatabaseCaching, false); t.is(config.useOverlayDatabaseCaching, false);
t.deepEqual(config.extraQueryExclusions, []); t.deepEqual(config.extraQueryExclusions, []);
t.true(addDiagnosticsStub.calledOnce); t.true(addDiagnosticsStub.calledOnce);
t.is( t.is(
addDiagnosticsStub.firstCall.args[2], addDiagnosticsStub.firstCall.args[2],
OverlayDisabledReason.DiffInformedAnalysisNotEnabled, OverlayDisabledReason.DiffInformedAnalysisNotEnabled,
); );
}); },
);
test.serial(
"applyIncrementalAnalysisSettings: keeps overlay mode when set explicitly and diff ranges are unavailable",
async (t) => {
const config = createTestConfig({
overlayDatabaseMode: OverlayDatabaseMode.Overlay,
});
config.useOverlayDatabaseCaching = false;
config.overlayModeSetExplicitly = true;
const codeql = createStubCodeQL({});
const logger = getRunnerLogger(true);
const addDiagnosticsStub = sinon
.stub(overlayDiagnostics, "addOverlayDisablementDiagnostics")
.resolves();
await configUtils.applyIncrementalAnalysisSettings(
config,
false,
codeql,
logger,
);
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.Overlay);
t.is(config.useOverlayDatabaseCaching, false);
t.deepEqual(config.extraQueryExclusions, []);
t.true(addDiagnosticsStub.notCalled);
},
);
test("applyIncrementalAnalysisSettings: adds exclusions for diff-informed-only runs", async (t) => { test("applyIncrementalAnalysisSettings: adds exclusions for diff-informed-only runs", async (t) => {
const config = createTestConfig({}); const config = createTestConfig({});
+26 -10
View File
@@ -243,6 +243,11 @@ export interface Config {
*/ */
useOverlayDatabaseCaching: boolean; useOverlayDatabaseCaching: boolean;
/**
* Whether the overlay database mode was set explicitly.
*/
overlayModeSetExplicitly: boolean;
/** /**
* A partial mapping from repository properties that affect us to their values. * A partial mapping from repository properties that affect us to their values.
*/ */
@@ -573,6 +578,7 @@ export async function initActionState(
extraQueryExclusions: [], extraQueryExclusions: [],
overlayDatabaseMode: OverlayDatabaseMode.None, overlayDatabaseMode: OverlayDatabaseMode.None,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: false,
repositoryProperties, repositoryProperties,
enableFileCoverageInformation, enableFileCoverageInformation,
}; };
@@ -772,6 +778,7 @@ async function checkRunnerResources(
interface EnabledOverlayConfig { interface EnabledOverlayConfig {
overlayDatabaseMode: Exclude<OverlayDatabaseMode, OverlayDatabaseMode.None>; overlayDatabaseMode: Exclude<OverlayDatabaseMode, OverlayDatabaseMode.None>;
useOverlayDatabaseCaching: boolean; useOverlayDatabaseCaching: boolean;
overlayModeSetExplicitly: boolean;
} }
/** /**
@@ -826,6 +833,7 @@ export async function checkOverlayEnablement(
return validateOverlayDatabaseMode( return validateOverlayDatabaseMode(
modeEnv, modeEnv,
false, false,
true,
codeql, codeql,
languages, languages,
sourceRoot, sourceRoot,
@@ -917,6 +925,7 @@ export async function checkOverlayEnablement(
return validateOverlayDatabaseMode( return validateOverlayDatabaseMode(
overlayDatabaseMode, overlayDatabaseMode,
true, true,
false,
codeql, codeql,
languages, languages,
sourceRoot, sourceRoot,
@@ -935,6 +944,7 @@ export async function checkOverlayEnablement(
async function validateOverlayDatabaseMode( async function validateOverlayDatabaseMode(
overlayDatabaseMode: Exclude<OverlayDatabaseMode, OverlayDatabaseMode.None>, overlayDatabaseMode: Exclude<OverlayDatabaseMode, OverlayDatabaseMode.None>,
useOverlayDatabaseCaching: boolean, useOverlayDatabaseCaching: boolean,
overlayModeSetExplicitly: boolean,
codeql: CodeQL, codeql: CodeQL,
languages: Language[], languages: Language[],
sourceRoot: string, sourceRoot: string,
@@ -1006,6 +1016,7 @@ async function validateOverlayDatabaseMode(
return new Success({ return new Success({
overlayDatabaseMode, overlayDatabaseMode,
useOverlayDatabaseCaching, useOverlayDatabaseCaching,
overlayModeSetExplicitly,
}); });
} }
@@ -1080,14 +1091,14 @@ function hasQueryCustomisation(userConfig: UserConfig): boolean {
/** /**
* Finalize the incremental-analysis configuration for this run. * Finalize the incremental-analysis configuration for this run.
* *
* Overlay analysis has only been validated in combination with diff-informed * Overlay analysis has only been validated in combination with diff-informed analysis, so if
* analysis, so if `Overlay` mode was selected for a pull request but the diff * `Overlay` mode was selected for a pull request but the diff ranges could not be computed, fall
* ranges could not be computed, fall back to a full non-overlay analysis. * back to a full non-overlay analysis. If the overlay mode was set explicitly, this fallback does
* not apply.
* *
* Query exclusions for incremental-only queries are then applied whenever the * Query exclusions for incremental-only queries are then applied whenever the diff ranges are
* diff ranges are available — which, after the fallback above, is exactly the * available — which, after the fallback above, is exactly the set of runs where any kind of
* set of runs where any kind of incremental analysis (overlay or * incremental analysis (overlay or diff-informed) is in effect.
* diff-informed) is in effect.
*/ */
export async function applyIncrementalAnalysisSettings( export async function applyIncrementalAnalysisSettings(
config: Config, config: Config,
@@ -1097,7 +1108,8 @@ export async function applyIncrementalAnalysisSettings(
): Promise<void> { ): Promise<void> {
if ( if (
config.overlayDatabaseMode === OverlayDatabaseMode.Overlay && config.overlayDatabaseMode === OverlayDatabaseMode.Overlay &&
!hasDiffRanges !hasDiffRanges &&
!config.overlayModeSetExplicitly
) { ) {
logger.info( logger.info(
`Reverting overlay database mode to ${OverlayDatabaseMode.None} ` + `Reverting overlay database mode to ${OverlayDatabaseMode.None} ` +
@@ -1251,14 +1263,18 @@ export async function initConfig(
logger, logger,
); );
if (overlayDatabaseModeResult.isSuccess()) { if (overlayDatabaseModeResult.isSuccess()) {
const { overlayDatabaseMode, useOverlayDatabaseCaching } = const {
overlayDatabaseModeResult.value; overlayDatabaseMode,
useOverlayDatabaseCaching,
overlayModeSetExplicitly,
} = overlayDatabaseModeResult.value;
logger.info( logger.info(
`Using overlay database mode: ${overlayDatabaseMode} ` + `Using overlay database mode: ${overlayDatabaseMode} ` +
`${useOverlayDatabaseCaching ? "with" : "without"} caching.`, `${useOverlayDatabaseCaching ? "with" : "without"} caching.`,
); );
config.overlayDatabaseMode = overlayDatabaseMode; config.overlayDatabaseMode = overlayDatabaseMode;
config.useOverlayDatabaseCaching = useOverlayDatabaseCaching; config.useOverlayDatabaseCaching = useOverlayDatabaseCaching;
config.overlayModeSetExplicitly = overlayModeSetExplicitly;
} else { } else {
const overlayDisabledReason = overlayDatabaseModeResult.value; const overlayDisabledReason = overlayDatabaseModeResult.value;
logger.info( logger.info(
+6
View File
@@ -17,6 +17,12 @@ export enum EnvVar {
*/ */
CLI_VERBOSITY = "CODEQL_VERBOSITY", CLI_VERBOSITY = "CODEQL_VERBOSITY",
/**
* `PersistedVersionInfo` for the CodeQL CLI, so later Actions steps can reuse it instead of
* invoking `codeql version` again.
*/
CODEQL_VERSION_INFO = "CODEQL_ACTION_CLI_VERSION_INFO",
/** Whether the CodeQL Action has invoked the Go autobuilder. */ /** Whether the CodeQL Action has invoked the Go autobuilder. */
DID_AUTOBUILD_GOLANG = "CODEQL_ACTION_DID_AUTOBUILD_GOLANG", DID_AUTOBUILD_GOLANG = "CODEQL_ACTION_DID_AUTOBUILD_GOLANG",
+6
View File
@@ -32,6 +32,7 @@ import {
GitHubVariant, GitHubVariant,
GitHubVersion, GitHubVersion,
HTTPError, HTTPError,
resetCachedCodeQlVersion,
} from "./util"; } from "./util";
export const SAMPLE_DOTCOM_API_DETAILS = { export const SAMPLE_DOTCOM_API_DETAILS = {
@@ -101,6 +102,10 @@ export function setupTests(testFn: TestFn<any>) {
// unless the test explicitly sets one up. // unless the test explicitly sets one up.
codeql.setCodeQL({}); codeql.setCodeQL({});
// Reset the in-process CodeQL version cache so that it doesn't leak between
// tests, which each represent a separate Actions step in production.
resetCachedCodeQlVersion();
// Replace stdout and stderr so we can record output during tests // Replace stdout and stderr so we can record output during tests
t.context.testOutput = ""; t.context.testOutput = "";
const processStdoutWrite = process.stdout.write.bind(process.stdout); const processStdoutWrite = process.stdout.write.bind(process.stdout);
@@ -585,6 +590,7 @@ export function createTestConfig(overrides: Partial<Config>): Config {
extraQueryExclusions: [], extraQueryExclusions: [],
overlayDatabaseMode: OverlayDatabaseMode.None, overlayDatabaseMode: OverlayDatabaseMode.None,
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
overlayModeSetExplicitly: false,
repositoryProperties: {}, repositoryProperties: {},
enableFileCoverageInformation: true, enableFileCoverageInformation: true,
} satisfies Config, } satisfies Config,
+55
View File
@@ -532,3 +532,58 @@ test("Failure.orElse returns the default value for a failure result", (t) => {
const result = new util.Failure(new Error("test error")); const result = new util.Failure(new Error("test error"));
t.is(result.orElse("default value"), "default value"); t.is(result.orElse("default value"), "default value");
}); });
test.serial(
"getCachedCodeQlVersion reuses a version persisted by an earlier step",
(t) => {
process.env[EnvVar.CODEQL_VERSION_INFO] = JSON.stringify({
cmd: "/path/to/codeql",
version: { version: "2.20.0" },
});
t.deepEqual(util.getCachedCodeQlVersion("/path/to/codeql"), {
version: "2.20.0",
});
},
);
test.serial(
"getCachedCodeQlVersion ignores a persisted version from a different CLI",
(t) => {
process.env[EnvVar.CODEQL_VERSION_INFO] = JSON.stringify({
cmd: "/path/to/other-codeql",
version: { version: "2.20.0" },
});
t.is(util.getCachedCodeQlVersion("/path/to/codeql"), undefined);
},
);
test.serial(
"getCachedCodeQlVersion ignores a malformed persisted value",
(t) => {
process.env[EnvVar.CODEQL_VERSION_INFO] = "not valid json";
t.is(util.getCachedCodeQlVersion("/path/to/codeql"), undefined);
},
);
test.serial(
"getCachedCodeQlVersion ignores a persisted value with the wrong structure",
(t) => {
for (const value of [
JSON.stringify({ cmd: "/path/to/codeql" }),
JSON.stringify({ cmd: "/path/to/codeql", version: {} }),
JSON.stringify({ cmd: "/path/to/codeql", version: { version: 2 } }),
JSON.stringify({ version: { version: "2.20.0" } }),
JSON.stringify({
cmd: "/path/to/codeql",
version: { version: "2.20.0", overlayVersion: "1" },
}),
JSON.stringify({
cmd: "/path/to/codeql",
version: { version: "2.20.0", features: "nope" },
}),
]) {
process.env[EnvVar.CODEQL_VERSION_INFO] = value;
t.is(util.getCachedCodeQlVersion("/path/to/codeql"), undefined, value);
}
},
);
+73 -2
View File
@@ -619,14 +619,85 @@ export function asHTTPError(arg: any): HTTPError | undefined {
let cachedCodeQlVersion: undefined | VersionInfo = undefined; let cachedCodeQlVersion: undefined | VersionInfo = undefined;
export function cacheCodeQlVersion(version: VersionInfo): void { /**
* Resets the in-process cache of the CodeQL CLI version. Only for use in tests,
* which exercise multiple "steps" within a single process.
*/
export function resetCachedCodeQlVersion(): void {
cachedCodeQlVersion = undefined;
}
/** The persisted version together with the CLI path it was obtained from. */
interface PersistedVersionInfo {
cmd: string;
version: VersionInfo;
}
function isVersionInfo(x: unknown): x is VersionInfo {
const candidate = x as Partial<VersionInfo> | null;
return (
typeof candidate === "object" &&
candidate !== null &&
typeof candidate.version === "string" &&
(candidate.features === undefined ||
(typeof candidate.features === "object" &&
candidate.features !== null)) &&
(candidate.overlayVersion === undefined ||
typeof candidate.overlayVersion === "number")
);
}
function isPersistedVersionInfo(x: unknown): x is PersistedVersionInfo {
const candidate = x as Partial<PersistedVersionInfo> | null;
return (
typeof candidate === "object" &&
candidate !== null &&
typeof candidate.cmd === "string" &&
isVersionInfo(candidate.version)
);
}
export function cacheCodeQlVersion(cmd: string, version: VersionInfo): void {
if (cachedCodeQlVersion !== undefined) { if (cachedCodeQlVersion !== undefined) {
throw new Error("cacheCodeQlVersion() should be called only once"); throw new Error("cacheCodeQlVersion() should be called only once");
} }
cachedCodeQlVersion = version; cachedCodeQlVersion = version;
// Persist the version so that subsequent Actions steps, which run in separate
// processes, can reuse it rather than invoking `codeql version` again. We
// record the CLI path so that a different step using a different CodeQL bundle
// doesn't pick up a stale version.
core.exportVariable(
EnvVar.CODEQL_VERSION_INFO,
JSON.stringify({ cmd, version }),
);
} }
export function getCachedCodeQlVersion(): undefined | VersionInfo { export function getCachedCodeQlVersion(cmd?: string): undefined | VersionInfo {
if (cachedCodeQlVersion !== undefined) {
return cachedCodeQlVersion;
}
// Fall back to the value persisted by an earlier Actions step, if any. This is
// best-effort: any malformed or mismatched value is ignored so that the caller
// invokes `codeql version` instead.
const serialized = process.env[EnvVar.CODEQL_VERSION_INFO];
if (!serialized) {
return undefined;
}
let persisted: unknown;
try {
persisted = JSON.parse(serialized);
} catch {
return undefined;
}
if (
!isPersistedVersionInfo(persisted) ||
(cmd !== undefined && persisted.cmd !== cmd)
) {
return undefined;
}
// Memoize the parsed value so that subsequent calls in this process don't
// re-parse the environment variable.
cachedCodeQlVersion = persisted.version;
return cachedCodeQlVersion; return cachedCodeQlVersion;
} }