Merge branch 'main' into cbraynor/fix201
This commit is contained in:
commit
0907cd5a41
54 changed files with 985 additions and 60 deletions
|
|
@ -1,10 +1,12 @@
|
|||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
|
||||
import * as toolrunnner from "@actions/exec/lib/toolrunner";
|
||||
|
||||
import * as analysisPaths from "./analysis-paths";
|
||||
import { getCodeQL } from "./codeql";
|
||||
import * as configUtils from "./config-utils";
|
||||
import { isScannedLanguage } from "./languages";
|
||||
import { isScannedLanguage, Language } from "./languages";
|
||||
import { Logger } from "./logging";
|
||||
import { RepositoryNwo } from "./repository";
|
||||
import * as sharedEnv from "./shared-environment";
|
||||
|
|
@ -44,6 +46,43 @@ export interface AnalysisStatusReport
|
|||
extends upload_lib.UploadStatusReport,
|
||||
QueriesStatusReport {}
|
||||
|
||||
async function setupPythonExtractor(logger: Logger) {
|
||||
const codeqlPython = process.env["CODEQL_PYTHON"];
|
||||
if (codeqlPython === undefined || codeqlPython.length === 0) {
|
||||
// If CODEQL_PYTHON is not set, no dependencies were installed, so we don't need to do anything
|
||||
return;
|
||||
}
|
||||
|
||||
let output = "";
|
||||
const options = {
|
||||
listeners: {
|
||||
stdout: (data: Buffer) => {
|
||||
output += data.toString();
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
await new toolrunnner.ToolRunner(
|
||||
codeqlPython,
|
||||
[
|
||||
"-c",
|
||||
"import os; import pip; print(os.path.dirname(os.path.dirname(pip.__file__)))",
|
||||
],
|
||||
options
|
||||
).exec();
|
||||
logger.info(`Setting LGTM_INDEX_IMPORT_PATH=${output}`);
|
||||
process.env["LGTM_INDEX_IMPORT_PATH"] = output;
|
||||
|
||||
output = "";
|
||||
await new toolrunnner.ToolRunner(
|
||||
codeqlPython,
|
||||
["-c", "import sys; print(sys.version_info[0])"],
|
||||
options
|
||||
).exec();
|
||||
logger.info(`Setting LGTM_PYTHON_SETUP_VERSION=${output}`);
|
||||
process.env["LGTM_PYTHON_SETUP_VERSION"] = output;
|
||||
}
|
||||
|
||||
async function createdDBForScannedLanguages(
|
||||
config: configUtils.Config,
|
||||
logger: Logger
|
||||
|
|
@ -56,6 +95,11 @@ async function createdDBForScannedLanguages(
|
|||
for (const language of config.languages) {
|
||||
if (isScannedLanguage(language)) {
|
||||
logger.startGroup(`Extracting ${language}`);
|
||||
|
||||
if (language === Language.python) {
|
||||
await setupPythonExtractor(logger);
|
||||
}
|
||||
|
||||
await codeql.extractScannedLanguage(
|
||||
util.getCodeQLDatabasePath(config.tempDir, language),
|
||||
language
|
||||
|
|
|
|||
|
|
@ -3,7 +3,13 @@ import * as core from "@actions/core";
|
|||
import * as actionsUtil from "./actions-util";
|
||||
import { CodeQL } from "./codeql";
|
||||
import * as configUtils from "./config-utils";
|
||||
import { initCodeQL, initConfig, injectWindowsTracer, runInit } from "./init";
|
||||
import {
|
||||
initCodeQL,
|
||||
initConfig,
|
||||
injectWindowsTracer,
|
||||
installPythonDeps,
|
||||
runInit,
|
||||
} from "./init";
|
||||
import { getActionsLogger } from "./logging";
|
||||
import { parseRepositoryNwo } from "./repository";
|
||||
|
||||
|
|
@ -111,6 +117,14 @@ async function run() {
|
|||
actionsUtil.getRequiredEnvParam("GITHUB_SERVER_URL"),
|
||||
logger
|
||||
);
|
||||
|
||||
try {
|
||||
await installPythonDeps(codeql, logger);
|
||||
} catch (err) {
|
||||
logger.warning(
|
||||
`${err.message} You can call this action with 'setup-python-dependencies: false' to disable this process`
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
core.setFailed(e.message);
|
||||
console.log(e);
|
||||
|
|
|
|||
44
src/init.ts
44
src/init.ts
|
|
@ -182,3 +182,47 @@ export async function injectWindowsTracer(
|
|||
{ env: { ODASA_TRACER_CONFIGURATION: tracerConfig.spec } }
|
||||
).exec();
|
||||
}
|
||||
|
||||
export async function installPythonDeps(codeql: CodeQL, logger: Logger) {
|
||||
logger.startGroup("Setup Python dependencies");
|
||||
|
||||
if (process.platform !== "linux") {
|
||||
logger.info(
|
||||
"Currently, auto-installing python dependancies is only supported on linux"
|
||||
);
|
||||
logger.endGroup();
|
||||
return;
|
||||
}
|
||||
|
||||
const scriptsFolder = path.resolve(__dirname, "../python-setup");
|
||||
|
||||
// Setup tools on the Github hosted runners
|
||||
if (process.env["ImageOS"] !== undefined) {
|
||||
try {
|
||||
await new toolrunnner.ToolRunner(
|
||||
path.join(scriptsFolder, "install_tools.sh")
|
||||
).exec();
|
||||
} catch (e) {
|
||||
// This script tries to install some needed tools in the runner. It should not fail, but if it does
|
||||
// we just abort the process without failing the action
|
||||
logger.endGroup();
|
||||
logger.warning(
|
||||
"Unable to download and extract the tools needed for installing the python dependecies. You can call this action with 'setup-python-dependencies: false' to disable this process."
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Install dependencies
|
||||
try {
|
||||
await new toolrunnner.ToolRunner(
|
||||
path.join(scriptsFolder, "auto_install_packages.py"),
|
||||
[path.dirname(codeql.getPath())]
|
||||
).exec();
|
||||
} catch (e) {
|
||||
logger.endGroup();
|
||||
logger.warning(
|
||||
"We were unable to install your python dependencies. You can call this action with 'setup-python-dependencies: false' to disable this process."
|
||||
);
|
||||
}
|
||||
logger.endGroup();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue