Skip to content

Commit 189abc2

Browse files
Merge branch 'main' into dependabot/npm_and_yarn/javascript/frameworks/ui5/test/queries/UI5Xss/xss-book-example/npm_and_yarn-775d964dd3
2 parents d9d86e5 + 2c5761a commit 189abc2

116 files changed

Lines changed: 16918 additions & 3067 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
File renamed without changes.
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: CDS Extractor Distribution Bundle
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
paths:
7+
- 'extractors/cds/**'
8+
pull_request:
9+
branches: [ main ]
10+
paths:
11+
- 'extractors/cds/**'
12+
workflow_dispatch:
13+
# This job can be manually triggered to validate the CDS extractor bundle
14+
15+
jobs:
16+
bundle-validation:
17+
name: CDS extractor bundle validation
18+
runs-on: ubuntu-latest
19+
20+
steps:
21+
- name: Checkout repository
22+
uses: actions/checkout@v4
23+
24+
- name: Setup Node.js
25+
uses: actions/setup-node@v4
26+
with:
27+
node-version: '20'
28+
cache: 'npm'
29+
cache-dependency-path: 'extractors/cds/tools/package-lock.json'
30+
31+
- name: Install node dependencies
32+
working-directory: extractors/cds/tools
33+
run: npm ci
34+
35+
- name: Run TS code linter
36+
working-directory: extractors/cds/tools
37+
run: npm run lint
38+
39+
- name: Run TS code unit tests with coverage report
40+
working-directory: extractors/cds/tools
41+
run: npm run test:coverage
42+
43+
- name: Build and validate the CDS extractor bundle
44+
working-directory: extractors/cds/tools
45+
run: npm run build:validate
46+
47+
- name: Validate CDS extractor JS bundle and map files
48+
working-directory: extractors/cds/tools
49+
run: |
50+
_bundle_file="dist/cds-extractor.bundle.js"
51+
_bundle_map_file="${_bundle_file}.map"
52+
if [ -f "$_bundle_file" ]; then
53+
echo "✅ Bundle file exists."
54+
else
55+
echo "❌ Bundle file not found."
56+
exit 2
57+
fi
58+
59+
if [ -f "$_bundle_map_file" ]; then
60+
echo "✅ CDS extractor JS bundle source map file exists."
61+
else
62+
echo "❌ CDS extractor JS bundle source map file not found."
63+
exit 3
64+
fi
65+
66+
# Check if the built bundle and map files differ
67+
# from the versions committed to git.
68+
if git diff --exit-code "$_bundle_file" "$_bundle_map_file"; then
69+
echo "✅ CDS JS bundle and map files match committed versions."
70+
else
71+
echo "❌ CDS JS bundle and/or map file(s) differ from committed version(s)."
72+
echo "The built bundle and/or source map do not match the committed versions."
73+
echo "Please rebuild the bundle and commit the changes:"
74+
echo " cd extractors/cds/tools"
75+
echo " npm install"
76+
echo " npm run build:all"
77+
echo " git add dist/cds-extractor.bundle.*"
78+
echo " git commit -m 'Update CDS extractor dist bundle'"
79+
exit 4
80+
fi
81+
82+
# Check if bundle file starts with the expected shebang for `node`.
83+
if head -n 1 "${_bundle_file}" | grep -q "#!/usr/bin/env node"; then
84+
echo "✅ Bundle has Node.js shebang"
85+
else
86+
echo "❌ Bundle missing Node.js shebang"
87+
exit 5
88+
fi

.github/workflows/code_scanning.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ on:
1010
- cron: '39 12 * * 2'
1111
workflow_dispatch:
1212

13+
env:
14+
CODEQL_ACTION_DIFF_INFORMED_QUERIES: false
15+
1316
jobs:
1417
analyze-javascript:
1518
name: Analyze

.github/workflows/run-codeql-unit-tests-javascript.yml

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -77,48 +77,28 @@ jobs:
7777
run: |
7878
qlt query run install-packs
7979
80-
- name: Ensure presence of cds shell command
81-
run: |
82-
if ! command -v cds &> /dev/null
83-
then
84-
## Workaround for https://github.tools.sap/cap/issues/issues/17840
85-
npm install -g @sap/cds-dk@8.6.1
86-
fi
80+
- name: Setup Node.js for CDS compilation
81+
uses: actions/setup-node@v4
82+
with:
83+
node-version: '18'
84+
cache: 'npm'
85+
cache-dependency-path: 'extractors/cds/tools/package-lock.json'
8786

88-
# Compile .cds files to .cds.json files.
87+
- name: Verify Node.js and npm tools
88+
run: |
89+
echo "Node.js version: $(node --version)"
90+
echo "npm version: $(npm --version)"
91+
echo "npx version: $(npx --version)"
92+
# Verify npx can access @sap/cds-dk without installing globally
93+
echo "Testing npx access to @sap/cds-dk..."
94+
npx --yes --package @sap/cds-dk@latest cds --version || echo "CDS will be installed per-project as needed"
95+
96+
# Compile .cds files to .cds.json files using the dedicated test script
8997
- name: Compile CAP CDS files
9098
run: |
91-
for test_dir in $(find . -type f -name '*.expected' -exec dirname {} \;);
92-
do
93-
# The CDS compiler produces locations relative to the working directory
94-
# so we switch to the test directory before running the compiler.
95-
pushd $test_dir
96-
for cds_file in $(find . -type f \( -iname '*.cds' \) -print)
97-
do
98-
echo "I am compiling $cds_file"
99-
_out_path="${cds_file}.json"
100-
cds compile $cds_file \
101-
--locations \
102-
--to json \
103-
--dest "$_out_path" \
104-
2> "$cds_file.err"
105-
# Check if the output is a regular file or a (sub)directory, where
106-
# files generated in an output directory will need to have the file
107-
# extension changed from '.json' to '.cds.json', but we don't need
108-
# to rename anything if the cds compiler just generated a single
109-
# '.cds.json' file.
110-
if [ -d "$_out_path" ]
111-
then
112-
for json_file in $(find "$_out_path" -type f \( -iname '*.json' \) -print)
113-
do
114-
_new_path="${json_file%.json}.cds.json"
115-
echo "Renaming CDS compiler generated JSON file $json_file to $_new_path"
116-
mv "$json_file" "$_new_path"
117-
done
118-
fi
119-
done
120-
popd
121-
done
99+
# Use the dedicated CDS compilation script that includes proper version resolution
100+
# This script follows the same logic as the CDS extractor's resolveCdsVersions function
101+
./extractors/cds/tools/workflow/cds-compilation-for-actions.sh
122102
123103
- name: Run test suites
124104
id: run-test-suites
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
name: "Update the CodeQL CLI dependencies"
2+
3+
on:
4+
workflow_dispatch:
5+
# nightly runs to update the CodeQL CLI dependencies
6+
schedule:
7+
- cron: '30 0 * * *'
8+
9+
permissions:
10+
contents: write
11+
pull-requests: write
12+
13+
jobs:
14+
update-codeql:
15+
name: Update CodeQL CLI dependencies
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Checkout repository
20+
uses: actions/checkout@v4
21+
22+
- name: Check latest CodeQL CLI version and update qlt.conf.json
23+
id: check-version
24+
env:
25+
GH_TOKEN: ${{ github.token }}
26+
run: |
27+
echo "Checking latest CodeQL CLI version"
28+
current_version=$(jq .CodeQLCLI qlt.conf.json -r)
29+
latest_version=$(gh release list --repo github/codeql-cli-binaries --json 'tagName,isLatest' --jq '.[] | select(.isLatest == true) | .tagName')
30+
echo "Current CodeQL CLI version: $current_version"
31+
echo "Latest CodeQL CLI version: $latest_version"
32+
33+
# Remove 'v' prefix if present for comparison with current version
34+
latest_clean=$(echo "$latest_version" | sed 's/^v//')
35+
36+
if [ "$latest_clean" != "$current_version" ]; then
37+
echo "Updating CodeQL CLI from $current_version to $latest_clean"
38+
echo "update_needed=true" >> $GITHUB_OUTPUT
39+
echo "latest_version=$latest_clean" >> $GITHUB_OUTPUT
40+
echo "latest_version_tag=$latest_version" >> $GITHUB_OUTPUT
41+
42+
# Update qlt.conf.json with all properties
43+
echo "Updating qlt.conf.json with all properties for version $latest_clean"
44+
jq --arg cli_version "$latest_clean" \
45+
--arg std_lib "codeql-cli/$latest_version" \
46+
--arg bundle "codeql-bundle-$latest_version" \
47+
'.CodeQLCLI = $cli_version | .CodeQLStandardLibrary = $std_lib | .CodeQLCLIBundle = $bundle' \
48+
qlt.conf.json > qlt.conf.json.tmp && mv qlt.conf.json.tmp qlt.conf.json
49+
50+
echo "Updated qlt.conf.json contents:"
51+
cat qlt.conf.json
52+
else
53+
echo "CodeQL CLI is already up-to-date at version $current_version."
54+
echo "update_needed=false" >> $GITHUB_OUTPUT
55+
fi
56+
57+
- name: Install QLT
58+
if: steps.check-version.outputs.update_needed == 'true'
59+
id: install-qlt
60+
uses: advanced-security/codeql-development-toolkit/.github/actions/install-qlt@main
61+
with:
62+
qlt-version: 'latest'
63+
add-to-path: true
64+
65+
- name: Install CodeQL
66+
if: steps.check-version.outputs.update_needed == 'true'
67+
id: install-codeql
68+
shell: bash
69+
run: |
70+
echo "Installing CodeQL"
71+
qlt codeql run install
72+
echo "-----------------------------"
73+
echo "CodeQL Home: $QLT_CODEQL_HOME"
74+
echo "CodeQL Binary: $QLT_CODEQL_PATH"
75+
76+
- name: Upgrade CodeQL pack lock files
77+
if: steps.check-version.outputs.update_needed == 'true'
78+
shell: bash
79+
run: |
80+
echo "Upgrading CodeQL pack lock files"
81+
echo "Finding all directories with qlpack.yml files..."
82+
83+
# Find all directories containing qlpack.yml files
84+
find . -name "qlpack.yml" -type f | while read -r qlpack_file; do
85+
pack_dir=$(dirname "$qlpack_file")
86+
echo "Upgrading pack in directory: $pack_dir"
87+
88+
# Change to the directory and run codeql pack upgrade
89+
cd "$pack_dir"
90+
$QLT_CODEQL_PATH pack upgrade
91+
cd - > /dev/null
92+
done
93+
94+
echo "Finished upgrading all CodeQL pack lock files"
95+
96+
- name: Create Pull Request
97+
if: steps.check-version.outputs.update_needed == 'true'
98+
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
99+
with:
100+
title: "Upgrade CodeQL CLI dependency to ${{ steps.check-version.outputs.latest_version_tag }}"
101+
body: |
102+
This PR upgrades the CodeQL CLI version to ${{ steps.check-version.outputs.latest_version_tag }}.
103+
104+
**Changes made:**
105+
- Updated `CodeQLCLI` to `${{ steps.check-version.outputs.latest_version }}`
106+
- Updated `CodeQLStandardLibrary` to `codeql-cli/${{ steps.check-version.outputs.latest_version_tag }}`
107+
- Updated `CodeQLCLIBundle` to `codeql-bundle-${{ steps.check-version.outputs.latest_version_tag }}`
108+
- Upgraded all CodeQL pack lock files using `codeql pack upgrade`
109+
commit-message: "Upgrade CodeQL CLI dependency to ${{ steps.check-version.outputs.latest_version_tag }}"
110+
delete-branch: true
111+
branch: "codeql/upgrade-to-${{ steps.check-version.outputs.latest_version_tag }}"

extractors/cds/tools/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Override .gitignore configs from parent directories in order to
2+
# include the bundled JS code for the CDS extractor.
3+
!dist/
4+

extractors/cds/tools/.nvmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
20.15.0

extractors/cds/tools/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ node dist/cds-extractor.js /path/to/source/root
6363

6464
## Development
6565

66+
> **⚠️ IMPORTANT NOTE**: Any changes to the CDS extractor's compilation task behavior (including how and where `cds compile` commands are executed, project detection logic, or output file generation patterns) **MUST** be reflected in the `extractors/cds/tools/test/cds-compilation-for-actions.test.sh` script. The `.github/workflows/run-codeql-unit-tests-javascript.yml` workflow executes this script during the "Compile CAP CDS files" step to simulate the CDS extractor's compilation process for unit tests. If the script and extractor implementations diverge, the `CodeQL - Run Unit Tests (javascript)` workflow will fail on PRs, causing status check failures. Always review and update the test script when modifying compilation behavior to maintain consistency between local testing and CI/CD environments.
67+
6668
### Project Structure
6769

6870
```text

0 commit comments

Comments
 (0)