Skip to content

Commit 8a1484a

Browse files
committed
feat: add GitHub Actions workflows for deploying to GitHub Pages and releasing Windows installer
1 parent 5c27a5d commit 8a1484a

4 files changed

Lines changed: 611 additions & 7 deletions

File tree

.github/workflows/pages.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Deploy GitHub Pages
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
paths:
8+
- "docs/**"
9+
- ".github/workflows/pages.yml"
10+
11+
permissions:
12+
contents: read
13+
pages: write
14+
id-token: write
15+
16+
concurrency:
17+
group: "pages"
18+
cancel-in-progress: true
19+
20+
jobs:
21+
deploy:
22+
runs-on: ubuntu-latest
23+
environment:
24+
name: github-pages
25+
url: ${{ steps.deployment.outputs.page_url }}
26+
steps:
27+
- name: Checkout
28+
uses: actions/checkout@v4
29+
30+
- name: Setup Pages
31+
uses: actions/configure-pages@v5
32+
33+
- name: Upload site
34+
uses: actions/upload-pages-artifact@v3
35+
with:
36+
path: docs
37+
38+
- name: Deploy
39+
id: deployment
40+
uses: actions/deploy-pages@v4

.github/workflows/release.yml

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
name: Release Windows exe
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
build-release:
13+
runs-on: windows-latest
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v4
17+
with:
18+
fetch-depth: 0
19+
20+
- name: Setup Node
21+
uses: actions/setup-node@v4
22+
with:
23+
node-version: 20
24+
cache: "npm"
25+
26+
- name: Setup Rust
27+
uses: dtolnay/rust-toolchain@stable
28+
29+
- name: Install dependencies
30+
run: npm ci
31+
32+
- name: Build Windows installer
33+
run: npm run tauri build
34+
35+
- name: Generate release notes
36+
shell: pwsh
37+
run: |
38+
$ErrorActionPreference = "Stop"
39+
git fetch --tags --force
40+
41+
$currentTag = $env:GITHUB_REF_NAME
42+
$tags = git tag --sort=-creatordate
43+
$previousTag = $tags | Where-Object { $_ -ne $currentTag } | Select-Object -First 1
44+
45+
if ($previousTag) {
46+
$range = "$previousTag..$currentTag"
47+
} else {
48+
$range = $currentTag
49+
}
50+
51+
$messages = git log $range --pretty=format:"%s"
52+
53+
function Section([string] $title, [string[]] $items) {
54+
if (-not $items -or $items.Count -eq 0) {
55+
return @()
56+
}
57+
58+
return @("### $title") + ($items | ForEach-Object { "- $_" }) + @("")
59+
}
60+
61+
$features = $messages | Where-Object { $_ -match '^(feat|feature)(\(.+\))?:' }
62+
$fixes = $messages | Where-Object { $_ -match '^fix(\(.+\))?:' }
63+
$performance = $messages | Where-Object { $_ -match '^perf(\(.+\))?:' }
64+
$docs = $messages | Where-Object { $_ -match '^docs(\(.+\))?:' }
65+
$other = $messages | Where-Object { $_ -notmatch '^(feat|feature|fix|perf|docs)(\(.+\))?:' }
66+
67+
$body = @()
68+
$body += "## Release $currentTag"
69+
$body += ""
70+
$body += Section "Features" $features
71+
$body += Section "Fixes" $fixes
72+
$body += Section "Performance" $performance
73+
$body += Section "Docs" $docs
74+
$body += Section "Other" $other
75+
$body += "### Assets"
76+
$body += "- Windows installer: `ClipStack_*_x64-setup.exe`"
77+
78+
$body | Set-Content -Path release-notes.md -Encoding utf8
79+
80+
- name: Publish release
81+
uses: softprops/action-gh-release@v2
82+
with:
83+
body_path: release-notes.md
84+
files: |
85+
src-tauri/target/release/bundle/nsis/*.exe

README.md

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ It gives you searchable clipboard history, pinning, cleanup controls, and quick
66
## Features
77

88
- Global shortcut overlay (`Ctrl` + `Shift` + `V`)
9-
- Clipboard history capture with local SQLite storage
10-
- Instant search across copied text
11-
- Pin / unpin important items
12-
- Delete entries and clear unpinned history
13-
- Optional launch on Windows login
14-
- Optional paste-on-select into the active app
15-
- Compact, minimal overlay UI for quick use
9+
- Clipboard history for text and images with local SQLite storage
10+
- Fuzzy search with grouping (Pinned, Today, Earlier) and duplicate counts
11+
- Content type chips with inline previews (URLs, email, file paths, code, images)
12+
- Pin/unpin, delete, clear unpinned, and export history (JSON/CSV)
13+
- Snippets panel for reusable text
14+
- Tray controls for show/hide, pause capture, and quit
15+
- Overlay remembers position and stays always on top
16+
- Optional launch on Windows login and paste-on-select
1617

1718
## Tech Stack
1819

@@ -71,6 +72,9 @@ Generated installer output (default):
7172
- `Arrow Up / Arrow Down` - Navigate items
7273
- `Enter` - Select item (copy/paste behavior follows settings)
7374
- `Delete` - Delete selected item (when search box is empty)
75+
- `P` - Pin/unpin selected item
76+
- `Ctrl + Shift + P` - Alternate pin/unpin shortcut
77+
- `?` - Toggle shortcut hint bar
7478
- `Esc` - Close overlay
7579

7680
## Settings
@@ -84,6 +88,8 @@ Current in-app settings include:
8488
- Paste selected item into active app
8589
- Close panel after selecting an item
8690
- Open panel when app is launched manually
91+
- Clear unpinned history
92+
- Export history (JSON/CSV)
8793

8894
## Privacy
8995

@@ -99,6 +105,14 @@ ClipStack is local-first:
99105
- Export/import history
100106
- Additional customization and shortcuts
101107

108+
## Website
109+
110+
The static project site lives in `docs/` and is deployed to GitHub Pages via `.github/workflows/pages.yml` when changes are pushed to the `docs/` folder.
111+
112+
## Releases
113+
114+
Windows NSIS installers are built by GitHub Actions on `v*` tags. Release notes are generated from git history with sections for features, fixes, and performance updates.
115+
102116
## License
103117

104118
This project is licensed under the MIT License. See [LICENSE](./LICENSE).

0 commit comments

Comments
 (0)