Skip to content

Commit 40e0374

Browse files
committed
Ensure backwards compat for multi-language builds with Go reconciliation
1 parent 0d2fa3c commit 40e0374

File tree

3 files changed

+95
-13
lines changed

3 files changed

+95
-13
lines changed

lib/autobuild.js

Lines changed: 44 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/autobuild.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/autobuild.ts

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,70 @@ export async function determineAutobuildLanguages(
1919
const autobuildLanguages = config.languages.filter((l) =>
2020
isTracedLanguage(l, isGoExtractionReconciliationEnabled, logger)
2121
);
22-
const language = autobuildLanguages[0];
2322

24-
if (!language) {
23+
if (!autobuildLanguages) {
2524
logger.info(
2625
"None of the languages in this project require extra build steps"
2726
);
2827
return undefined;
2928
}
3029

31-
logger.debug(`Detected dominant traced language: ${language}`);
30+
/**
31+
* Additionally autobuild Go in the autobuild Action to ensure backwards
32+
* compatibility for users performing a multi-language build within a single
33+
* job.
34+
*
35+
* For example, consider a user with the following workflow file:
36+
*
37+
* ```yml
38+
* - uses: github/codeql-action/init@v2
39+
* with:
40+
* languages: go, java
41+
* - uses: github/codeql-action/autobuild@v2
42+
* - uses: github/codeql-action/analyze@v2
43+
* ```
44+
*
45+
* - With Go extraction disabled, we will run the Java autobuilder in the
46+
* autobuild Action, ensuring we extract both Java and Go code.
47+
* - With Go extraction enabled, taking the previous behavior we'd run the Go
48+
* autobuilder, since Go is first on the list of languages. We wouldn't run
49+
* the Java autobuilder at all and so we'd only extract Go code.
50+
*
51+
* We therefore introduce a special case here such that we'll autobuild Go
52+
* in addition to the primary non-Go traced language in the autobuild Action.
53+
*
54+
* This special case behavior should be removed as part of the next major
55+
* version of the CodeQL Action.
56+
*/
57+
const autobuildLanguagesNoGo = autobuildLanguages.filter(
58+
(l) => l !== Language.go
59+
);
60+
61+
const languages: Language[] = [];
62+
// First run the autobuilder for the first non-Go traced language, if one
63+
// exists.
64+
if (autobuildLanguagesNoGo[0] !== undefined) {
65+
languages.push(autobuildLanguagesNoGo[0]);
66+
}
67+
// If Go is requested, run the Go autobuilder last to ensure it doesn't
68+
// interfere with the other autobuilder.
69+
if (autobuildLanguages.length !== autobuildLanguagesNoGo.length) {
70+
languages.push(Language.go);
71+
}
72+
73+
logger.debug(`Will autobuild ${languages.join(" and ")}.`);
3274

33-
if (autobuildLanguages.length > 1) {
75+
if (autobuildLanguagesNoGo.length > 1) {
3476
logger.warning(
35-
`We will only automatically build ${language} code. If you wish to scan ${autobuildLanguages
77+
`We will only automatically build ${languages.join(
78+
" and "
79+
)} code. If you wish to scan ${autobuildLanguagesNoGo
3680
.slice(1)
3781
.join(" and ")}, you must replace this call with custom build steps.`
3882
);
3983
}
4084

41-
return [language];
85+
return languages;
4286
}
4387

4488
export async function runAutobuild(

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy