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.
Files changed (83) hide show
  1. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/CHANGELOG.md +14 -0
  2. {frontier_runner-0.2.2/frontier_runner.egg-info → frontier_runner-0.2.4}/PKG-INFO +35 -9
  3. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/README.md +34 -8
  4. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/__init__.py +1 -1
  5. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cli.py +315 -56
  6. frontier_runner-0.2.4/frontier/context.py +664 -0
  7. frontier_runner-0.2.4/frontier/credentials.py +608 -0
  8. frontier_runner-0.2.4/frontier/identity.py +137 -0
  9. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/commands.py +145 -28
  10. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/constants.py +1 -0
  11. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/doctor.py +135 -11
  12. frontier_runner-0.2.4/frontier/onboard/profile_commands.py +403 -0
  13. frontier_runner-0.2.4/frontier/onboard/project_commands.py +310 -0
  14. frontier_runner-0.2.4/frontier/onboard/saas.py +594 -0
  15. frontier_runner-0.2.4/frontier/onboard/user_auth.py +182 -0
  16. frontier_runner-0.2.4/frontier/profiles.py +319 -0
  17. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/warehouse.py +5 -1
  18. {frontier_runner-0.2.2 → frontier_runner-0.2.4/frontier_runner.egg-info}/PKG-INFO +35 -9
  19. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/SOURCES.txt +6 -0
  20. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/pyproject.toml +1 -1
  21. frontier_runner-0.2.2/frontier/credentials.py +0 -239
  22. frontier_runner-0.2.2/frontier/onboard/saas.py +0 -272
  23. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/LICENSE +0 -0
  24. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/MANIFEST.in +0 -0
  25. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/__main__.py +0 -0
  26. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/__init__.py +0 -0
  27. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/base.py +0 -0
  28. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/bigquery.py +0 -0
  29. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/databricks.py +0 -0
  30. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/postgres.py +0 -0
  31. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/redshift.py +0 -0
  32. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/adapters/snowflake.py +0 -0
  33. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/api.py +0 -0
  34. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/artifacts.py +0 -0
  35. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/__init__.py +0 -0
  36. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/config.py +0 -0
  37. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/consume.py +0 -0
  38. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/normalize.py +0 -0
  39. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/prove.py +0 -0
  40. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/route.py +0 -0
  41. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/store.py +0 -0
  42. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/streams.py +0 -0
  43. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/cdc/upload.py +0 -0
  44. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/certification.py +0 -0
  45. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/comment.py +0 -0
  46. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/compare.py +0 -0
  47. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/config.py +0 -0
  48. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/dbt_artifacts.py +0 -0
  49. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/environment.py +0 -0
  50. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/errors.py +0 -0
  51. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/execute.py +0 -0
  52. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/filter_v1.py +0 -0
  53. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/frontier.py +0 -0
  54. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/github.py +0 -0
  55. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/hashing.py +0 -0
  56. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/impact.py +0 -0
  57. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/local_config.py +0 -0
  58. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/mutation.py +0 -0
  59. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/__init__.py +0 -0
  60. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/demo.py +0 -0
  61. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/detect.py +0 -0
  62. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/discover.py +0 -0
  63. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/github.py +0 -0
  64. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/gitignore.py +0 -0
  65. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/hashkey.py +0 -0
  66. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/permissions.py +0 -0
  67. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/prompt.py +0 -0
  68. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/routes.py +0 -0
  69. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/onboard/versions.py +0 -0
  70. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/progress.py +0 -0
  71. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/proof.py +0 -0
  72. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/repair.py +0 -0
  73. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/semantic.py +0 -0
  74. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/snapshot.py +0 -0
  75. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/snowflake.py +0 -0
  76. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/snowflake_sql.py +0 -0
  77. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/sql_fingerprint.py +0 -0
  78. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier/validation.py +0 -0
  79. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/dependency_links.txt +0 -0
  80. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/entry_points.txt +0 -0
  81. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/requires.txt +0 -0
  82. {frontier_runner-0.2.2 → frontier_runner-0.2.4}/frontier_runner.egg-info/top_level.txt +0 -0
  83. {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.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.2/frontier_runner-0.2.2-py3-none-any.whl"
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 OS
204
- keychain, the `0600` fallback file, then `FRONTIER_DEMO_API_KEY` only when
205
- `FRONTIER_ALLOW_LOCAL_MANIFEST` is set outside GitHub Actions. If none are
206
- present, the CLI exits with `AUTH_REQUIRED: Run \`frontier login --api-key\``.
207
- Hashed uploads set `entityIdsHashed: true`.
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.2"
251
+ pip install "frontier-runner[snowflake]==0.2.4"
226
252
  # or
227
- pip install "frontier-runner[bigquery]==0.2.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.2/frontier_runner-0.2.2-py3-none-any.whl"
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 OS
146
- keychain, the `0600` fallback file, then `FRONTIER_DEMO_API_KEY` only when
147
- `FRONTIER_ALLOW_LOCAL_MANIFEST` is set outside GitHub Actions. If none are
148
- present, the CLI exits with `AUTH_REQUIRED: Run \`frontier login --api-key\``.
149
- Hashed uploads set `entityIdsHashed: true`.
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.2"
193
+ pip install "frontier-runner[snowflake]==0.2.4"
168
194
  # or
169
- pip install "frontier-runner[bigquery]==0.2.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
@@ -1,3 +1,3 @@
1
1
  """Customer-side Frontier runner."""
2
2
 
3
- __version__ = "0.2.2"
3
+ __version__ = "0.2.4"