Skip to content

Commit d68c27f

Browse files
authored
Merge branch feat/desktop/runtime-control
Release NBER-CLI v0.8.0 with the Desktop app and unified release workflow.
2 parents e19871d + e13e20a commit d68c27f

67 files changed

Lines changed: 3800 additions & 2883 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/marketplace.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
33
"name": "nber-cli",
44
"description": "Claude Code marketplace for NBER-CLI research workflows.",
5-
"version": "0.6.0",
5+
"version": "0.8.0",
66
"owner": {
77
"name": "Song Tan",
88
"email": "sepinetam@gmail.com",
@@ -12,7 +12,7 @@
1212
{
1313
"name": "nber-cli",
1414
"description": "Use NBER-CLI to search, inspect, download, and serve NBER working paper workflows.",
15-
"version": "0.6.0",
15+
"version": "0.8.0",
1616
"author": {
1717
"name": "Song Tan",
1818
"email": "sepinetam@gmail.com"

.claude/settings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"permissions": {
33
"allow": [
4+
"Read(~/.nber-cli/*)",
45
"Bash(uv add *)",
56
"Bash(uv run *)",
67
"Bash(uv lock *)",

.github/workflows/desktop.yml

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
- main
88
- master
99
tags:
10-
- "desktop-v*"
10+
- "v*"
1111
workflow_dispatch:
1212

1313
permissions:
@@ -18,22 +18,22 @@ jobs:
1818
runs-on: ubuntu-latest
1919

2020
steps:
21-
- uses: actions/checkout@v4
21+
- uses: actions/checkout@v7
2222

23-
- uses: actions/setup-python@v5
23+
- uses: actions/setup-python@v6
2424
with:
2525
python-version: "3.11"
2626

27-
- uses: astral-sh/setup-uv@v3
27+
- uses: astral-sh/setup-uv@v8.3.2
2828

29-
- uses: actions/setup-node@v4
29+
- uses: actions/setup-node@v6
3030
with:
3131
node-version: "20"
3232
cache: npm
3333
cache-dependency-path: desktop/package-lock.json
3434

3535
- name: Install Python dependencies
36-
run: uv sync --dev
36+
run: uv sync --dev --extra server
3737

3838
- name: Run Python lint
3939
run: uv run ruff check .
@@ -59,7 +59,7 @@ jobs:
5959

6060
build:
6161
needs: check
62-
if: startsWith(github.ref, 'refs/tags/desktop-v') || github.event_name == 'workflow_dispatch'
62+
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
6363
permissions:
6464
contents: write
6565
strategy:
@@ -84,15 +84,15 @@ jobs:
8484
runs-on: ${{ matrix.os }}
8585

8686
steps:
87-
- uses: actions/checkout@v4
87+
- uses: actions/checkout@v7
8888

89-
- uses: actions/setup-python@v5
89+
- uses: actions/setup-python@v6
9090
with:
9191
python-version: "3.11"
9292

93-
- uses: astral-sh/setup-uv@v3
93+
- uses: astral-sh/setup-uv@v8.3.2
9494

95-
- uses: actions/setup-node@v4
95+
- uses: actions/setup-node@v6
9696
with:
9797
node-version: "20"
9898
cache: npm
@@ -103,14 +103,17 @@ jobs:
103103
targets: ${{ matrix.target }}
104104

105105
- name: Install Python dependencies
106-
run: uv sync --dev
106+
run: uv sync --dev --extra server --group desktop-build
107107

108108
- name: Install desktop dependencies
109109
working-directory: desktop
110110
run: npm ci
111111

112+
# Signing is opt-in while the project ships without paid certificates.
113+
# Once certificates are funded, configure the secrets and set
114+
# DESKTOP_REQUIRE_SIGNING=true to restore mandatory signing checks.
112115
- name: Validate macOS release signing secrets
113-
if: startsWith(github.ref, 'refs/tags/desktop-v') && runner.os == 'macOS'
116+
if: startsWith(github.ref, 'refs/tags/v') && runner.os == 'macOS' && vars.DESKTOP_REQUIRE_SIGNING == 'true'
114117
env:
115118
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
116119
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
@@ -122,7 +125,7 @@ jobs:
122125
run: uv run python scripts/validate-desktop-signing.py --platform macos --require-signed
123126

124127
- name: Validate Windows release signing secrets
125-
if: startsWith(github.ref, 'refs/tags/desktop-v') && runner.os == 'Windows'
128+
if: startsWith(github.ref, 'refs/tags/v') && runner.os == 'Windows' && vars.DESKTOP_REQUIRE_SIGNING == 'true'
126129
env:
127130
WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
128131
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
@@ -212,15 +215,15 @@ jobs:
212215
run: uv run python scripts/smoke-desktop-app.py --install-from-package
213216

214217
- name: Check signed and notarized macOS release artifacts
215-
if: startsWith(github.ref, 'refs/tags/desktop-v') && matrix.release-platform == 'macos'
218+
if: startsWith(github.ref, 'refs/tags/v') && matrix.release-platform == 'macos' && vars.DESKTOP_REQUIRE_SIGNING == 'true'
216219
run: uv run python scripts/check-desktop-release.py --platform macos --max-mb 80 --require-signed --require-notarized
217220

218221
- name: Check signed Windows release artifacts
219-
if: startsWith(github.ref, 'refs/tags/desktop-v') && matrix.release-platform == 'windows'
222+
if: startsWith(github.ref, 'refs/tags/v') && matrix.release-platform == 'windows' && vars.DESKTOP_REQUIRE_SIGNING == 'true'
220223
run: uv run python scripts/check-desktop-release.py --platform ${{ matrix.release-platform }} --max-mb 80 --require-signed
221224

222225
- name: Upload desktop artifacts
223-
uses: actions/upload-artifact@v4
226+
uses: actions/upload-artifact@v7
224227
with:
225228
name: ${{ matrix.artifact-name }}
226229
path: |
@@ -230,8 +233,8 @@ jobs:
230233
desktop/src-tauri/target/**/release/bundle/**/*.msi
231234
232235
- name: Upload GitHub Release assets
233-
if: startsWith(github.ref, 'refs/tags/desktop-v')
234-
uses: softprops/action-gh-release@v2
236+
if: startsWith(github.ref, 'refs/tags/v')
237+
uses: softprops/action-gh-release@v3
235238
with:
236239
draft: true
237240
files: |

.github/workflows/docs.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ jobs:
2020

2121
steps:
2222
- name: Checkout code
23-
uses: actions/checkout@v4
23+
uses: actions/checkout@v7
2424

2525
- name: Set up Python
26-
uses: actions/setup-python@v5
26+
uses: actions/setup-python@v6
2727
with:
2828
python-version: "3.11"
2929

3030
- name: Install uv
31-
uses: astral-sh/setup-uv@v3
31+
uses: astral-sh/setup-uv@v8.3.2
3232

3333
- name: Install dependencies
3434
run: uv sync --group docs
@@ -38,7 +38,7 @@ jobs:
3838

3939
- name: Upload Pages artifact
4040
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
41-
uses: actions/upload-pages-artifact@v3
41+
uses: actions/upload-pages-artifact@v5
4242
with:
4343
path: site
4444

@@ -58,4 +58,4 @@ jobs:
5858
steps:
5959
- name: Deploy to GitHub Pages
6060
id: deployment
61-
uses: actions/deploy-pages@v4
61+
uses: actions/deploy-pages@v5

.github/workflows/lint.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ jobs:
1515

1616
steps:
1717
- name: Checkout code
18-
uses: actions/checkout@v4
18+
uses: actions/checkout@v7
1919

2020
- name: Set up Python
21-
uses: actions/setup-python@v5
21+
uses: actions/setup-python@v6
2222
with:
2323
python-version: "3.11"
2424

2525
- name: Install uv
26-
uses: astral-sh/setup-uv@v3
26+
uses: astral-sh/setup-uv@v8.3.2
2727

2828
- name: Install dependencies
2929
run: uv sync --dev

.github/workflows/publish.yml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,20 @@ on:
66

77
jobs:
88
publish:
9+
if: startsWith(github.event.release.tag_name, 'v')
910
runs-on: ubuntu-latest
1011

1112
steps:
1213
- name: Checkout code
13-
uses: actions/checkout@v4
14+
uses: actions/checkout@v7
1415

1516
- name: Set up Python
16-
uses: actions/setup-python@v4
17+
uses: actions/setup-python@v6
1718
with:
1819
python-version: '3.11'
1920

2021
- name: Install uv
21-
uses: astral-sh/setup-uv@v3
22+
uses: astral-sh/setup-uv@v8.3.2
2223

2324
- name: Install dependencies
2425
run: uv sync
@@ -28,5 +29,3 @@ jobs:
2829

2930
- name: Publish to PyPI
3031
run: uv publish --token ${{ secrets.PYPI_TOKEN }}
31-
32-

.github/workflows/pytest.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@ jobs:
1515

1616
steps:
1717
- name: Checkout code
18-
uses: actions/checkout@v4
18+
uses: actions/checkout@v7
1919

2020
- name: Set up Python
21-
uses: actions/setup-python@v5
21+
uses: actions/setup-python@v6
2222
with:
2323
python-version: "3.11"
2424

2525
- name: Install uv
26-
uses: astral-sh/setup-uv@v3
26+
uses: astral-sh/setup-uv@v8.3.2
2727

2828
- name: Install dependencies
29-
run: uv sync --dev
29+
run: uv sync --dev --extra server
3030

3131
- name: Run pytest
3232
run: uv run pytest

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,7 @@ site/
3030

3131
# Files
3232
*.pdf
33+
34+
# uv
35+
.python-version
36+
uv.lock

.python-version

Lines changed: 0 additions & 1 deletion
This file was deleted.

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,23 @@ This file is the canonical release history. The English mirror at `docs/en/chang
66

77
## [Unreleased]
88

9+
## [0.8.0] - 2026-07-13
10+
911
### Added
1012
- Added `nber-cli doctor` to show installed and PyPI versions, executable/package locations, config contents, database path, schema version, size, and last recorded activity. Added `nber-cli doctor --fix-version` to refresh `uvx` caches or upgrade installations detected as `uv tool`, `pipx`, or `pip`.
13+
- Added the optional `server` extra plus the `nber-server` and `nber-sidecar` entry points for a loopback FastAPI service.
14+
- Added a Tauri 2 Desktop app for macOS and Windows with a React research workspace, local feed sync, unread filtering, paper details, settings, and BibTeX/APA/MLA/Harvard/Chicago/GB/T citation copying.
15+
- Added Alembic-managed database migrations and schema v3 with the `read_status` table. Existing v1 and v2 databases upgrade automatically without removing existing records.
16+
- Added cross-platform Desktop build, artifact normalization, package validation, smoke-test, signing-validation, and notarization workflows.
17+
18+
### Changed
19+
- Split the HTTP service into the independent `nber_server` package while continuing to reuse the existing `nber_cli` core and SQLite database.
20+
- Kept FastAPI, Uvicorn, and Alembic out of the default CLI installation; local HTTP users install them through `nber-cli[server]`.
21+
- Expanded the English and Chinese architecture, persistence, configuration, getting-started, testing, and Desktop documentation.
22+
23+
### Fixed
24+
- Stabilized Desktop smoke tests on alternate local ports and added checks for bundled sidecars, installer signatures, and macOS notarization.
25+
- Replaced the default Tauri branding and application icons with NBER-CLI Desktop assets.
1126

1227
## [0.7.0] - 2026-07-08
1328

0 commit comments

Comments
 (0)