frontier-runner 0.2.2__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/CHANGELOG.md +14 -0
- {frontier_runner-0.2.2/frontier_runner.egg-info → frontier_runner-0.2.4}/PKG-INFO +35 -9
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/README.md +34 -8
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/__init__.py +1 -1
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cli.py +315 -56
- frontier_runner-0.2.4/frontier/context.py +664 -0
- frontier_runner-0.2.4/frontier/credentials.py +608 -0
- frontier_runner-0.2.4/frontier/identity.py +137 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/commands.py +145 -28
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/constants.py +1 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/doctor.py +135 -11
- frontier_runner-0.2.4/frontier/onboard/profile_commands.py +403 -0
- frontier_runner-0.2.4/frontier/onboard/project_commands.py +310 -0
- frontier_runner-0.2.4/frontier/onboard/saas.py +594 -0
- frontier_runner-0.2.4/frontier/onboard/user_auth.py +182 -0
- frontier_runner-0.2.4/frontier/profiles.py +319 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/warehouse.py +5 -1
- {frontier_runner-0.2.2 → frontier_runner-0.2.4/frontier_runner.egg-info}/PKG-INFO +35 -9
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/SOURCES.txt +6 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/pyproject.toml +1 -1
- frontier_runner-0.2.2/frontier/credentials.py +0 -239
- frontier_runner-0.2.2/frontier/onboard/saas.py +0 -272
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/LICENSE +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/MANIFEST.in +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/__main__.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/__init__.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/base.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/bigquery.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/databricks.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/postgres.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/redshift.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/snowflake.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/api.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/artifacts.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/__init__.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/config.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/consume.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/normalize.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/prove.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/route.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/store.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/streams.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/upload.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/certification.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/comment.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/compare.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/config.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/dbt_artifacts.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/environment.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/errors.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/execute.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/filter_v1.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/frontier.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/github.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/hashing.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/impact.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/local_config.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/mutation.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/__init__.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/demo.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/detect.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/discover.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/github.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/gitignore.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/hashkey.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/permissions.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/prompt.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/routes.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/versions.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/progress.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/proof.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/repair.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/semantic.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/snapshot.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/snowflake.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/snowflake_sql.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/sql_fingerprint.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/validation.py +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/dependency_links.txt +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/entry_points.txt +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/requires.txt +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/top_level.txt +0 -0
- {frontier_runner-0.2.2 → frontier_runner-0.2.4}/setup.cfg +0 -0
|
@@ -5,6 +5,18 @@ All notable changes to frontier-runner are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.2.4] — 2026-09-27
|
|
11
|
+
|
|
12
|
+
- CLI browser login (`frontier login`) uses a PKCE device-code flow and stores a short-lived user token separately from project API keys.
|
|
13
|
+
- `frontier project create` / `frontier profile create --create-project` create a SaaS project with user authorization, issue a project key, and bind a named Frontier profile without printing the key.
|
|
14
|
+
|
|
15
|
+
## [0.2.3] — 2026-09-27
|
|
16
|
+
|
|
17
|
+
- Named Frontier profiles: local execution contexts that bind a SaaS project credential, API origin, optional dbt target, and optional profiles.yml path without replacing `dbt_project.yml` `profile:`.
|
|
18
|
+
- Named-profile identity uses immutable SaaS organization and project IDs from `whoami`. Names are display-only. Cross-project upload and ingest compare IDs, not names.
|
|
19
|
+
|
|
8
20
|
## [0.2.2] — 2026-09-22
|
|
9
21
|
|
|
10
22
|
- Disposable repair validation is the authoritative repaired-vs-head check. The unchanged materialized mart versus head comparison is an expected pre-repair difference and no longer fails the run.
|
|
@@ -100,6 +112,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
100
112
|
- SaaS commands resolve stored keychain credentials through one shared
|
|
101
113
|
resolver instead of requiring `FRONTIER_API_KEY` in the environment.
|
|
102
114
|
|
|
115
|
+
[0.2.4]: https://github.com/jadsamara/frontier-runner/compare/v0.2.3...v0.2.4
|
|
116
|
+
[0.2.3]: https://github.com/jadsamara/frontier-runner/compare/v0.2.2...v0.2.3
|
|
103
117
|
[0.2.2]: https://github.com/jadsamara/frontier-runner/compare/v0.2.1...v0.2.2
|
|
104
118
|
[0.2.1]: https://github.com/jadsamara/frontier-runner/compare/v0.2.0...v0.2.1
|
|
105
119
|
[0.2.0]: https://github.com/jadsamara/frontier-runner/compare/v0.1.3...v0.2.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frontier-runner
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Customer-side Frontier CLI for dbt + Snowflake or BigQuery + GitHub impact assessments.
|
|
5
5
|
Author: Frontier
|
|
6
6
|
License: MIT License
|
|
@@ -92,7 +92,7 @@ Until the package is on PyPI, install the GitHub Release wheel for a version
|
|
|
92
92
|
tag. You do not need a commit SHA:
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
|
-
pipx install \ "frontier-runner[snowflake] @ https://github.com/jadsamara/frontier-runner/releases/download/v0.2.
|
|
95
|
+
pipx install \ "frontier-runner[snowflake] @ https://github.com/jadsamara/frontier-runner/releases/download/v0.2.4/frontier_runner-0.2.4-py3-none-any.whl"
|
|
96
96
|
pipx inject frontier-runner "snowflake-connector-python>=3.12,<4"
|
|
97
97
|
```
|
|
98
98
|
|
|
@@ -119,6 +119,31 @@ API keys are stored in the OS keychain (or `~/.config/frontier/credentials`
|
|
|
119
119
|
mode 0600). They are never written to `frontier.yml`, `dbt_project.yml`,
|
|
120
120
|
`profiles.yml`, Git, or generated workflows.
|
|
121
121
|
|
|
122
|
+
## Frontier profiles
|
|
123
|
+
|
|
124
|
+
A **Frontier profile** is a local named execution context. It selects one
|
|
125
|
+
Frontier SaaS project credential and may default the dbt target and
|
|
126
|
+
`profiles.yml` path. It does **not** replace the dbt `profile:` in
|
|
127
|
+
`dbt_project.yml`. A **dbt target** is an output such as `dev`, `ci`, or
|
|
128
|
+
`benchmark`.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
frontier profile create repair --target dev --api-key
|
|
132
|
+
frontier profile create benchmark --target benchmark --api-key
|
|
133
|
+
frontier profile use benchmark
|
|
134
|
+
frontier auth status
|
|
135
|
+
frontier doctor
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`--api-key` prompts securely; never pass the raw key as an argument.
|
|
139
|
+
Selection is gitignored in `.frontier/state.yml` and is local to this
|
|
140
|
+
repository. GitHub Actions ignores that file unless `FRONTIER_PROFILE` or
|
|
141
|
+
`--profile` is set; CI continues to use `FRONTIER_API_KEY` /
|
|
142
|
+
`FRONTIER_API_URL` repository secrets. `frontier upload` refuses a run
|
|
143
|
+
generated for another origin, organization, project, dbt project, target, or
|
|
144
|
+
semantic manifest (`ARTIFACT_PROFILE_MISMATCH`). Legacy login without a
|
|
145
|
+
named profile is unchanged.
|
|
146
|
+
|
|
122
147
|
## Developer setup
|
|
123
148
|
|
|
124
149
|
From this repository:
|
|
@@ -200,11 +225,12 @@ assessment.
|
|
|
200
225
|
|
|
201
226
|
`frontier upload` posts `target/frontier-run.json` to `POST /api/v1/runs`. It
|
|
202
227
|
retries HTTP 429/5xx and network errors, and honors `Retry-After`. SaaS
|
|
203
|
-
commands resolve credentials in this order: `FRONTIER_API_KEY`, the
|
|
204
|
-
keychain, the `0600` fallback file, then
|
|
205
|
-
`FRONTIER_ALLOW_LOCAL_MANIFEST` is set
|
|
206
|
-
present, the CLI exits with
|
|
207
|
-
Hashed uploads set
|
|
228
|
+
commands resolve credentials in this order: `FRONTIER_API_KEY`, the selected
|
|
229
|
+
Frontier profile credential, the OS keychain, the `0600` fallback file, then
|
|
230
|
+
`FRONTIER_DEMO_API_KEY` only when `FRONTIER_ALLOW_LOCAL_MANIFEST` is set
|
|
231
|
+
outside GitHub Actions. If none are present, the CLI exits with
|
|
232
|
+
`AUTH_REQUIRED: Run \`frontier login --api-key\``. Hashed uploads set
|
|
233
|
+
`entityIdsHashed: true`.
|
|
208
234
|
|
|
209
235
|
In GitHub Actions, assessments use `{project}-{GITHUB_SHA}` as `externalRunId`
|
|
210
236
|
and record repository, branch, commit, and PR number. After a successful
|
|
@@ -222,9 +248,9 @@ workflow uses `FRONTIER_BLOCKING=false` unless you pass `--blocking`.
|
|
|
222
248
|
Pin an immutable released version:
|
|
223
249
|
|
|
224
250
|
```bash
|
|
225
|
-
pip install "frontier-runner[snowflake]==0.2.
|
|
251
|
+
pip install "frontier-runner[snowflake]==0.2.4"
|
|
226
252
|
# or
|
|
227
|
-
pip install "frontier-runner[bigquery]==0.2.
|
|
253
|
+
pip install "frontier-runner[bigquery]==0.2.4"
|
|
228
254
|
```
|
|
229
255
|
|
|
230
256
|
Until PyPI trusted publishing is reviewed and live, install the GitHub Release
|
|
@@ -34,7 +34,7 @@ Until the package is on PyPI, install the GitHub Release wheel for a version
|
|
|
34
34
|
tag. You do not need a commit SHA:
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
pipx install \ "frontier-runner[snowflake] @ https://github.com/jadsamara/frontier-runner/releases/download/v0.2.
|
|
37
|
+
pipx install \ "frontier-runner[snowflake] @ https://github.com/jadsamara/frontier-runner/releases/download/v0.2.4/frontier_runner-0.2.4-py3-none-any.whl"
|
|
38
38
|
pipx inject frontier-runner "snowflake-connector-python>=3.12,<4"
|
|
39
39
|
```
|
|
40
40
|
|
|
@@ -61,6 +61,31 @@ API keys are stored in the OS keychain (or `~/.config/frontier/credentials`
|
|
|
61
61
|
mode 0600). They are never written to `frontier.yml`, `dbt_project.yml`,
|
|
62
62
|
`profiles.yml`, Git, or generated workflows.
|
|
63
63
|
|
|
64
|
+
## Frontier profiles
|
|
65
|
+
|
|
66
|
+
A **Frontier profile** is a local named execution context. It selects one
|
|
67
|
+
Frontier SaaS project credential and may default the dbt target and
|
|
68
|
+
`profiles.yml` path. It does **not** replace the dbt `profile:` in
|
|
69
|
+
`dbt_project.yml`. A **dbt target** is an output such as `dev`, `ci`, or
|
|
70
|
+
`benchmark`.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
frontier profile create repair --target dev --api-key
|
|
74
|
+
frontier profile create benchmark --target benchmark --api-key
|
|
75
|
+
frontier profile use benchmark
|
|
76
|
+
frontier auth status
|
|
77
|
+
frontier doctor
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`--api-key` prompts securely; never pass the raw key as an argument.
|
|
81
|
+
Selection is gitignored in `.frontier/state.yml` and is local to this
|
|
82
|
+
repository. GitHub Actions ignores that file unless `FRONTIER_PROFILE` or
|
|
83
|
+
`--profile` is set; CI continues to use `FRONTIER_API_KEY` /
|
|
84
|
+
`FRONTIER_API_URL` repository secrets. `frontier upload` refuses a run
|
|
85
|
+
generated for another origin, organization, project, dbt project, target, or
|
|
86
|
+
semantic manifest (`ARTIFACT_PROFILE_MISMATCH`). Legacy login without a
|
|
87
|
+
named profile is unchanged.
|
|
88
|
+
|
|
64
89
|
## Developer setup
|
|
65
90
|
|
|
66
91
|
From this repository:
|
|
@@ -142,11 +167,12 @@ assessment.
|
|
|
142
167
|
|
|
143
168
|
`frontier upload` posts `target/frontier-run.json` to `POST /api/v1/runs`. It
|
|
144
169
|
retries HTTP 429/5xx and network errors, and honors `Retry-After`. SaaS
|
|
145
|
-
commands resolve credentials in this order: `FRONTIER_API_KEY`, the
|
|
146
|
-
keychain, the `0600` fallback file, then
|
|
147
|
-
`FRONTIER_ALLOW_LOCAL_MANIFEST` is set
|
|
148
|
-
present, the CLI exits with
|
|
149
|
-
Hashed uploads set
|
|
170
|
+
commands resolve credentials in this order: `FRONTIER_API_KEY`, the selected
|
|
171
|
+
Frontier profile credential, the OS keychain, the `0600` fallback file, then
|
|
172
|
+
`FRONTIER_DEMO_API_KEY` only when `FRONTIER_ALLOW_LOCAL_MANIFEST` is set
|
|
173
|
+
outside GitHub Actions. If none are present, the CLI exits with
|
|
174
|
+
`AUTH_REQUIRED: Run \`frontier login --api-key\``. Hashed uploads set
|
|
175
|
+
`entityIdsHashed: true`.
|
|
150
176
|
|
|
151
177
|
In GitHub Actions, assessments use `{project}-{GITHUB_SHA}` as `externalRunId`
|
|
152
178
|
and record repository, branch, commit, and PR number. After a successful
|
|
@@ -164,9 +190,9 @@ workflow uses `FRONTIER_BLOCKING=false` unless you pass `--blocking`.
|
|
|
164
190
|
Pin an immutable released version:
|
|
165
191
|
|
|
166
192
|
```bash
|
|
167
|
-
pip install "frontier-runner[snowflake]==0.2.
|
|
193
|
+
pip install "frontier-runner[snowflake]==0.2.4"
|
|
168
194
|
# or
|
|
169
|
-
pip install "frontier-runner[bigquery]==0.2.
|
|
195
|
+
pip install "frontier-runner[bigquery]==0.2.4"
|
|
170
196
|
```
|
|
171
197
|
|
|
172
198
|
Until PyPI trusted publishing is reviewed and live, install the GitHub Release
|