Skip to content

Commit

Permalink
Merge pull request #16656 from github/criemen/pkg-javascript
Browse files Browse the repository at this point in the history
Javascript: use `codeql_pack` for javascript extractor
  • Loading branch information
criemen authored Jun 4, 2024
2 parents a1415e2 + 7b8c113 commit 63116d2
Show file tree
Hide file tree
Showing 17 changed files with 219 additions and 42 deletions.
1 change: 0 additions & 1 deletion csharp/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,4 @@ csharp.log
.vscode/launch.json

extractor/Semmle.Extraction.CSharp.Driver/Properties/launchSettings.json
extractor-pack
paket-files/
6 changes: 3 additions & 3 deletions csharp/tools/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
load("@semmle_code//:dist.bzl", "pack_zip")
load("//misc/bazel:pkg.bzl", "codeql_pkg_files")

pack_zip(
codeql_pkg_files(
name = "tools",
srcs = glob(["**/*"]),
excludes = [
"BUILD.bazel",
],
exes = glob(["**/*"]),
prefix = "tools",
visibility = ["//csharp:__pkg__"],
)
28 changes: 13 additions & 15 deletions javascript/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
load("@rules_pkg//pkg:mappings.bzl", "pkg_files")
load("@semmle_code//:dist.bzl", "dist")
load("@semmle_code//buildutils-internal:zipmerge.bzl", "zipmerge")
load("//misc/bazel:pkg.bzl", "codeql_pack")

package(default_visibility = ["//visibility:public"])

Expand All @@ -23,26 +22,25 @@ pkg_files(
strip_prefix = None,
)

dist(
name = "javascript-extractor-pack",
# We have to use a zip of the typescript parser wrapper, as it's generated by a genrule
# and we don't know a list of its output files.
codeql_pack(
name = "javascript",
srcs = [
":dbscheme-group",
"//javascript/downgrades",
"//javascript/externs",
"//javascript/extractor:tools-extractor",
"@semmle_code//language-packs/javascript:resources",
],
prefix = "javascript",
visibility = ["//visibility:public"],
zips = {"//javascript/extractor/lib/typescript": "tools"},
)

# We have to zipmerge in the typescript parser wrapper, as it's generated by a genrule
# and we don't know a list of its output files. Therefore, we sidestep the
# rules_pkg tooling here, and generate the zip for the language pack manually.
zipmerge(
name = "javascript",
srcs = [
":javascript-extractor-pack.zip",
"//javascript/extractor/lib/typescript",
],
out = "javascript.zip",
# TODO copy for internal repository backward compatibility
genrule(
name = "javascript.zip",
srcs = [":javascript-generic-zip"],
outs = ["javascript.zip"],
cmd = "cp $< $@",
)
7 changes: 4 additions & 3 deletions javascript/downgrades/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
load("@semmle_code//:dist.bzl", "pack_zip")
load("//misc/bazel:pkg.bzl", "codeql_pkg_files", "strip_prefix")

pack_zip(
codeql_pkg_files(
name = "downgrades",
srcs = glob(
["**/*"],
exclude = ["BUILD.bazel"],
),
prefix = "downgrades",
visibility = ["//visibility:public"],
strip_prefix = strip_prefix.from_pkg(),
visibility = ["//javascript:__pkg__"],
)
7 changes: 4 additions & 3 deletions javascript/externs/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
load("@semmle_code//:dist.bzl", "pack_zip")
load("//misc/bazel:pkg.bzl", "codeql_pkg_files", "strip_prefix")

pack_zip(
codeql_pkg_files(
name = "externs",
srcs = glob(
["**/*"],
exclude = ["BUILD.bazel"],
),
prefix = "tools/data/externs",
visibility = ["//visibility:public"],
strip_prefix = strip_prefix.from_pkg(),
visibility = ["//javascript:__pkg__"],
)
23 changes: 9 additions & 14 deletions javascript/extractor/lib/typescript/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
load("@semmle_code//:common.bzl", "on_windows")

# Builds a zip file of the compiled typscript-parser-wrapper and its dependencies.
genrule(
name = "typescript",
Expand Down Expand Up @@ -33,19 +31,16 @@ genrule(
# Install again with only runtime deps
"$$NPM install --prod",
"mv node_modules build/",
"mkdir -p javascript/tools/typescript-parser-wrapper",
"mv build/* javascript/tools/typescript-parser-wrapper",
"mkdir -p typescript-parser-wrapper",
"mv build/* typescript-parser-wrapper",
"OUT=$$BAZEL_ROOT/$@",
"case $$OSTYPE in",
" cygwin|msys|win32) OUT=$$(cygpath -w $$OUT);;",
"esac",
"",
]) + on_windows(
" && ".join([
"$$BAZEL_ROOT/$(execpath @bazel_tools//tools/zip:zipper) cC $$(cygpath -w $$BAZEL_ROOT/$@) $$(find javascript -name '*' -print)",
"rm -rf $$TEMP",
]),
" && ".join([
"$$BAZEL_ROOT/$(execpath @bazel_tools//tools/zip:zipper) cC $$BAZEL_ROOT/$@ $$(find javascript -name '*' -print)",
"rm -rf $$TEMP",
]),
),
"$$BAZEL_ROOT/$(execpath @bazel_tools//tools/zip:zipper) cC $$OUT $$(find typescript-parser-wrapper -name '*' -print)",
"rm -rf $$TEMP",
]),
tools = [
"@bazel_tools//tools/zip:zipper",
"@nodejs//:node_bin",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static void setUp() throws Exception {
entry = zis.getNextEntry();
}
}
Path tsWrapper = tempDir.resolve("javascript/tools/typescript-parser-wrapper/main.js");
Path tsWrapper = tempDir.resolve("typescript-parser-wrapper/main.js");
if (!Files.exists(tsWrapper)) {
throw new RuntimeException("Could not find ts-wrapper at " + tsWrapper);
}
Expand Down
15 changes: 15 additions & 0 deletions javascript/resources/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
load("//misc/bazel:pkg.bzl", "codeql_pkg_files")

codeql_pkg_files(
name = "resources",
srcs = glob(
["**/*"],
exclude = [
"tools/*.sh",
"BUILD.bazel",
],
),
exes = glob(["tools/*.sh"]),
strip_prefix = "",
visibility = ["//javascript:__pkg__"],
)
94 changes: 94 additions & 0 deletions javascript/resources/codeql-extractor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: "javascript"
aliases:
- javascript-typescript
- typescript
display_name: "JavaScript/TypeScript"
version: 1.22.1
column_kind: "utf16"
unicode_newlines: true
build_modes:
- none
file_coverage_languages:
- name: javascript
display_name: JavaScript
scc_languages:
- JavaScript
- name: typescript
display_name: TypeScript
scc_languages:
- TypeScript
- TypeScript Typings
github_api_languages:
- JavaScript
- TypeScript
scc_languages:
- JavaScript
- TypeScript
- TypeScript Typings
file_types:
- name: javascript
display_name: JavaScript
extensions:
- .js
- .jsx
- name: ecmascript
display_name: ECMAScript
extensions:
- .es
- .es6
- .mjs
- name: typescript
display_name: TypeScript
extensions:
- .ts
- .tsx
- name: html
display_name: HTML
extensions:
- .html
- .htm
- .xhtm
- .xhtml
- name: vue
display_name: Vue.js component
extensions:
- .vue
- name: data
display_name: Data or configuration files
extensions:
- .json
- .yml
- .yaml
- .raml
legacy_qltest_extraction: true
options:
trap:
title: TRAP options
description: Options about how the extractor handles TRAP files
type: object
visibility: 3
properties:
cache:
title: TRAP cache options
description: Options about how the extractor handles its TRAP cache
type: object
properties:
dir:
title: TRAP cache directory
description: The directory of the TRAP cache to use
type: string
bound:
title: TRAP cache bound
description: A soft limit (in MB) on the size of the TRAP cache
type: string
pattern: "[0-9]+"
write:
title: TRAP cache writeable
description: Whether to write to the TRAP cache as well as reading it
type: string
pattern: "(true|TRUE|false|FALSE)"
skip_types:
title: Skip type extraction for TypeScript
description: Whether to skip the extraction of types in a TypeScript application
type: string
pattern: "^(false|true)$"
30 changes: 30 additions & 0 deletions javascript/resources/tools/autobuild.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
@echo off
SETLOCAL EnableDelayedExpansion

set jvm_args=-Xss16m

rem If CODEQL_RAM is set, use half for Java and half for TS.
if NOT [%CODEQL_RAM%] == [] (
set /a "half_ram=CODEQL_RAM/2"
set LGTM_TYPESCRIPT_RAM=%half_ram%
set jvm_args=!jvm_args! -Xmx!half_ram!m
)

rem If CODEQL_THREADS is set, propagate via LGTM_THREADS.
if NOT [%CODEQL_THREADS%] == [] (
set LGTM_THREADS=%CODEQL_THREADS%
)

rem The JS autobuilder expects to find typescript modules under SEMMLE_DIST/tools.
rem They are included in the pack, but we need to set SEMMLE_DIST appropriately.
set SEMMLE_DIST=%CODEQL_EXTRACTOR_JAVASCRIPT_ROOT%

rem The JS autobuilder expects LGTM_SRC to be set to the source root.
set LGTM_SRC=%CD%

type NUL && "%CODEQL_JAVA_HOME%\bin\java.exe" %jvm_args% ^
-cp "%CODEQL_EXTRACTOR_JAVASCRIPT_ROOT%\tools\extractor-javascript.jar" ^
com.semmle.js.extractor.AutoBuild
exit /b %ERRORLEVEL%

ENDLOCAL
29 changes: 29 additions & 0 deletions javascript/resources/tools/autobuild.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/sh

set -eu

jvm_args=-Xss16m

# If CODEQL_RAM is set, use half for Java and half for TS.
if [ -n "${CODEQL_RAM:-}" ] ; then
half_ram="$(( CODEQL_RAM / 2 ))"
LGTM_TYPESCRIPT_RAM="$half_ram"
export LGTM_TYPESCRIPT_RAM
jvm_args="$jvm_args -Xmx${half_ram}m"
fi

# If CODEQL_THREADS is set, propagate via LGTM_THREADS.
if [ -n "${CODEQL_THREADS:-}" ] ; then
LGTM_THREADS="$CODEQL_THREADS"
export LGTM_THREADS
fi

# The JS autobuilder expects to find typescript modules under SEMMLE_DIST/tools.
# They are included in the pack, but we need to set SEMMLE_DIST appropriately.
# We want to word-split $jvm_args, so disable the shellcheck warning.
# shellcheck disable=SC2086
env SEMMLE_DIST="$CODEQL_EXTRACTOR_JAVASCRIPT_ROOT" \
LGTM_SRC="$(pwd)" \
"${CODEQL_JAVA_HOME}/bin/java" $jvm_args \
-cp "$CODEQL_EXTRACTOR_JAVASCRIPT_ROOT/tools/extractor-javascript.jar" \
com.semmle.js.extractor.AutoBuild
8 changes: 8 additions & 0 deletions javascript/resources/tools/baseline-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"paths-ignore": [
"**/node_modules/**",
"**/bower_components/**",
"**/*.min.js",
"**/*-min.js"
]
}
2 changes: 2 additions & 0 deletions javascript/resources/tools/configure-baseline.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@echo off
type "%CODEQL_EXTRACTOR_JAVASCRIPT_ROOT%\tools\baseline-config.json"
3 changes: 3 additions & 0 deletions javascript/resources/tools/configure-baseline.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh

cat "$CODEQL_EXTRACTOR_JAVASCRIPT_ROOT/tools/baseline-config.json"
4 changes: 4 additions & 0 deletions javascript/resources/tools/index-dir.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh

echo "Not implemented." 1>&2
exit 1
1 change: 0 additions & 1 deletion ql/.gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
target
extractor-pack
.vscode/launch.json
.cache
ql/test/**/*.testproj
Expand Down
1 change: 0 additions & 1 deletion ruby/.gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
extractor/target
extractor-pack
.vscode/launch.json
.cache
ql/test/**/*.testproj
Expand Down

0 comments on commit 63116d2

Please sign in to comment.