Skip to content
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
18 changes: 13 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,10 @@ jobs:
python3 tools/release/make_deb.py "$RUNNER_TEMP/stage" "$VERSION" "$out/${base}.deb"
# The licence set once, from Linux, rather than three times under the same name.
cp LICENSE NOTICE UPSTREAM_NOTICES.md "$out/"
# The launcher's catalog icon: the brand PNG (square, 512 px, well under 1 MiB) as one
# more asset, named in redrob-launcher.json by the publish job (launcher_icon below;
# redrob-launcher docs/release-manifest.md).
cp resources/icons/hicolor/512x512/apps/redrob-query.png "$out/redrob-query.png"
;;
esac

Expand Down Expand Up @@ -563,14 +567,15 @@ jobs:
fi
done

# The licence artifacts are unconditional. The checksums and redrob-launcher.json are
# the publish job's: it writes both over this same set of files.
# The licence artifacts and the launcher icon are unconditional. The checksums and
# redrob-launcher.json are the publish job's: it writes both over this same set of files.
for pattern in \
'^LICENSE$' \
'^NOTICE$' \
'^UPSTREAM_NOTICES\.md$'; do
'^UPSTREAM_NOTICES\.md$' \
'^redrob-query\.png$'; do
if ! printf '%s\n' $names | grep -qE "$pattern"; then
echo "::error::no asset matching ${pattern}; the licence texts and notices must accompany every binary"
echo "::error::no asset matching ${pattern}; the licence texts, notices and the launcher icon must accompany every binary"
exit 1
fi
done
Expand All @@ -583,7 +588,8 @@ jobs:
echo "Every built platform asset (${REQUIRED_ARCHIVES}) and the licence files are present."

# The shared redrob-labs publish job: SHA256SUMS.txt over every asset, redrob-launcher.json (this
# app reads the launcher's shared account file directly), and the release v<version> created
# app reads the launcher's shared account file directly; `icon` names redrob-query.png, the
# brand PNG the Linux leg uploaded), and the release v<version> created
# and PUBLISHED as latest (prerelease when the version carries a `-`). Only for a real tag, never
# for a dry run, and only when every job before it succeeded. `tag` and `target` are passed
# explicitly because this workflow is dispatched from a branch: github.sha is the branch head, not
Expand All @@ -600,6 +606,8 @@ jobs:
version: ${{ needs.validate.outputs.version }}
title: Redrob Query
launcher_manifest: true
# The PNG the Linux leg uploaded among release-*: redrob-launcher.json names it as `icon`.
launcher_icon: redrob-query.png
publish: true
tag: ${{ inputs.tag }}
target: ${{ needs.validate.outputs.sha }}
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,36 @@ The release workflow's notes point here, so this file is what a download's notes
follow the `vMAJOR.MINOR.PATCH` tags that trigger a release; while the major is 0 a minor bump is
where behaviour may change.

## 0.4.0 - 2026-10-16

### Changed

- **The window is laid out like Redrob Canvas.** One theme owned by the shell (canvas's Pro
tokens, dark and light grounds, following the system with a Help > Theme override; Inter for the
interface, JetBrains Mono for SQL and grid cells, a system CJK fallback), a thin top bar with File
/ Connection / Query / View / Help menus and a right slot showing the active connection with its
read-only / read-write badge beside the Redrob account, a left panel with the connections tree
(grouped by database, connect-state dots, filter) and the active connection's schema tree
(database > schema > tables > columns with dimmed types, filter; double-click inserts the name;
Select top 100 / Copy name / DDL on right-click), tabbed editors (Ctrl+T, Ctrl+W, Ctrl+1…9; a
tab shows its connection and a dirty dot) with the result area under a splitter as Grid /
Messages / Changes tabs, the Ask dock on the right (Ctrl+Shift+A), and a status line at the
bottom. Every string is in English and Korean (Help > Language).
- **Running.** Ctrl+Enter runs the selection or the statement under the cursor, F5 the whole
text, Esc cancels with a spinner on the status line (`Pending::cancel` in the engine). Errors
go to the Messages tab and the red status line; there is no error dialog.
- **Grid.** Monospace cells, header click sorts, column edges drag, click selects a cell and
Ctrl+C copies it (Ctrl+click several rows, Ctrl+C copies them as TSV), NULL dimmed italic,
long text ellipsized with the full value as a tooltip, row range and page controls at the bottom.
- **Reviewed edits** stage in the grid, count on the Changes tab's badge, and show the exact SQL
the engine will run (bound values beside it) before Apply or Discard.
- **First run** opens on an empty state with one action, New connection; the connection form is
a modal with a Test button and inline error text.
- **View > History** lists past runs; click inserts into the editor, double-click opens a tab.
Help > Shortcuts lists the keys.
- **Release manifest.** `redrob-launcher.json` names the launcher icon `redrob-query.png`,
uploaded as one more release asset.

## 0.3.0 - 2026-10-16

### Changed
Expand Down
8 changes: 4 additions & 4 deletions CONTRIBUTING.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ ruleset은 pull request가 *어느* 브랜치에서 왔는지를 표현할 수

```bash
git switch develop && git pull
git switch -c release/0.3.0
git switch -c release/0.4.0
# Cargo.toml의 버전을 올리고 CHANGELOG 절을 쓰고 게이트를 돌립니다
# develop으로 풀 리퀘스트를 열어 머지하고, develop -> main 풀 리퀘스트(머지 커밋)를 머지한 뒤 main에 태그를 뗍니다:
git switch main && git pull
git tag -a v0.3.0 -m "Redrob Query v0.3.0"
git push origin refs/tags/v0.3.0:refs/tags/v0.3.0
gh workflow run release.yml --ref main -f tag=v0.3.0
git tag -a v0.4.0 -m "Redrob Query v0.4.0"
git push origin refs/tags/v0.4.0:refs/tags/v0.4.0
gh workflow run release.yml --ref main -f tag=v0.4.0
# 그다음 main을 develop으로 다시 머지합니다
```

Expand Down
8 changes: 4 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,14 @@ from `origin/main`, so tagging straight off `develop` fails instead of shipping.

```bash
git switch develop && git pull
git switch -c release/0.3.0
git switch -c release/0.4.0
# bump the version in Cargo.toml, write the CHANGELOG section, run the gate
# open a pull request into develop and merge it; then a pull request develop -> main
# (merge commit) and tag main:
git switch main && git pull
git tag -a v0.3.0 -m "Redrob Query v0.3.0"
git push origin refs/tags/v0.3.0:refs/tags/v0.3.0
gh workflow run release.yml --ref main -f tag=v0.3.0
git tag -a v0.4.0 -m "Redrob Query v0.4.0"
git push origin refs/tags/v0.4.0:refs/tags/v0.4.0
gh workflow run release.yml --ref main -f tag=v0.4.0
# then merge main back into develop
```

Expand Down
14 changes: 12 additions & 2 deletions Cargo.lock

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

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ resolver = "3"
members = ["crates/*", "apps/*"]

[workspace.package]
version = "0.3.0"
version = "0.4.0"
edition = "2024"
license = "GPL-3.0-or-later"
rust-version = "1.95"
Expand Down
10 changes: 10 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,16 @@ under the Apache License 2.0. Its architecture and user workflows informed this
product's design. No DBeaver source code, binaries, plugins, branding, Eclipse
RCP/OSGi components, JDBC drivers, Java, or JVM is distributed here.

## Bundled fonts

Inter, Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter),
and JetBrains Mono, Copyright 2020 The JetBrains Mono Project Authors
(https://github.com/JetBrains/JetBrainsMono), are embedded in the desktop binary
as its interface and code typefaces (apps/redrob-query/assets/fonts). Both are
licensed under the SIL Open Font License, Version 1.1; the licence texts travel
beside the font files (OFL-Inter.txt, OFL-JetBrainsMono.txt). The same files are
what Redrob Canvas draws with, so the two apps share one look.

Third-party components remain subject to their respective licenses.

## Trademarks
Expand Down
1 change: 1 addition & 0 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ cargo test -p redrob-query-core --locked -- --ignored
| `account.json` | 런처의 Connect나 사용자가 써 둔 이 앱 자체의 Redrob 로그인. 공용 파일보다 우선 |
| `workspace.json` | 열린 탭(쿼리 텍스트만)과 실행 이력. 결과 행·비밀번호·프롬프트는 저장하지 않음 |
| `ui.ron` | eframe의 창 위치와 패널 크기 |
| `language.json` | 도움말 > 언어: `auto` 또는 코드(`en`, `ko`) |

디렉터리는 Windows `%APPDATA%\Redrob Query`, macOS `~/Library/Application Support/Redrob Query`, 그 외
`$XDG_CONFIG_HOME/redrob-query`(`~/.config/redrob-query`)이며 `REDROB_QUERY_CONFIG_DIR`로 바꿀 수 있습니다.
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ branch and publishes nothing.
| `account.json` | This app's own Redrob sign-in, if the launcher's Connect or you wrote one; wins over the shared file |
| `workspace.json` | Open tabs (query text only) and the run history; never result rows, passwords or prompts |
| `ui.ron` | eframe's window geometry and panel sizes |
| `language.json` | Help > Language: `auto` or a code (`en`, `ko`) |

Directory: `%APPDATA%\Redrob Query` on Windows, `~/Library/Application Support/Redrob Query` on macOS,
`$XDG_CONFIG_HOME/redrob-query` (`~/.config/redrob-query`) elsewhere; `REDROB_QUERY_CONFIG_DIR`
Expand Down
2 changes: 2 additions & 0 deletions apps/redrob-query/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ env_logger = { workspace = true }
log = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
# The system language on first run (Windows has no LANG); the same pin as redrob-canvas.
sys-locale = "=0.3.2"
tokio = { workspace = true }
uuid = { workspace = true }

Expand Down
Binary file added apps/redrob-query/assets/fonts/Inter-Medium.ttf
Binary file not shown.
Binary file added apps/redrob-query/assets/fonts/Inter-Regular.ttf
Binary file not shown.
Binary file not shown.
Binary file not shown.
92 changes: 92 additions & 0 deletions apps/redrob-query/assets/fonts/OFL-Inter.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL

-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION AND CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Loading
Loading