asdf
Squash the current repository state back into one baseline commit while preserving the README reframing and repository contents. Constraint: User explicitly requested a single squashed commit with subject "asdf" Confidence: high Scope-risk: broad Reversibility: clean Directive: This commit intentionally rewrites published history; coordinate before future force-pushes Tested: git status clean; local history rewritten to one commit; force-pushed main to origin and instructkr Not-tested: Fresh clone verification after push
This commit is contained in:
commit
d2542c9a62
29
src/utils/github/ghAuthStatus.ts
Normal file
29
src/utils/github/ghAuthStatus.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { execa } from 'execa'
|
||||
import { which } from '../which.js'
|
||||
|
||||
export type GhAuthStatus =
|
||||
| 'authenticated'
|
||||
| 'not_authenticated'
|
||||
| 'not_installed'
|
||||
|
||||
/**
|
||||
* Returns gh CLI install + auth status for telemetry.
|
||||
* Uses which() first (Bun.which — no subprocess) to detect install, then
|
||||
* exit code of `gh auth token` to detect auth. Uses `auth token` instead of
|
||||
* `auth status` because the latter makes a network request to GitHub's API,
|
||||
* while `auth token` only reads local config/keyring. Spawns with
|
||||
* stdout: 'ignore' so the token never enters this process.
|
||||
*/
|
||||
export async function getGhAuthStatus(): Promise<GhAuthStatus> {
|
||||
const ghPath = await which('gh')
|
||||
if (!ghPath) {
|
||||
return 'not_installed'
|
||||
}
|
||||
const { exitCode } = await execa('gh', ['auth', 'token'], {
|
||||
stdout: 'ignore',
|
||||
stderr: 'ignore',
|
||||
timeout: 5000,
|
||||
reject: false,
|
||||
})
|
||||
return exitCode === 0 ? 'authenticated' : 'not_authenticated'
|
||||
}
|
||||
Reference in New Issue
Block a user