Skip to content

Commit 5c74beb

Browse files
authored
Merge pull request github#16317 from github/redsun82/go
Go: add bazel build
2 parents d85f81d + 73df4fa commit 5c74beb

File tree

48 files changed

+979
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+979
-2
lines changed

.bazelrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ build:linux --cxxopt=-std=c++20
1414
build:macos --cxxopt=-std=c++20 --cpu=darwin_x86_64
1515
build:windows --cxxopt=/std:c++20 --cxxopt=/Zc:preprocessor
1616

17+
# this requires developer mode, but is required to have pack installer functioning
18+
startup --windows_enable_symlinks
19+
common --enable_runfiles
20+
1721
common --registry=file:///%workspace%/misc/bazel/registry
1822
common --registry=https://bcr.bazel.build
1923

.pre-commit-config.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ repos:
2929
entry: bazel run //misc/bazel:buildifier
3030
pass_filenames: false
3131

32+
- id: go-gen
33+
name: Check checked in generated files in go
34+
files: ^go/.*
35+
language: system
36+
entry: bazel run //go:gen
37+
pass_filenames: false
38+
3239
- id: codeql-format
3340
name: Fix QL file formatting
3441
files: \.qll?$

MODULE.bazel

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ local_path_override(
1313

1414
# see https://registry.bazel.build/ for a list of available packages
1515

16-
bazel_dep(name = "platforms", version = "0.0.8")
16+
bazel_dep(name = "platforms", version = "0.0.9")
17+
bazel_dep(name = "rules_go", version = "0.47.0")
1718
bazel_dep(name = "rules_pkg", version = "0.10.1")
1819
bazel_dep(name = "rules_nodejs", version = "6.0.3")
1920
bazel_dep(name = "rules_python", version = "0.31.0")
2021
bazel_dep(name = "bazel_skylib", version = "1.5.0")
2122
bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl")
2223
bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json")
2324
bazel_dep(name = "fmt", version = "10.0.0")
25+
bazel_dep(name = "gazelle", version = "0.36.0")
2426

2527
bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
2628

@@ -52,6 +54,9 @@ node.toolchain(
5254
)
5355
use_repo(node, "nodejs", "nodejs_toolchains")
5456

57+
go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk")
58+
go_sdk.download(version = "1.22.2")
59+
5560
register_toolchains(
5661
"@nodejs_toolchains//:all",
5762
)

go/BUILD.bazel

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
load("@bazel_skylib//rules:native_binary.bzl", "native_binary")
2+
load("@rules_pkg//pkg:install.bzl", "pkg_install")
3+
load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files")
4+
load("//:defs.bzl", "codeql_platform")
5+
6+
native_binary(
7+
name = "gazelle",
8+
src = "@gazelle//cmd/gazelle",
9+
out = "gazelle.exe",
10+
args = ["go/extractor"],
11+
)
12+
13+
_gen_binaries = [
14+
"@rules_go//go",
15+
":gazelle",
16+
"//go/extractor/cli/go-gen-dbscheme",
17+
]
18+
19+
py_binary(
20+
name = "gen",
21+
srcs = ["gen.py"],
22+
args = ["$(rlocationpath %s)" % bin for bin in _gen_binaries],
23+
data = _gen_binaries,
24+
deps = ["@rules_python//python/runfiles"],
25+
)
26+
27+
# this is an instance of the dbscheme kept in the bazel build tree
28+
# this allows everything that bazel builds to be up-to-date,
29+
# independently from whether //go:gen was already run to update the checked in files
30+
genrule(
31+
name = "dbscheme",
32+
outs = ["go.dbscheme"],
33+
cmd = "$(execpath //go/extractor/cli/go-gen-dbscheme) $@",
34+
tools = ["//go/extractor/cli/go-gen-dbscheme"],
35+
)
36+
37+
pkg_files(
38+
name = "resources",
39+
srcs = [
40+
"LICENSE",
41+
"codeql-extractor.yml",
42+
"ql/lib/go.dbscheme.stats",
43+
":dbscheme",
44+
],
45+
)
46+
47+
pkg_filegroup(
48+
name = "extractor-pack-generic",
49+
srcs = [
50+
":resources",
51+
"//go/codeql-tools",
52+
"//go/downgrades",
53+
"//go/extractor:tokenizer",
54+
],
55+
visibility = ["//visibility:public"],
56+
)
57+
58+
pkg_files(
59+
name = "extractor-pack-arch",
60+
srcs = [
61+
"//go/extractor/cli/go-autobuilder",
62+
"//go/extractor/cli/go-bootstrap",
63+
"//go/extractor/cli/go-build-runner",
64+
"//go/extractor/cli/go-extractor",
65+
"//go/extractor/cli/go-gen-dbscheme",
66+
"//go/extractor/cli/go-tokenizer",
67+
],
68+
attributes = pkg_attributes(mode = "0755"),
69+
prefix = "tools/" + codeql_platform,
70+
visibility = ["//visibility:public"],
71+
)
72+
73+
pkg_filegroup(
74+
name = "extractor-pack",
75+
srcs = [
76+
":extractor-pack-arch",
77+
":extractor-pack-generic",
78+
],
79+
visibility = ["//visibility:public"],
80+
)
81+
82+
pkg_install(
83+
name = "_extractor_pack",
84+
srcs = [":extractor-pack"],
85+
)
86+
87+
py_binary(
88+
name = "create-extractor-pack",
89+
srcs = ["create_extractor_pack.py"],
90+
env = {"REPO_NAME": repo_name()},
91+
main = "create_extractor_pack.py",
92+
deps = ["_extractor_pack"],
93+
)

go/codeql-tools/BUILD.bazel

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files")
2+
3+
pkg_files(
4+
name = "sh-files",
5+
srcs = glob(["*.sh"]),
6+
attributes = pkg_attributes(mode = "0755"),
7+
)
8+
9+
pkg_files(
10+
name = "non-sh-files",
11+
srcs = glob(
12+
["*"],
13+
exclude = [
14+
"*.sh",
15+
"BUILD.bazel",
16+
],
17+
),
18+
)
19+
20+
pkg_filegroup(
21+
name = "codeql-tools",
22+
srcs = [
23+
":non-sh-files",
24+
":sh-files",
25+
],
26+
prefix = "tools",
27+
visibility = ["//go:__pkg__"],
28+
)

go/create_extractor_pack.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/bin/env python3
2+
import os
3+
import pathlib
4+
import shutil
5+
import sys
6+
import subprocess
7+
8+
try:
9+
workspace_dir = pathlib.Path(os.environ['BUILD_WORKSPACE_DIRECTORY'])
10+
except KeyError:
11+
res = subprocess.run(["bazel", "run", ":create-extractor-pack"], cwd=pathlib.Path(__file__).parent)
12+
sys.exit(res.returncode)
13+
14+
from go._extractor_pack_install_script import main
15+
16+
build_dir = workspace_dir / 'go' / 'build'
17+
18+
if not build_dir.exists():
19+
# we probably are in the internal repo
20+
workspace_dir /= 'ql'
21+
build_dir = workspace_dir / 'go' / 'build'
22+
23+
dest_dir = build_dir / 'codeql-extractor-pack'
24+
shutil.rmtree(dest_dir, ignore_errors=True)
25+
os.environ['DESTDIR'] = str(dest_dir)
26+
main(sys.argv)

go/downgrades/BUILD.bazel

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
2+
3+
pkg_files(
4+
name = "downgrades",
5+
srcs = glob(
6+
["**"],
7+
exclude = ["BUILD.bazel"],
8+
),
9+
prefix = "downgrades",
10+
strip_prefix = strip_prefix.from_pkg(),
11+
visibility = ["//go:__pkg__"],
12+
)

go/extractor/.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/*/**/BUILD.bazel linguist-generated=true

go/extractor/BUILD.bazel

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
load("@rules_go//go:def.bzl", "go_library")
2+
load("@rules_pkg//pkg:mappings.bzl", "pkg_files")
3+
4+
# gazelle:prefix github.com/github/codeql-go/extractor
5+
# gazelle:map_kind go_binary codeql_go_binary //go:rules.bzl
6+
7+
# the immediately following `extractor` target is kept up to date by `bazel run //go:gen`, do not edit directly
8+
go_library(
9+
name = "extractor",
10+
srcs = [
11+
"extractor.go",
12+
"gomodextractor.go",
13+
"semaphore.go",
14+
],
15+
importpath = "github.com/github/codeql-go/extractor",
16+
visibility = ["//visibility:public"],
17+
deps = [
18+
"//go/extractor/dbscheme",
19+
"//go/extractor/diagnostics",
20+
"//go/extractor/srcarchive",
21+
"//go/extractor/trap",
22+
"//go/extractor/util",
23+
"//go/extractor/vendor/golang.org/x/mod/modfile",
24+
"//go/extractor/vendor/golang.org/x/tools/go/packages",
25+
],
26+
)
27+
28+
# the other targets are not generated by gazelle
29+
30+
# this is separate from `tokenizer-jar` below because we don't want these compiled class files in the pack
31+
java_library(
32+
name = "tokenizer-deps",
33+
srcs = [
34+
"net/sourceforge/pmd/cpd/AbstractLanguage.java",
35+
"net/sourceforge/pmd/cpd/SourceCode.java",
36+
"net/sourceforge/pmd/cpd/TokenEntry.java",
37+
"net/sourceforge/pmd/cpd/Tokenizer.java",
38+
],
39+
)
40+
41+
# we only need these compiled class files in the pack
42+
java_library(
43+
name = "tokenizer-jar",
44+
srcs = [
45+
"net/sourceforge/pmd/cpd/GoLanguage.java",
46+
"opencsv/CSVParser.java",
47+
"opencsv/CSVReader.java",
48+
],
49+
deps = [":tokenizer-deps"],
50+
)
51+
52+
pkg_files(
53+
name = "tokenizer",
54+
srcs = [":tokenizer-jar"],
55+
prefix = "tools",
56+
renames = {
57+
":tokenizer-jar": "tokenizer.jar", # name is `libtokenizer.jar` by default
58+
},
59+
visibility = ["//go:__pkg__"],
60+
)

go/extractor/autobuilder/BUILD.bazel

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

0 commit comments

Comments
 (0)