Merge pull request #3570 from github/mbg/repo-props/warn-on-unexpected-props

Emit warning for unrecognised repo properties with our common prefix
This commit is contained in:
Michael B. Gale
2026-03-13 11:13:21 +00:00
committed by GitHub
3 changed files with 71 additions and 1 deletions

10
lib/init-action.js generated
View File

@@ -104293,6 +104293,7 @@ function getUnknownLanguagesError(languages) {
}
// src/feature-flags/properties.ts
var GITHUB_CODEQL_PROPERTY_PREFIX = "github-codeql-";
var RepositoryPropertyName = /* @__PURE__ */ ((RepositoryPropertyName2) => {
RepositoryPropertyName2["DISABLE_OVERLAY"] = "github-codeql-disable-overlay";
RepositoryPropertyName2["EXTRA_QUERIES"] = "github-codeql-extra-queries";
@@ -104329,6 +104330,7 @@ async function loadPropertiesFromApi(logger, repositoryNwo) {
`Retrieved ${remoteProperties.length} repository properties: ${remoteProperties.map((p) => p.property_name).join(", ")}`
);
const properties = {};
const unrecognisedProperties = [];
for (const property of remoteProperties) {
if (property.property_name === void 0) {
throw new Error(
@@ -104337,6 +104339,8 @@ async function loadPropertiesFromApi(logger, repositoryNwo) {
}
if (isKnownPropertyName(property.property_name)) {
setProperty2(properties, property.property_name, property.value, logger);
} else if (property.property_name.startsWith(GITHUB_CODEQL_PROPERTY_PREFIX) && !isDynamicWorkflow()) {
unrecognisedProperties.push(property.property_name);
}
}
if (Object.keys(properties).length === 0) {
@@ -104351,6 +104355,12 @@ async function loadPropertiesFromApi(logger, repositoryNwo) {
logger.debug(` ${property}: ${value}`);
}
}
if (unrecognisedProperties.length > 0) {
const unrecognisedPropertyList = unrecognisedProperties.map((name) => `'${name}'`).join(", ");
logger.warning(
`Found repository properties (${unrecognisedPropertyList}), which look like CodeQL Action repository properties, but which are not understood by this version of the CodeQL Action. Do you need to update to a newer version?`
);
}
return properties;
} catch (e) {
throw new Error(

View File

@@ -4,7 +4,7 @@ import * as sinon from "sinon";
import * as api from "../api-client";
import { getRunnerLogger } from "../logging";
import { parseRepositoryNwo } from "../repository";
import { setupTests } from "../testing-utils";
import { RecordingLogger, setupTests } from "../testing-utils";
import * as properties from "./properties";
@@ -197,3 +197,38 @@ test.serial(
);
},
);
test.serial(
"loadPropertiesFromApi warns if a repository property name starts with the common prefix, but is not recognised by us",
async (t) => {
process.env["GITHUB_EVENT_NAME"] = "push";
const propertyName: string = `${properties.GITHUB_CODEQL_PROPERTY_PREFIX}unknown`;
sinon.stub(api, "getRepositoryProperties").resolves({
headers: {},
status: 200,
url: "",
data: [
{
property_name: propertyName,
value: "true",
},
] satisfies properties.GitHubPropertiesResponse,
});
const logger = new RecordingLogger();
const warningSpy = sinon.spy(logger, "warning");
const mockRepositoryNwo = parseRepositoryNwo("owner/repo");
const response = await properties.loadPropertiesFromApi(
logger,
mockRepositoryNwo,
);
t.deepEqual(response, {});
t.true(warningSpy.calledOnce);
t.assert(
warningSpy.firstCall.args[0]
.toString()
.startsWith(
`Found repository properties ('${propertyName}'), which look like CodeQL Action repository properties`,
),
);
},
);

View File

@@ -1,7 +1,11 @@
import { isDynamicWorkflow } from "../actions-util";
import { getRepositoryProperties } from "../api-client";
import { Logger } from "../logging";
import { RepositoryNwo } from "../repository";
/** The common prefix that we expect all of our repository properties to have. */
export const GITHUB_CODEQL_PROPERTY_PREFIX = "github-codeql-";
/**
* Enumerates repository property names that have some meaning to us.
*/
@@ -114,6 +118,8 @@ export async function loadPropertiesFromApi(
);
const properties: RepositoryProperties = {};
const unrecognisedProperties: string[] = [];
for (const property of remoteProperties) {
if (property.property_name === undefined) {
throw new Error(
@@ -123,6 +129,11 @@ export async function loadPropertiesFromApi(
if (isKnownPropertyName(property.property_name)) {
setProperty(properties, property.property_name, property.value, logger);
} else if (
property.property_name.startsWith(GITHUB_CODEQL_PROPERTY_PREFIX) &&
!isDynamicWorkflow()
) {
unrecognisedProperties.push(property.property_name);
}
}
@@ -139,6 +150,20 @@ export async function loadPropertiesFromApi(
}
}
// Emit a warning if we encountered unrecognised properties that have our prefix.
if (unrecognisedProperties.length > 0) {
const unrecognisedPropertyList = unrecognisedProperties
.map((name) => `'${name}'`)
.join(", ");
logger.warning(
`Found repository properties (${unrecognisedPropertyList}), ` +
"which look like CodeQL Action repository properties, " +
"but which are not understood by this version of the CodeQL Action. " +
"Do you need to update to a newer version?",
);
}
return properties;
} catch (e) {
throw new Error(