Skip to content

Commit

Permalink
JavaScript: Add CI configuration for software tests and Dependabot
Browse files Browse the repository at this point in the history
  • Loading branch information
amotl committed May 22, 2024
1 parent 609e7a5 commit 405aaff
Show file tree
Hide file tree
Showing 8 changed files with 112 additions and 8 deletions.
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2

updates:
Expand All @@ -7,6 +12,11 @@ updates:
schedule:
interval: "weekly"

- package-ecosystem: "npm"
directory: "/cratedb_sqlparse_js"
schedule:
interval: "weekly"

- package-ecosystem: "pip"
directory: "/cratedb_sqlparse_py"
schedule:
Expand Down
82 changes: 82 additions & 0 deletions .github/workflows/javascript.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
name: JavaScript Tests

on:
pull_request: ~
push:
branches: [ main ]

# Allow job to be triggered manually.
workflow_dispatch:

# Run job each night after CrateDB nightly has been published.
schedule:
- cron: '0 3 * * *'

# Cancel in-progress jobs when pushing to the same branch.
concurrency:
cancel-in-progress: true
group: ${{ github.workflow }}-${{ github.ref }}

# Select JavaScript grammar.
defaults:
run:
working-directory: cratedb_sqlparse_js

jobs:

tests:

runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
node-version: ["18", "20", "22"]

env:
OS: ${{ matrix.os }}
NODEJS: ${{ matrix.node-version }}

# https://docs.github.com/en/actions/using-containerized-services/about-service-containers
services:
cratedb:
image: crate/crate:nightly
ports:
- 4200:4200
- 5432:5432
env:
CRATE_HEAP_SIZE: 4g

name: Node.js ${{ matrix.node-version }} on OS ${{ matrix.os }}
steps:

- name: Acquire sources
uses: actions/checkout@v4

# https://github.com/actions/setup-python
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.12
architecture: x64

# https://github.com/actions/setup-node
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: '**/package-lock.json'

- name: Generate runtime grammar
run: |
cd ..
pip install --requirement requirements.txt
python setup_grammar.py javascript
- name: Set up project
run: npm install

- name: Run linter and software tests
run: npm test
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
cache: 'pip'
cache-dependency-path: 'pyproject.toml'

- name: Setup project
- name: Set up project
run: |
# `setuptools 0.64.0` adds support for editable install hooks (PEP 660).
Expand Down
4 changes: 2 additions & 2 deletions cratedb_sqlparse_js/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion cratedb_sqlparse_js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"sql-dialect"
],
"scripts": {
"test": "vitest",
"test": "vitest run",
"build": "vite build"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion cratedb_sqlparse_py/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def generate():
# Test module for availability.
find_spec("cratedb_sqlparse.generated_parser.SqlBaseParser")
except ImportError:
subprocess.check_call([sys.executable, SETUP_GRAMMAR], cwd=HERE.parent.parent) # noqa: S603
subprocess.check_call([sys.executable, SETUP_GRAMMAR, "python"], cwd=HERE.parent.parent) # noqa: S603

try:
# Test module for availability.
Expand Down
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
[tool.poe.tasks]

generate = [
{ cmd = "python setup_grammar.py" },
{ cmd = "python setup_grammar.py python" },
{ cmd = "python setup_grammar.py javascript" },
]
15 changes: 13 additions & 2 deletions setup_grammar.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,21 @@ def set_version(target: Antlr4Target, version: str):


if __name__ == '__main__':
"""
Invoke the grammar compiler / generator.
TODO: Converge `version` into command-line argument?
TODO: Improve efficiency by generating runtime parser for all implemented languages at once.
"""
setup_logging()
# TODO: Converge into command-line argument?
input_target = sys.argv[1]
version = '5.6.4'
target = Antlr4Target.python
if input_target.startswith("py"):
target = Antlr4Target.python
elif input_target.startswith("js") or input_target.startswith("java"):
target = Antlr4Target.js
else:
raise NotImplementedError(f"Parser generator for target {input_target} not implemented")
download_cratedb_grammar(version)
compile_grammar(target)
patch_lexer(target)
Expand Down

0 comments on commit 405aaff

Please sign in to comment.