diff --git a/.github/workflows/script/bundle_changelog.py b/.github/workflows/script/bundle_changelog.py new file mode 100644 index 000000000..8a7135f1e --- /dev/null +++ b/.github/workflows/script/bundle_changelog.py @@ -0,0 +1,18 @@ +import os +import re + +# Get the PR number from the PR URL. +pr_number = os.environ['PR_URL'].split('/')[-1] +changelog_note = f"- Update default CodeQL bundle version to {os.environ['CLI_VERSION']}. [#{pr_number}]({os.environ['PR_URL']})" + +# If the "[UNRELEASED]" section starts with "no user facing changes", remove that line. +with open('CHANGELOG.md', 'r') as f: + changelog = f.read() + +changelog = changelog.replace('## [UNRELEASED]\n\nNo user facing changes.', '## [UNRELEASED]\n') + +# Add the changelog note to the bottom of the "[UNRELEASED]" section. +changelog = re.sub(r'\n## (\d+\.\d+\.\d+)', f'{changelog_note}\n\n## \\1', changelog, count=1) + +with open('CHANGELOG.md', 'w') as f: + f.write(changelog) diff --git a/.github/workflows/update-bundle.yml b/.github/workflows/update-bundle.yml index f2c3cd40c..184c339ff 100644 --- a/.github/workflows/update-bundle.yml +++ b/.github/workflows/update-bundle.yml @@ -40,6 +40,11 @@ jobs: git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --global user.name "github-actions[bot]" + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: '3.12' + - name: Set up Node.js uses: actions/setup-node@v6 with: @@ -78,28 +83,8 @@ jobs: echo "PR_URL=$pr_url" | tee -a "$GITHUB_ENV" - name: Create changelog note - shell: python run: | - import os - import re - - # Get the PR number from the PR URL. - pr_number = os.environ['PR_URL'].split('/')[-1] - changelog_note = f"- Update default CodeQL bundle version to {os.environ['CLI_VERSION']}. [#{pr_number}]({os.environ['PR_URL']})" - - # If the "[UNRELEASED]" section starts with "no user facing changes", remove that line. - # Use perl to avoid having to escape the newline character. - - with open('CHANGELOG.md', 'r') as f: - changelog = f.read() - - changelog = changelog.replace('## [UNRELEASED]\n\nNo user facing changes.', '## [UNRELEASED]\n') - - # Add the changelog note to the bottom of the "[UNRELEASED]" section. - changelog = re.sub(r'\n## (\d+\.\d+\.\d+)', f'{changelog_note}\n\n## \\1', changelog, count=1) - - with open('CHANGELOG.md', 'w') as f: - f.write(changelog) + python .github/workflows/script/bundle_changelog.py - name: Push changelog note run: | diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index cca06fede..64bd02866 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -119955,12 +119955,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 6a3429f4c..07eeb5eb3 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -88684,12 +88684,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index a91600803..298f50dbc 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -84004,12 +84004,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/init-action-post.js b/lib/init-action-post.js index cb01600f5..c8733b2ef 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -123336,12 +123336,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/init-action.js b/lib/init-action.js index 8caf18bc8..456989a4a 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -86098,12 +86098,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", @@ -86649,10 +86643,9 @@ async function cachePrefix(codeql, language) { } // src/config-utils.ts -async function getSupportedLanguageMap(codeql, features, logger) { - const resolveSupportedLanguagesUsingCli = await features.getValue( - "resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */, - codeql +async function getSupportedLanguageMap(codeql, logger) { + const resolveSupportedLanguagesUsingCli = await codeql.supportsFeature( + "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ ); const resolveResult = await codeql.betterResolveLanguages({ filterToLanguagesWithQueries: resolveSupportedLanguagesUsingCli @@ -86700,14 +86693,14 @@ async function getRawLanguagesInRepo(repository, sourceRoot, logger) { logger.debug(`Raw languages in repository: ${result.join(", ")}`); return result; } -async function getLanguages(codeql, languagesInput, repository, sourceRoot, features, logger) { +async function getLanguages(codeql, languagesInput, repository, sourceRoot, logger) { const { rawLanguages, autodetected } = await getRawLanguages( languagesInput, repository, sourceRoot, logger ); - const languageMap = await getSupportedLanguageMap(codeql, features, logger); + const languageMap = await getSupportedLanguageMap(codeql, logger); const languagesSet = /* @__PURE__ */ new Set(); const unknownLanguages = []; for (const language of rawLanguages) { @@ -86773,7 +86766,6 @@ async function initActionState({ languagesInput, repository, sourceRoot, - features, logger ); const buildMode = await parseBuildModeInput( diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index 1de26656a..03a9bf9e2 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -83995,12 +83995,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index 707d57b5b..b7e7ec6ca 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -83904,12 +83904,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index 6171b2cc5..590556cc8 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -119361,12 +119361,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index a22f9949e..322609fc0 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -100023,12 +100023,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/upload-lib.js b/lib/upload-lib.js index bd363f7ff..6057b1298 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -87061,12 +87061,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index dd361efcd..c853dd8b6 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -119527,12 +119527,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 91ba895e8..65e75b23f 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -86854,12 +86854,6 @@ var featureConfig = { legacyApi: true, minimumVersion: void 0 }, - ["resolve_supported_languages_using_cli" /* ResolveSupportedLanguagesUsingCli */]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: void 0, - toolsFeature: "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ - }, ["overlay_analysis" /* OverlayAnalysis */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS", diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index bf60b4902..32c794450 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -873,71 +873,62 @@ const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); expectedLanguages: ["javascript"], }, ].forEach((args) => { - for (const resolveSupportedLanguagesUsingCli of [true, false]) { - test(`getLanguages${resolveSupportedLanguagesUsingCli ? " (supported languages via CLI)" : ""}: ${args.name}`, async (t) => { - const features = createFeatures( - resolveSupportedLanguagesUsingCli - ? [Feature.ResolveSupportedLanguagesUsingCli] - : [], - ); - const mockRequest = mockLanguagesInRepo(args.languagesInRepository); - const stubExtractorEntry = { - extractor_root: "", - }; - const codeQL = createStubCodeQL({ - betterResolveLanguages: (options) => - Promise.resolve({ - aliases: { - "c#": KnownLanguage.csharp, - c: KnownLanguage.cpp, - kotlin: KnownLanguage.java, - typescript: KnownLanguage.javascript, - }, - extractors: { - cpp: [stubExtractorEntry], - csharp: [stubExtractorEntry], - java: [stubExtractorEntry], - javascript: [stubExtractorEntry], - python: [stubExtractorEntry], - ...(options?.filterToLanguagesWithQueries - ? {} - : { - html: [stubExtractorEntry], - }), - }, - }), - }); - - if (args.expectedLanguages) { - // happy path - const actualLanguages = await configUtils.getLanguages( - codeQL, - args.languagesInput, - mockRepositoryNwo, - ".", - features, - mockLogger, - ); - - t.deepEqual(actualLanguages.sort(), args.expectedLanguages.sort()); - } else { - // there is an error - await t.throwsAsync( - async () => - await configUtils.getLanguages( - codeQL, - args.languagesInput, - mockRepositoryNwo, - ".", - features, - mockLogger, - ), - { message: args.expectedError }, - ); - } - t.deepEqual(mockRequest.called, args.expectedApiCall); + test(`getLanguages: ${args.name}`, async (t) => { + const mockRequest = mockLanguagesInRepo(args.languagesInRepository); + const stubExtractorEntry = { + extractor_root: "", + }; + const codeQL = createStubCodeQL({ + betterResolveLanguages: (options) => + Promise.resolve({ + aliases: { + "c#": KnownLanguage.csharp, + c: KnownLanguage.cpp, + kotlin: KnownLanguage.java, + typescript: KnownLanguage.javascript, + }, + extractors: { + cpp: [stubExtractorEntry], + csharp: [stubExtractorEntry], + java: [stubExtractorEntry], + javascript: [stubExtractorEntry], + python: [stubExtractorEntry], + ...(options?.filterToLanguagesWithQueries + ? {} + : { + html: [stubExtractorEntry], + }), + }, + }), }); - } + + if (args.expectedLanguages) { + // happy path + const actualLanguages = await configUtils.getLanguages( + codeQL, + args.languagesInput, + mockRepositoryNwo, + ".", + mockLogger, + ); + + t.deepEqual(actualLanguages.sort(), args.expectedLanguages.sort()); + } else { + // there is an error + await t.throwsAsync( + async () => + await configUtils.getLanguages( + codeQL, + args.languagesInput, + mockRepositoryNwo, + ".", + mockLogger, + ), + { message: args.expectedError }, + ); + } + t.deepEqual(mockRequest.called, args.expectedApiCall); + }); }); for (const { displayName, language, feature } of [ diff --git a/src/config-utils.ts b/src/config-utils.ts index 3a1d040db..5ae11ea3a 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -34,6 +34,7 @@ import { OverlayDatabaseMode, } from "./overlay-database-utils"; import { RepositoryNwo } from "./repository"; +import { ToolsFeature } from "./tools-features"; import { downloadTrapCaches } from "./trap-caching"; import { GitHubVersion, @@ -177,12 +178,10 @@ export interface Config { export async function getSupportedLanguageMap( codeql: CodeQL, - features: FeatureEnablement, logger: Logger, ): Promise> { - const resolveSupportedLanguagesUsingCli = await features.getValue( - Feature.ResolveSupportedLanguagesUsingCli, - codeql, + const resolveSupportedLanguagesUsingCli = await codeql.supportsFeature( + ToolsFeature.BuiltinExtractorsSpecifyDefaultQueries, ); const resolveResult = await codeql.betterResolveLanguages({ filterToLanguagesWithQueries: resolveSupportedLanguagesUsingCli, @@ -283,7 +282,6 @@ export async function getLanguages( languagesInput: string | undefined, repository: RepositoryNwo, sourceRoot: string, - features: FeatureEnablement, logger: Logger, ): Promise { // Obtain languages without filtering them. @@ -294,7 +292,7 @@ export async function getLanguages( logger, ); - const languageMap = await getSupportedLanguageMap(codeql, features, logger); + const languageMap = await getSupportedLanguageMap(codeql, logger); const languagesSet = new Set(); const unknownLanguages: string[] = []; @@ -431,7 +429,6 @@ export async function initActionState( languagesInput, repository, sourceRoot, - features, logger, ); diff --git a/src/feature-flags.ts b/src/feature-flags.ts index 068d84727..e92341df2 100644 --- a/src/feature-flags.ts +++ b/src/feature-flags.ts @@ -76,7 +76,6 @@ export enum Feature { OverlayAnalysisSwift = "overlay_analysis_swift", PythonDefaultIsToNotExtractStdlib = "python_default_is_to_not_extract_stdlib", QaTelemetryEnabled = "qa_telemetry_enabled", - ResolveSupportedLanguagesUsingCli = "resolve_supported_languages_using_cli", UseRepositoryProperties = "use_repository_properties", ValidateDbConfig = "validate_db_config", } @@ -161,12 +160,6 @@ export const featureConfig: Record< legacyApi: true, minimumVersion: undefined, }, - [Feature.ResolveSupportedLanguagesUsingCli]: { - defaultValue: false, - envVar: "CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI", - minimumVersion: undefined, - toolsFeature: ToolsFeature.BuiltinExtractorsSpecifyDefaultQueries, - }, [Feature.OverlayAnalysis]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS",