Skip to content

Commit fd85c44

Browse files
committed
Ruby: Start building the language pack using bazel.
This PR introduces a bazel and `rules_rust`-based build system for the ruby extractor and language pack. This replacese the existing, `cargo` and `cross`-based build system. For local development, nothing changes, and the existing `cargo`-based build still keeps working as-is. We no longer need to use `cross` to compile our Linux binaries, as we now can link against our hermetic C++ toolchain, which ships with an old enough glibc, so that we don't run into symbol version issues when deploying the binaries to older systems. Besides the one change in dependency (explained in detail in `Cargo.toml` and in #15595), nothing ought to change in how we build the extractor.
1 parent c22cbf5 commit fd85c44

File tree

10 files changed

+8514
-76
lines changed

10 files changed

+8514
-76
lines changed

.github/workflows/ruby-build.yml

Lines changed: 3 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ jobs:
5151
run: |
5252
brew install gnu-tar
5353
echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH
54-
- name: Install cargo-cross
55-
if: runner.os == 'Linux'
56-
run: cargo install cross --version 0.2.5
5754
- uses: ./.github/actions/os-version
5855
id: os_version
5956
- name: Cache entire extractor
@@ -82,16 +79,8 @@ jobs:
8279
- name: Run tests
8380
if: steps.cache-extractor.outputs.cache-hit != 'true'
8481
run: cd extractor && cargo test --verbose
85-
# On linux, build the extractor via cross in a centos7 container.
86-
# This ensures we don't depend on glibc > 2.17.
87-
- name: Release build (linux)
88-
if: steps.cache-extractor.outputs.cache-hit != 'true' && runner.os == 'Linux'
89-
run: |
90-
cd extractor
91-
cross build --release
92-
mv target/x86_64-unknown-linux-gnu/release/codeql-extractor-ruby target/release/
93-
- name: Release build (windows and macos)
94-
if: steps.cache-extractor.outputs.cache-hit != 'true' && runner.os != 'Linux'
82+
- name: Release build
83+
if: steps.cache-extractor.outputs.cache-hit != 'true'
9584
run: cd extractor && cargo build --release
9685
- name: Generate dbscheme
9786
if: ${{ matrix.os == 'ubuntu-latest' && steps.cache-extractor.outputs.cache-hit != 'true'}}
@@ -123,7 +112,7 @@ jobs:
123112
- name: Cache compilation cache
124113
id: query-cache
125114
uses: ./.github/actions/cache-query-compilation
126-
with:
115+
with:
127116
key: ruby-build
128117
- name: Build Query Pack
129118
run: |
@@ -235,54 +224,3 @@ jobs:
235224
shell: bash
236225
run: |
237226
codeql database analyze --search-path "${{ runner.temp }}/ruby-bundle" --format=sarifv2.1.0 --output=out.sarif ../database ruby-code-scanning.qls
238-
239-
# This is a copy of the 'test' job that runs in a centos7 container.
240-
# This tests that the extractor works correctly on systems with an old glibc.
241-
test-centos7:
242-
defaults:
243-
run:
244-
working-directory: ${{ github.workspace }}
245-
strategy:
246-
fail-fast: false
247-
runs-on: ubuntu-latest
248-
container:
249-
image: centos:centos7
250-
env:
251-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
252-
needs: [package]
253-
steps:
254-
- name: Install gh cli
255-
run: |
256-
yum-config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
257-
# fetch-codeql requires unzip and jq
258-
# jq is available in epel-release (https://docs.fedoraproject.org/en-US/epel/)
259-
yum install -y gh unzip epel-release
260-
yum install -y jq
261-
- uses: actions/checkout@v3
262-
- name: Fetch CodeQL
263-
uses: ./.github/actions/fetch-codeql
264-
265-
# Due to a bug in Actions, we can't use runner.temp in the run blocks here.
266-
# https://github.com/actions/runner/issues/2185
267-
268-
- name: Download Ruby bundle
269-
uses: actions/download-artifact@v3
270-
with:
271-
name: codeql-ruby-bundle
272-
path: ${{ runner.temp }}
273-
- name: Unzip Ruby bundle
274-
shell: bash
275-
run: unzip -q -d "$RUNNER_TEMP"/ruby-bundle "$RUNNER_TEMP"/codeql-ruby-bundle.zip
276-
277-
- name: Run QL test
278-
shell: bash
279-
run: |
280-
codeql test run --search-path "$RUNNER_TEMP"/ruby-bundle --additional-packs "$RUNNER_TEMP"/ruby-bundle ruby/ql/test/library-tests/ast/constants/
281-
- name: Create database
282-
shell: bash
283-
run: |
284-
codeql database create --search-path "$RUNNER_TEMP"/ruby-bundle --language ruby --source-root ruby/ql/test/library-tests/ast/constants/ ../database
285-
- name: Analyze database
286-
shell: bash
287-
run: |
288-
codeql database analyze --search-path "$RUNNER_TEMP"/ruby-bundle --format=sarifv2.1.0 --output=out.sarif ../database ruby-code-scanning.qls

ruby/BUILD.bazel

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
load("@//:dist.bzl", "dist", "pack_zip")
2+
load("@ql//:defs.bzl", "codeql_platform")
3+
load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup", "pkg_files")
4+
5+
package(default_visibility = ["//visibility:public"])
6+
7+
alias(
8+
name = "dbscheme",
9+
actual = "//ruby/ql/lib:dbscheme",
10+
)
11+
12+
alias(
13+
name = "dbscheme-stats",
14+
actual = "//ruby/ql/lib:dbscheme-stats",
15+
)
16+
17+
pkg_files(
18+
name = "dbscheme-group",
19+
srcs = [
20+
":dbscheme",
21+
":dbscheme-stats",
22+
],
23+
strip_prefix = None,
24+
)
25+
26+
pkg_filegroup(
27+
name = "db-files",
28+
srcs = [
29+
":dbscheme-group",
30+
"//ruby/downgrades",
31+
],
32+
)
33+
34+
pkg_files(
35+
name = "codeql-extractor-yml",
36+
srcs = ["codeql-extractor.yml"],
37+
strip_prefix = None,
38+
)
39+
40+
dist(
41+
name = "extractor-generic",
42+
srcs = [
43+
":codeql-extractor-yml",
44+
":dbscheme-group",
45+
"//ruby/downgrades",
46+
"//ruby/tools",
47+
],
48+
prefix = "ruby",
49+
visibility = ["//visibility:public"],
50+
)
51+
52+
pack_zip(
53+
name = "extractor-arch",
54+
srcs = [
55+
"//ruby/extractor",
56+
],
57+
package_file_name = "extractor-" + codeql_platform + ".zip",
58+
prefix = "ruby/tools/" + codeql_platform,
59+
visibility = ["//visibility:public"],
60+
)

ruby/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//: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 = ["//ruby:__pkg__"],
12+
)

ruby/extractor/BUILD.bazel

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
load("@//:common.bzl", "codeql_rust_binary")
2+
load("@ruby_deps//:defs.bzl", "aliases", "all_crate_deps")
3+
4+
codeql_rust_binary(
5+
name = "extractor",
6+
srcs = glob(["src/*.rs"]),
7+
aliases = aliases(),
8+
proc_macro_deps = all_crate_deps(
9+
proc_macro = True,
10+
),
11+
visibility = ["//visibility:public"],
12+
deps = all_crate_deps(
13+
normal = True,
14+
),
15+
)

0 commit comments

Comments
 (0)