Skip to content

Commit e79c7a9

Browse files
authored
Prepare the v0.2.0 release: version bump, CHANGELOG, tag-triggered release CI (#3)
Bump 0.1.0 → 0.2.0 across resource.rc / kAppVersion / AppxManifest / NSIS / WinGet manifests; add CHANGELOG.md (0.2.0 + 0.1.0 baseline); add a release workflow that builds liney-win-setup.exe + the portable zip on a v* tag and publishes them as a GitHub release, guarded by a tag↔resource.rc version check; document release steps in CONTRIBUTING.
1 parent d099385 commit e79c7a9

12 files changed

Lines changed: 171 additions & 18 deletions

.github/workflows/release.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: Release
2+
3+
# Pushing a version tag (v0.2.0, …) builds the Windows binaries, packages the
4+
# NSIS installer + portable zip, and publishes them as a GitHub release. The
5+
# tag must match the version in res\resource.rc (which also feeds the
6+
# installer), so a mismatched bump fails fast instead of shipping wrong
7+
# metadata.
8+
9+
on:
10+
push:
11+
tags: ['v*']
12+
13+
permissions:
14+
contents: write
15+
16+
jobs:
17+
release:
18+
runs-on: windows-latest
19+
steps:
20+
- uses: actions/checkout@v4
21+
22+
- name: Set up MSVC
23+
uses: ilammy/msvc-dev-cmd@v1
24+
25+
- name: Set up Zig 0.15.2
26+
uses: mlugg/setup-zig@v2
27+
with:
28+
version: 0.15.2
29+
30+
- name: Check the tag matches res/resource.rc
31+
shell: pwsh
32+
run: |
33+
$rc = Get-Content res\resource.rc -Raw
34+
if ($rc -notmatch 'FILEVERSION\s+(\d+),(\d+),(\d+)') {
35+
throw 'FILEVERSION not found in res\resource.rc'
36+
}
37+
$ver = "$($matches[1]).$($matches[2]).$($matches[3])"
38+
$tag = '${{ github.ref_name }}'.TrimStart('v')
39+
if ($ver -ne $tag) {
40+
throw "Tag v$tag != resource.rc version $ver. Bump res\resource.rc, src\app\WindowInternal.h and packaging manifests first."
41+
}
42+
43+
- name: Ensure NSIS
44+
shell: pwsh
45+
run: |
46+
if (-not (Get-Command makensis -ErrorAction SilentlyContinue) -and
47+
-not (Test-Path "$env:ProgramFiles\NSIS\makensis.exe") -and
48+
-not (Test-Path "${env:ProgramFiles(x86)}\NSIS\makensis.exe")) {
49+
choco install nsis -y --no-progress
50+
}
51+
52+
- name: Build installer + portable zip
53+
shell: pwsh
54+
run: powershell -ExecutionPolicy Bypass -File tools\make-installer.ps1
55+
56+
- name: Publish GitHub release
57+
uses: softprops/action-gh-release@v2
58+
with:
59+
name: liney-win ${{ github.ref_name }}
60+
body: |
61+
See [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/main/CHANGELOG.md) for the full list of changes.
62+
63+
| File | Description |
64+
|---|---|
65+
| `liney-win-setup.exe` | Installer — per-user, no admin, Start Menu + uninstall |
66+
| `liney-win-portable.zip` | Portable — unzip and run `liney_win.exe` |
67+
generate_release_notes: true
68+
files: |
69+
dist/liney-win-setup.exe
70+
dist/liney-win-portable.zip

CHANGELOG.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Changelog
2+
3+
All notable changes to liney-win. Versioning follows [SemVer](https://semver.org)
4+
(0.x: minor bumps may change behavior).
5+
6+
## [0.2.0] — 2026-07-07
7+
8+
The "daily-driver terminal" release: everything the VT core already parsed is
9+
now actually rendered and interactive, and selection / find / mouse input moved
10+
into the terminal core (libghostty-vt) so they behave like a real terminal.
11+
12+
### Added
13+
- **Cursor shapes** — DECSCUSR block / bar / underline (vim switches shape per
14+
mode), blinking per terminal modes, hollow block when the pane or window is
15+
unfocused, OSC 12 cursor color.
16+
- **Mouse reporting** — apps that enable tracking (vim `:set mouse=a`, htop,
17+
mc) receive clicks, drags, motion and wheel (SGR + legacy protocols, encoded
18+
by the core). Hold **Shift** to select text locally instead. Requires a
19+
ConPTY that passes mouse-mode requests through (Windows 11 / recent
20+
Windows 10); stays off gracefully otherwise.
21+
- **Find across the whole scrollback**`Ctrl+F`, then `Enter`/`F3` jump
22+
match-to-match up through history (the viewport follows); `Shift+Enter`
23+
walks back down.
24+
- **Font… picker** in the ☰ menu (native dialog, monospace-only); font family
25+
and size persist to `config.json`.
26+
- **`Ctrl+V` pastes** (Windows Terminal convention) alongside the existing
27+
`Ctrl+Shift+V` / `Shift+Insert`.
28+
- **Multi-line paste confirmation** (`multiLinePasteWarning`, default on) so a
29+
stray copy can't run commands.
30+
- **Mouse wheel in alternate-screen apps** — vim / less / `git log` scroll
31+
under the wheel (arrow keys are synthesized when no mouse tracking is on).
32+
- `CHANGELOG.md` and a tag-triggered release workflow that builds and publishes
33+
the installer + portable zip.
34+
35+
### Fixed
36+
- **SGR text attributes render** — bold / italic / faint / inverse / invisible
37+
/ strikethrough / underline were parsed but never drawn (the snapshot didn't
38+
read style state). `ls --color`, git diff, prompts and vim statuslines now
39+
look right.
40+
- **Wide (CJK) glyphs are no longer cut in half** — two-pass grid drawing gives
41+
double-width glyphs both columns; copied text and find no longer see phantom
42+
spaces between CJK characters; double-click word selection is CJK-aware.
43+
- **Selection stays anchored to its text** — moved to the core's
44+
buffer-anchored selection, so the highlight no longer drifts when output
45+
streams in or you scroll; soft-wrapped lines copy as one logical line;
46+
select-all covers the scrollback.
47+
- **The `theme.palette` config is applied** — the 16 ANSI colors (plus the
48+
256-color cube/grayscale) now reach the terminal core; it was documented but
49+
unwired.
50+
- **Arrow keys honor DECCKM** (application cursor keys) and bracketed paste is
51+
queried from terminal state instead of scanning the output stream.
52+
53+
### Changed
54+
- **Glyph atlas rendering** — each unique glyph is rasterized once and drawn
55+
as a tinted opacity mask, instead of re-shaping every cell every frame.
56+
- Find semantics: `Enter`/`F3` = older (upward), `Shift+Enter` = newer, and the
57+
search covers history instead of paging blindly.
58+
- `Ctrl+Shift+A` selects the entire buffer (was: visible screen only).
59+
60+
## [0.1.0]
61+
62+
Initial release: libghostty-vt terminal core (scrollback, reflow, alt-screen,
63+
IME), tabs + binary splits, repository/worktree sidebar with per-project icons,
64+
files panel following the shell cwd, SSH/agent sessions, layout persistence,
65+
theme + config in `%USERPROFILE%\.liney`, notifications (`liney` CLI, OSC
66+
9/777), lifecycle hooks, keep-awake, auto-update, NSIS installer + portable
67+
zip + MSIX/WinGet scaffolding.
68+
69+
[0.2.0]: https://github.com/everettjf/liney-win/releases/tag/v0.2.0
70+
[0.1.0]: https://github.com/everettjf/liney-win/releases/tag/v0.1.0

CONTRIBUTING.md

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,23 @@ powershell -ExecutionPolicy Bypass -File tools\make-installer.ps1 # NSIS setup
8787

8888
Both accept `-BuildDir <dir>` to package from an existing build.
8989

90+
## Releasing
91+
92+
1. Bump the version in `res\resource.rc` (FILEVERSION/PRODUCTVERSION + the two
93+
string values), `src\app\WindowInternal.h` (`kAppVersion`),
94+
`packaging\AppxManifest.xml`, `packaging\liney-win.nsi` (default), and the
95+
`packaging\winget\*.yaml` manifests — all should agree.
96+
2. Add a section to `CHANGELOG.md`.
97+
3. Merge, then tag: `git tag v0.x.0 && git push origin v0.x.0`.
98+
4. The `Release` workflow builds `liney-win-setup.exe` + `liney-win-portable.zip`
99+
and publishes the GitHub release (it fails if the tag doesn't match
100+
`resource.rc`).
101+
90102
## Style & PRs
91103

92104
- Plain **C++20 + Win32 + Direct2D**, no third-party runtime deps beyond
93105
libghostty-vt. Match the surrounding style; keep files small and cohesive.
94106
- Build and smoke-test before opening a PR.
95-
- Known gaps worth picking up: desktop notifications (OSC 9/777) and bracketed
96-
paste need re-wiring through Ghostty's OSC parser for the libghostty core. See
97-
[`ROADMAP.md`](ROADMAP.md).
107+
- Known gaps worth picking up: desktop notifications (OSC 9/777) need re-wiring
108+
through Ghostty's OSC parser for the libghostty core; SFTP file tree and
109+
tmux control-mode are open. See [`ROADMAP.md`](ROADMAP.md).

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,10 @@ Source map in [`src/`](src). Design / research notes: [`RESEARCH.md`](RESEARCH.m
212212
## 🗺️ Roadmap
213213

214214
Done & remaining items (with a macOS-liney comparison) live in
215-
[`ROADMAP.md`](ROADMAP.md). Still pending: SFTP remote file tree, native tmux
216-
control-mode, a D3D11 shader-based renderer. (Mouse reporting needs a ConPTY
217-
that passes mouse-mode requests through — Windows 11 / recent Windows 10.)
215+
[`ROADMAP.md`](ROADMAP.md); per-release changes in [`CHANGELOG.md`](CHANGELOG.md).
216+
Still pending: SFTP remote file tree, native tmux control-mode, a D3D11
217+
shader-based renderer. (Mouse reporting needs a ConPTY that passes mouse-mode
218+
requests through — Windows 11 / recent Windows 10.)
218219

219220
## 🤝 Contributing
220221

packaging/AppxManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<Identity Name="everettjf.liney-win"
1414
Publisher="CN=liney-win"
15-
Version="0.1.0.0"
15+
Version="0.2.0.0"
1616
ProcessorArchitecture="x64" />
1717

1818
<Properties>

packaging/liney-win.nsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
Unicode true
1313
!ifndef APPVERSION
14-
!define APPVERSION "0.1.0"
14+
!define APPVERSION "0.2.0"
1515
!endif
1616
!ifndef OUTFILE
1717
!define OUTFILE "liney-win-Setup.exe"

packaging/winget/everettjf.liney-win.installer.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# submit to https://github.com/microsoft/winget-pkgs. Pairs with the .locale and
33
# version manifests of the same PackageIdentifier/PackageVersion.
44
PackageIdentifier: everettjf.liney-win
5-
PackageVersion: 0.1.0
5+
PackageVersion: 0.2.0
66
InstallerType: zip
77
NestedInstallerType: portable
88
NestedInstallerFiles:
@@ -12,7 +12,7 @@ NestedInstallerFiles:
1212
PortableCommandAlias: liney
1313
Installers:
1414
- Architecture: x64
15-
InstallerUrl: https://github.com/everettjf/liney-win/releases/download/v0.1.0/liney-win-portable.zip
15+
InstallerUrl: https://github.com/everettjf/liney-win/releases/download/v0.2.0/liney-win-portable.zip
1616
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
1717
ManifestType: installer
1818
ManifestVersion: 1.6.0

packaging/winget/everettjf.liney-win.locale.en-US.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# WinGet default-locale manifest (template).
22
PackageIdentifier: everettjf.liney-win
3-
PackageVersion: 0.1.0
3+
PackageVersion: 0.2.0
44
PackageLocale: en-US
55
Publisher: everettjf
66
PackageName: liney-win
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# WinGet version manifest (template).
22
PackageIdentifier: everettjf.liney-win
3-
PackageVersion: 0.1.0
3+
PackageVersion: 0.2.0
44
DefaultLocale: en-US
55
ManifestType: version
66
ManifestVersion: 1.6.0

res/resource.rc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
1 ICON "liney.ico"
66

77
VS_VERSION_INFO VERSIONINFO
8-
FILEVERSION 0,1,0,0
9-
PRODUCTVERSION 0,1,0,0
8+
FILEVERSION 0,2,0,0
9+
PRODUCTVERSION 0,2,0,0
1010
FILEFLAGSMASK 0x3fL
1111
FILEFLAGS 0x0L
1212
FILEOS 0x40004L
@@ -19,12 +19,12 @@ BEGIN
1919
BEGIN
2020
VALUE "CompanyName", "everettjf"
2121
VALUE "FileDescription", "liney-win terminal workspace"
22-
VALUE "FileVersion", "0.1.0.0"
22+
VALUE "FileVersion", "0.2.0.0"
2323
VALUE "InternalName", "liney_win"
2424
VALUE "LegalCopyright", "Apache-2.0 License"
2525
VALUE "OriginalFilename", "liney_win.exe"
2626
VALUE "ProductName", "liney-win"
27-
VALUE "ProductVersion", "0.1.0.0"
27+
VALUE "ProductVersion", "0.2.0.0"
2828
END
2929
END
3030
BLOCK "VarFileInfo"

0 commit comments

Comments
 (0)