Skip to content

Commit c318258

Browse files
authored
Merge pull request #64 from hotdata-dev/release/0.1.14
chore: Release hotdata-cli version 0.1.14
2 parents 8546919 + 5439119 commit c318258

28 files changed

Lines changed: 1073 additions & 495 deletions

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
## [0.1.14] - 2026-04-28
2+
3+
### 🚀 Features
4+
5+
- *(auth)* Add CLI auth session support (JWT access tokens, refresh, PKCE login)
6+
- *(indexes)* Workspace-wide list with filters and parallel fetch
7+
8+
### 💼 Other
9+
10+
- *(codecov)* Treat patch coverage as informational
11+
12+
### 🧪 Testing
13+
14+
- Raise coverage for indexes list and get_none_if_not_found
115
## [0.1.13] - 2026-04-24
216

317
### 🚀 Features

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "hotdata-cli"
3-
version = "0.1.13"
3+
version = "0.1.14"
44
edition = "2024"
55
repository = "https://github.com/hotdata-dev/hotdata-cli"
66
description = "CLI tool for Hotdata.dev"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<br>
66
Command line interface for <a href="https://www.hotdata.dev">Hotdata</a>.
77
<br><br>
8-
<img src="https://img.shields.io/badge/version-0.1.13-blue" alt="version">
8+
<img src="https://img.shields.io/badge/version-0.1.14-blue" alt="version">
99
<a href="https://github.com/hotdata-dev/hotdata-cli/actions/workflows/ci.yml"><img src="https://github.com/hotdata-dev/hotdata-cli/actions/workflows/ci.yml/badge.svg" alt="build"></a>
1010
<a href="https://codecov.io/gh/hotdata-dev/hotdata-cli"><img src="https://codecov.io/gh/hotdata-dev/hotdata-cli/branch/main/graph/badge.svg" alt="coverage"></a>
1111
</p>

codecov.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# https://docs.codecov.com/docs/codecovyaml
2+
coverage:
3+
status:
4+
patch:
5+
default:
6+
# Patch % only measures lines touched in the PR. Release/version
7+
# bumps, rustfmt, and refactors often edit large surface areas
8+
# without new tests; do not fail CI on patch coverage alone.
9+
informational: true

skills/hotdata/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: hotdata
33
description: Use this skill when the user wants to run hotdata CLI commands, query the Hotdata API, list workspaces, list connections, create connections, list tables, manage datasets, execute SQL queries, inspect query run history, search tables, manage indexes, manage sandboxes, manage workspace context and stored docs such as context:DATAMODEL via the context API (`hotdata context`), or interact with the hotdata service. Activate when the user says "run hotdata", "query hotdata", "list workspaces", "list connections", "create a connection", "list tables", "list datasets", "create a dataset", "upload a dataset", "execute a query", "search a table", "list indexes", "create an index", "list query runs", "list past queries", "query history", "list sandboxes", "create a sandbox", "run a sandbox", "workspace context", "pull context", "push context", "data model", "context:DATAMODEL", or asks you to use the hotdata CLI.
4-
version: 0.1.13
4+
version: 0.1.14
55
---
66

77
# Hotdata CLI Skill

src/api.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,10 @@ fn format_fail_message(
236236
body: &str,
237237
auth_status: Option<&auth::AuthStatus>,
238238
) -> String {
239-
if status.is_client_error() {
240-
if let Some(auth::AuthStatus::Invalid(_)) = auth_status {
241-
return "error: API key is invalid. Run 'hotdata auth login' (or 'hotdata auth') to re-authenticate.".to_string();
242-
}
239+
if status.is_client_error()
240+
&& let Some(auth::AuthStatus::Invalid(_)) = auth_status
241+
{
242+
return "error: API key is invalid. Run 'hotdata auth login' (or 'hotdata auth') to re-authenticate.".to_string();
243243
}
244244
util::api_error(body.to_string())
245245
}

src/auth.rs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -361,8 +361,8 @@ fn generate_code_challenge(verifier: &str) -> String {
361361
}
362362

363363
fn parse_query_params(url: &str) -> HashMap<String, String> {
364-
url.splitn(2, '?')
365-
.nth(1)
364+
url.split_once('?')
365+
.map(|(_, q)| q)
366366
.unwrap_or("")
367367
.split('&')
368368
.filter_map(|pair| {
@@ -372,6 +372,25 @@ fn parse_query_params(url: &str) -> HashMap<String, String> {
372372
.collect()
373373
}
374374

375+
fn print_row(label: &str, value: &str) {
376+
stdout()
377+
.execute(SetForegroundColor(Color::DarkGrey))
378+
.unwrap()
379+
.execute(Print(format!(
380+
"{:<16}",
381+
if label.is_empty() {
382+
String::new()
383+
} else {
384+
format!("{label}:")
385+
}
386+
)))
387+
.unwrap()
388+
.execute(ResetColor)
389+
.unwrap()
390+
.execute(Print(format!("{value}\n")))
391+
.unwrap();
392+
}
393+
375394
#[cfg(test)]
376395
mod tests {
377396
use super::*;
@@ -699,15 +718,3 @@ mod tests {
699718
assert!(result.unwrap_err().contains("no authorization code"));
700719
}
701720
}
702-
703-
fn print_row(label: &str, value: &str) {
704-
stdout()
705-
.execute(SetForegroundColor(Color::DarkGrey))
706-
.unwrap()
707-
.execute(Print(format!("{:<16}", if label.is_empty() { String::new() } else { format!("{label}:") })))
708-
.unwrap()
709-
.execute(ResetColor)
710-
.unwrap()
711-
.execute(Print(format!("{value}\n")))
712-
.unwrap();
713-
}

src/command.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,6 @@ pub enum DatasetsCommands {
386386
},
387387
}
388388

389-
390389
#[derive(Subcommand)]
391390
pub enum WorkspaceCommands {
392391
/// List all workspaces

src/config.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,9 @@ pub struct WorkspaceEntry {
3030
pub name: String,
3131
}
3232

33-
#[derive(Debug, Clone, Serialize)]
33+
#[derive(Debug, Clone, Default, Serialize)]
3434
pub struct AppUrl(pub(crate) Option<String>);
3535

36-
impl Default for AppUrl {
37-
fn default() -> Self {
38-
AppUrl(None)
39-
}
40-
}
41-
4236
impl Deref for AppUrl {
4337
type Target = str;
4438

@@ -67,15 +61,9 @@ pub enum ApiKeySource {
6761
Flag,
6862
}
6963

70-
#[derive(Debug, Clone, Serialize)]
64+
#[derive(Debug, Clone, Default, Serialize)]
7165
pub struct ApiUrl(pub(crate) Option<String>);
7266

73-
impl Default for ApiUrl {
74-
fn default() -> Self {
75-
ApiUrl(None)
76-
}
77-
}
78-
7967
impl Deref for ApiUrl {
8068
type Target = str;
8169

0 commit comments

Comments
 (0)