Skip to content

Setup CDS extractor esbuild JS bundle #203

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Jul 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions .github/workflows/cds-extractor-dist-bundle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: CDS Extractor Distribution Bundle

on:
push:
branches: [ main ]
paths:
- 'extractors/cds/**'
pull_request:
branches: [ main ]
paths:
- 'extractors/cds/**'
workflow_dispatch:
# This job can be manually triggered to validate the CDS extractor bundle

jobs:
bundle-validation:
name: CDS extractor bundle validation
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: 'extractors/cds/tools/package-lock.json'

- name: Install node dependencies
working-directory: extractors/cds/tools
run: npm ci

- name: Run TS code linter
working-directory: extractors/cds/tools
run: npm run lint

- name: Run TS code unit tests with coverage report
working-directory: extractors/cds/tools
run: npm run test:coverage

- name: Build and validate the CDS extractor bundle
working-directory: extractors/cds/tools
run: npm run build:validate

- name: Validate CDS extractor JS bundle and map files
working-directory: extractors/cds/tools
run: |
_bundle_file="dist/cds-extractor.bundle.js"
_bundle_map_file="${_bundle_file}.map"
if [ -f "$_bundle_file" ]; then
echo "✅ Bundle file exists."
else
echo "❌ Bundle file not found."
exit 2
fi

if [ -f "$_bundle_map_file" ]; then
echo "✅ CDS extractor JS bundle source map file exists."
else
echo "❌ CDS extractor JS bundle source map file not found."
exit 3
fi

# Check if the built bundle and map files differ
# from the versions committed to git.
if git diff --exit-code "$_bundle_file" "$_bundle_map_file"; then
echo "✅ CDS JS bundle and map files match committed versions."
else
echo "❌ CDS JS bundle and/or map file(s) differ from committed version(s)."
echo "The built bundle and/or source map do not match the committed versions."
echo "Please rebuild the bundle and commit the changes:"
echo " cd extractors/cds/tools"
echo " npm install"
echo " npm run build:all"
echo " git add dist/cds-extractor.bundle.*"
echo " git commit -m 'Update CDS extractor dist bundle'"
exit 4
fi

# Check if bundle file starts with the expected shebang for `node`.
if head -n 1 "${_bundle_file}" | grep -q "#!/usr/bin/env node"; then
echo "✅ Bundle has Node.js shebang"
else
echo "❌ Bundle missing Node.js shebang"
exit 5
fi
4 changes: 4 additions & 0 deletions extractors/cds/tools/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Override .gitignore configs from parent directories in order to
# include the bundled JS code for the CDS extractor.
!dist/

1 change: 1 addition & 0 deletions extractors/cds/tools/.nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
20.15.0
Loading