codeql-cli-binaries icon indicating copy to clipboard operation
codeql-cli-binaries copied to clipboard

Cannot access CodeQL environment variables in `database create --command`

Open max-schaefer opened this issue 5 years ago • 4 comments

I would like to explicitly invoke the JavaScript autobuilder as part of codeql database create, with the ultimate goal of passing it some custom options. However, even invoking it without any options isn't as easy as I would have hoped, since I cannot figure out how to access CodeQL environment variables to specify the path to the autobuilder.

My first attempt of

codeql database create -l javascript --command '${CODEQL_EXTRACTOR_JAVASCRIPT_ROOT}/tools/autobuild.sh /path/to/database

was met with

A fatal error occurred: Failed to expand '${CODEQL_EXTRACTOR_JAVASCRIPT_ROOT}/tools/autobuild.sh' as an argument list.
(eventual cause: UserError "Attempting to expand unknown variable: CODEQL_EXTRACTOR_JAVASCRIPT_ROOT, available variables are: []")

@lcartey suggested adding env. like so:

codeql database create -l javascript --command '${env.CODEQL_EXTRACTOR_JAVASCRIPT_ROOT}/tools/autobuild.sh' /path/to/database

but that resulted in

A fatal error occurred: Failed to expand '${env.CODEQL_EXTRACTOR_JAVASCRIPT_ROOT}/tools/autobuild.sh' as an argument list.
(eventual cause: UserError "Attempting to expand unknown variable: env.CODEQL_EXTRACTOR_JAVASCRIPT_ROOT, ava...")

I am pretty sure this is the right environment variable name, cf. here.

Specifying the full path to the autobuild script is, of course, possible, but annoying.

max-schaefer avatar Nov 19 '19 16:11 max-schaefer

The expansion that fails seems to be the one that happens in line 90 of CreateCommand.java. It is part of codeql database create, whereas the specific environment variables are only being created inside the codeql database trace-command that create subsequently invokes.

It is not clear to me why database create wants to expand variables at that point at all -- I suspect it is for the side effect of splitting the command into words. (Arguably that would be better left to the shell, keeping each command as a single string the entire way through and passing it to sh -c when we're ready to launch it).

hmakholm avatar Nov 19 '19 16:11 hmakholm

Has this been resolved? I am having the same issue.

sam-cha-tfs avatar Apr 05 '23 20:04 sam-cha-tfs

@sam-cha-tfs could you share exactly what you are trying to do? If you are just trying to invoke the CodeQL autobuilder for JS, codeql database create --language javascript (without a --command) should be enough; if you're trying something more advanced we'll need more information to guide you.

adityasharad avatar Apr 05 '23 20:04 adityasharad

I will probably open a new ticket. It's a different error but similar. Basically I am trying to use env variables set in a jenkins file to pass in to the --command and I was met with the following:

(eventual cause: UserError "Attempting to expand unknown variable: build_config, available variables are: []")

sam-cha-tfs avatar Apr 05 '23 20:04 sam-cha-tfs