Skip to content
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

JavaScript: Add CI configuration for software tests and Dependabot #20

Merged
merged 1 commit into from
May 27, 2024
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
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
surister marked this conversation as resolved.
Show resolved Hide resolved
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.
surister marked this conversation as resolved.
Show resolved Hide resolved
"""
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"):
surister marked this conversation as resolved.
Show resolved Hide resolved
target = Antlr4Target.python
elif input_target.startswith("js") or input_target.startswith("java"):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why run js when using java? why is java an option?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just a shorthand notation for "javascript".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ahh, thats why it works when running python setup_grammar.py javascript :D

I'd really prefer to use exact matches... but maybe personal preference.

surister marked this conversation as resolved.
Show resolved Hide resolved
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