Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
10e6347
ci: refactor workflow from pre-commit to pytest with improved setup
gtripoli Feb 26, 2026
50e70b9
ui: update wxFormBuilder project with view editor enhancements
gtripoli Feb 26, 2026
8f676e8
ui: collapse wxFormBuilder tree nodes in view editor dialog
gtripoli Feb 27, 2026
bd47aa5
feat: add database object management and trigger options documentation
gtripoli Feb 28, 2026
7c74696
feat: implement PostgreSQL Column.modify, Trigger, and View + refacto…
gtripoli Feb 28, 2026
aecdf99
docs: update CODE_STYLE.md to v1.4 - add commit message guidelines
gtripoli Feb 28, 2026
157be18
docs: add Function/Procedure/Event CRUD operations to test coverage m…
gtripoli Feb 28, 2026
4d6575c
docs: add implementation priority analysis to README
gtripoli Feb 28, 2026
49384b9
feat: implement PostgreSQLFunction with create/drop/alter methods
gtripoli Feb 28, 2026
9ad9c3e
docs: update README - PostgreSQLFunction implemented
gtripoli Feb 28, 2026
933bc1a
feat: add build_empty_function to all engines and PostgreSQL Function…
gtripoli Feb 28, 2026
8e450f2
docs: update README - PostgreSQL Function complete, 60 tests passing
gtripoli Feb 28, 2026
d96a101
feat: implement PostgreSQLProcedure with create/drop/alter methods
gtripoli Feb 28, 2026
71ed6db
docs: update README - PostgreSQL Procedure complete, 63 tests passing
gtripoli Feb 28, 2026
feafdf4
update settings.yml
gtripoli Feb 28, 2026
c4a158c
chore: remove unwanted files and update gitignore
gtripoli Feb 28, 2026
a370dc7
update ci + README
gtripoli Feb 28, 2026
65f69bc
update ci
gtripoli Feb 28, 2026
b66ff40
update ci
gtripoli Feb 28, 2026
fbdb719
update ci and test
gtripoli Feb 28, 2026
c886785
update ci and test
gtripoli Feb 28, 2026
4799e00
update ci and runtest
gtripoli Feb 28, 2026
d65394b
update ci
gtripoli Feb 28, 2026
2d42565
update ci
gtripoli Feb 28, 2026
9e3e9b5
update ci
gtripoli Feb 28, 2026
2ad36f6
update ci
gtripoli Feb 28, 2026
b9f78a5
update ci
gtripoli Feb 28, 2026
08bce43
update ci
gtripoli Feb 28, 2026
473c0f3
update ci
gtripoli Feb 28, 2026
fb91ce6
update
gtripoli Mar 2, 2026
0b1186b
Refine SELECT_COLUMN_BEHAVIOR and SELECT_SCOPED_CURRENT_TABLE golden …
gtripoli Mar 2, 2026
cda9fe6
Refine FROM and JOIN autocomplete golden tests
gtripoli Mar 2, 2026
95d2c84
Refine WHERE, GROUP BY golden tests and add suggestions_not_contains …
gtripoli Mar 2, 2026
95b577b
Refine autocomplete golden tests: HAVING, ORDER, LIMIT
gtripoli Mar 2, 2026
256f426
Refine autocomplete golden test cases and naming
gtripoli Mar 3, 2026
42465a2
Reorganize remaining autocomplete case JSON files
gtripoli Mar 3, 2026
3694667
Extend ORDER cases and sync README totals
gtripoli Mar 3, 2026
d455e20
Refine remaining autocomplete golden test groups
gtripoli Mar 4, 2026
e9c1080
autocomplete: complete SEL golden group
gtripoli Mar 4, 2026
252b442
autocomplete: complete SELECT_PREFIX golden group
gtripoli Mar 4, 2026
49c605b
autocomplete: complete SELECT_COLUMN_BEHAVIOR golden group
gtripoli Mar 4, 2026
0c9396c
test(autocomplete): complete SELECT_SCOPED_CURRENT_TABLE golden group
gtripoli Mar 4, 2026
e9ff328
test(autocomplete): complete FROM golden group
gtripoli Mar 4, 2026
b2aefc0
autocomplete: restrict FROM suggestions to qualified SELECT tables
gtripoli Mar 4, 2026
496345c
autocomplete: allow aliased self-join table suggestions
gtripoli Mar 4, 2026
0368096
autocomplete: fix JOIN_003 join-after-table context
gtripoli Mar 4, 2026
a57dc12
autocomplete: support JOIN ON contexts and suggestions
gtripoli Mar 4, 2026
05fcbbe
tests(autocomplete): mark JOIN_AFTER_TABLE as passing
gtripoli Mar 4, 2026
0bb31ae
tests(autocomplete): mark JOIN_OPERATOR_LEFT_COLUMN_FILTER as passing
gtripoli Mar 4, 2026
f5cf357
docs(autocomplete): clarify RULES.md ambiguities
gtripoli Mar 4, 2026
9f9b047
fix(autocomplete): correct SELECT_LIST rules and move CTE test
gtripoli Mar 4, 2026
c2f2b23
fix(autocomplete): keywords only shown when SELECT has items
gtripoli Mar 4, 2026
027fb44
docs(autocomplete): update test counters after moving CTE test
gtripoli Mar 4, 2026
21b7338
fix(autocomplete): preserve schema order for columns
gtripoli Mar 4, 2026
009377e
feat(autocomplete): add engine parametrization and functions.yaml
gtripoli Mar 4, 2026
f53c5cc
refactor(autocomplete): replace functions.yaml with specification.yaml
gtripoli Mar 4, 2026
923a263
feat(engines): load keywords/functions from versioned specifications
gtripoli Mar 4, 2026
f02e2e6
docs/spec: remove add deltas and document schema
gtripoli Mar 4, 2026
72a386a
fix(autocomplete): implement WHERE/GROUP/HAVING context rules and sco…
gtripoli Mar 4, 2026
298b510
feat(autocomplete): implement ORDER BY and LIMIT clause support
gtripoli Mar 5, 2026
00c052e
fix(autocomplete): support WINDOW OVER and align advanced golden cases
gtripoli Mar 5, 2026
8a8cc43
test(autocomplete): classify WHERE IS expressions as context mode
gtripoli Mar 5, 2026
9b8202f
test(autocomplete): align remaining golden suites and close perf guar…
gtripoli Mar 5, 2026
2764045
feat(autocomplete): add CTE/derived scope support and finalize golden…
gtripoli Mar 5, 2026
c72f192
docs(autocomplete): simplify coverage matrix and improve test descrip…
gtripoli Mar 5, 2026
6a85128
fix(autocomplete): enforce qualifier style propagation and FROM follo…
gtripoli Mar 5, 2026
442ea42
fix(autocomplete): add wildcard SELECT items and alias-safe FROM sugg…
gtripoli Mar 5, 2026
cab3709
feat(connections): support TLS-aware SSH DB connections
gtripoli Mar 6, 2026
09169a2
feat(connections): improve context menu and auto-TLS behavior
gtripoli Mar 6, 2026
404e922
fix(connections): stabilize directory identity and save behavior
gtripoli Mar 6, 2026
fd3aca6
feat(connections): track connection stats and allow empty DB password
gtripoli Mar 6, 2026
2b2a8ee
chore(docs,ci): align roadmap/status and streamline CI lanes
gtripoli Mar 7, 2026
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
294 changes: 261 additions & 33 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,42 +1,270 @@
name: CI

permissions:
contents: write

on:
push:
branches: [ main, master ]
branches:
- "**"
pull_request:
branches: [ main, master ]
branches:
- main

env:
PYTHON_VERSION: "3.14"
PIP_CACHE_DIR: /home/runner/.cache/pip
UV_CACHE_DIR: /home/runner/.cache/uv
WHEEL_CACHE_DIR: /home/runner/.cache/wheels
PIP_FIND_LINKS: /home/runner/.cache/wheels

jobs:
pre-commit:
test:
if: github.event_name == 'pull_request' || (github.event_name == 'push' && github.ref != 'refs/heads/main' && github.ref != 'refs/heads/nightly')
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: latest
enable-cache: true

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Install wx build deps
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential pkg-config gettext \
libgtk-3-dev libglib2.0-dev \
libjpeg-dev libpng-dev libtiff-dev libtiff6 \
libnotify-dev libsm-dev \
libsdl2-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libglu1-mesa-dev freeglut3-dev \
libx11-dev libxext-dev libxinerama-dev libxi-dev libxrandr-dev \
libxss-dev libxtst-dev xvfb

if ! sudo apt-get install -y libwebkit2gtk-4.0-dev; then
sudo apt-get install -y libwebkit2gtk-4.1-dev
fi

- name: Cache pip
uses: actions/cache@v4
with:
path: ${{ env.PIP_CACHE_DIR }}
key: pip-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-${{ hashFiles('**/uv.lock', '**/pyproject.toml') }}
restore-keys: |
pip-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-

- name: Cache wheelhouse
uses: actions/cache@v4
with:
path: ${{ env.WHEEL_CACHE_DIR }}
key: wheel-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-${{ hashFiles('**/uv.lock', '**/pyproject.toml') }}
restore-keys: |
wheel-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-

- name: Initialize venv UV
run: uv venv

- name: Export requirements from uv.lock (include dev extra)
run: uv export --format requirements-txt --locked --no-hashes --extra dev -o requirements.lock.txt

- name: Check wheelhouse status
id: wheelhouse_check
run: |
mkdir -p "${WHEEL_CACHE_DIR}"

if ls "${WHEEL_CACHE_DIR}"/wxPython*.whl >/dev/null 2>&1; then
echo "wxPython wheel found in cache, skipping wheel build"
echo "needs_build=false" >> "$GITHUB_OUTPUT"
else
echo "wxPython wheel missing, wheelhouse build required"
echo "needs_build=true" >> "$GITHUB_OUTPUT"
fi

- name: Build wheelhouse from lock
if: steps.wheelhouse_check.outputs.needs_build == 'true'
run: |
mkdir -p "${WHEEL_CACHE_DIR}"
python -m pip wheel -w "${WHEEL_CACHE_DIR}" -r requirements.lock.txt

- name: Upgrade build tooling
run: uv pip install -U pip setuptools wheel

- name: Install dependencies from wheelhouse (fallback on build)
run: |
if uv sync --extra dev --find-links "${WHEEL_CACHE_DIR}" --no-build; then
echo "Dependencies installed from wheelhouse without builds"
else
echo "Wheel-only install failed, falling back to normal uv sync"
uv sync --extra dev --find-links "${WHEEL_CACHE_DIR}"
fi

- name: Run tests (--all)
run: xvfb-run -a ./scripts/runtest.sh --all

update:
if: github.event_name == 'push' && github.ref == 'refs/heads/nightly'
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: latest
enable-cache: true

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Install wx build deps
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential pkg-config gettext \
libgtk-3-dev libglib2.0-dev \
libjpeg-dev libpng-dev libtiff-dev libtiff6 \
libnotify-dev libsm-dev \
libsdl2-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libglu1-mesa-dev freeglut3-dev \
libx11-dev libxext-dev libxinerama-dev libxi-dev libxrandr-dev \
libxss-dev libxtst-dev xvfb

if ! sudo apt-get install -y libwebkit2gtk-4.0-dev; then
sudo apt-get install -y libwebkit2gtk-4.1-dev
fi

- name: Cache pip
uses: actions/cache@v4
with:
path: ${{ env.PIP_CACHE_DIR }}
key: pip-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-${{ hashFiles('**/uv.lock', '**/pyproject.toml') }}
restore-keys: |
pip-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-

- name: Cache wheelhouse
uses: actions/cache@v4
with:
path: ${{ env.WHEEL_CACHE_DIR }}
key: wheel-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-${{ hashFiles('**/uv.lock', '**/pyproject.toml') }}
restore-keys: |
wheel-${{ runner.os }}-py${{ env.PYTHON_VERSION }}-

- name: Initialize venv UV
run: uv venv

- name: Export requirements from uv.lock (include dev extra)
run: uv export --format requirements-txt --locked --no-hashes --extra dev -o requirements.lock.txt

- name: Check wheelhouse status
id: wheelhouse_check
run: |
mkdir -p "${WHEEL_CACHE_DIR}"

if ls "${WHEEL_CACHE_DIR}"/wxPython*.whl >/dev/null 2>&1; then
echo "wxPython wheel found in cache, skipping wheel build"
echo "needs_build=false" >> "$GITHUB_OUTPUT"
else
echo "wxPython wheel missing, wheelhouse build required"
echo "needs_build=true" >> "$GITHUB_OUTPUT"
fi

- name: Build wheelhouse from lock
if: steps.wheelhouse_check.outputs.needs_build == 'true'
run: |
mkdir -p "${WHEEL_CACHE_DIR}"
python -m pip wheel -w "${WHEEL_CACHE_DIR}" -r requirements.lock.txt

- name: Upgrade build tooling
run: uv pip install -U pip setuptools wheel

- name: Install dependencies from wheelhouse (fallback on build)
run: |
if uv sync --extra dev --find-links "${WHEEL_CACHE_DIR}" --no-build; then
echo "Dependencies installed from wheelhouse without builds"
else
echo "Wheel-only install failed, falling back to normal uv sync"
uv sync --extra dev --find-links "${WHEEL_CACHE_DIR}"
fi

- name: Run tests and update README (--update)
run: xvfb-run -a ./scripts/runtest.sh --update

- name: Commit and push updated README
run: |
git config --global user.name "github-actions"
git config --global user.email "github-actions@github.com"

git add README.md

if git diff --cached --quiet; then
echo "No README changes to commit"
else
git commit -m "chore: update badges [skip ci]"
git push
fi

- name: Build (placeholder)
run: echo "Build scripts are not ready yet."

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
container: ubuntu:22.04


steps:
- uses: actions/checkout@v4

- name: Install system dependencies
run: |
apt-get update
apt-get install -y python3 python3-pip curl pkg-config git pkg-config libgtk-3-dev libwebkit2gtk-4.0-dev nodejs npm

- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH
echo "$HOME/.cargo/bin" >> $GITHUB_PATH

- name: Set up cache
uses: actions/cache@v3
with:
path: ~/.cache/uv
key: ${{ runner.os }}-uv-${{ hashFiles('**/uv.lock') }}
restore-keys: |
${{ runner.os }}-uv-

- name: Install dependencies
run: |
uv sync --dev

- name: Run pre-commit
run: |
uv run pre-commit run --all-files
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Build (placeholder)
run: echo "Build scripts are not ready yet."

- name: Read version from pyproject.toml
id: version
run: |
version=$(python -c "import tomllib; from pathlib import Path; data = tomllib.loads(Path('pyproject.toml').read_text()); project = data.get('project', {}); version = project.get('version', '').strip(); print(version) if version else (_ for _ in ()).throw(SystemExit('Missing project.version in pyproject.toml'))")
echo "version=${version}" >> "$GITHUB_OUTPUT"

- name: Create and push tag
env:
VERSION: ${{ steps.version.outputs.version }}
run: |
tag="v${VERSION}"

if git rev-parse "$tag" >/dev/null 2>&1; then
echo "Tag $tag already exists"
else
git tag "$tag"
git push origin "$tag"
fi

- name: Create published release with autogenerated notes
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ steps.version.outputs.version }}
run: |
tag="v${VERSION}"

if gh release view "$tag" >/dev/null 2>&1; then
echo "Release $tag already exists"
else
gh release create "$tag" --generate-notes --title "$tag"
fi
14 changes: 13 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,16 @@ __pycache__/
*.swp
*.log
*.yml
.coverage
.coverage
# Backup files
*.bak
*.bkp
*.backup

# Unready assets
petersql_hat.xcf
petersql_hat.png
PeterSQL.png

# Unready build scripts
scripts/build/nix/
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ repos:
hooks:
- id: runtest
name: run tests and update badges
entry: bash ./scripts/runtest.sh
entry: bash ./scripts/runtest-local.sh
language: system
pass_filenames: false
always_run: true
Loading
Loading