This commit is contained in:
Daylin Morgan 2024-09-11 15:03:44 -05:00
parent 09c2d08540
commit 16ff586de4
Signed by: daylin
GPG key ID: 950D13E9719334AD
4 changed files with 25 additions and 31 deletions

View file

@ -23,13 +23,11 @@ proc initContext*(): OizysContext =
result.ci = getEnv("GITHUB_STEP_SUMMARY") != "" result.ci = getEnv("GITHUB_STEP_SUMMARY") != ""
var oc = initContext() var oc = initContext()
proc checkPath(s: string): string =
## fail if path doesn't exist
if not s.dirExists:
errorQuit fmt"flake path: {s} does not exist"
s
# public api ------------------------------------- proc checkPath(s: string): string =
## fail if path doesn't exist
if not s.dirExists: fatalQuit fmt"flake path: {s} does not exist"
s
proc updateContext*( proc updateContext*(
host: seq[string], host: seq[string],
@ -37,8 +35,7 @@ proc updateContext*(
debug: bool, debug: bool,
resetCache: bool resetCache: bool
) = ) =
if host.len > 0: if host.len > 0: oc.hosts = host
oc.hosts = host
oc.debug = debug oc.debug = debug
oc.resetCache = resetCache oc.resetCache = resetCache
if flake != "": if flake != "":
@ -49,9 +46,9 @@ proc updateContext*(
debug bb(fmt"""[b]flake[/]: {oc.flake}, [b]hosts[/]: {oc.hosts.join(" ")}""") debug bb(fmt"""[b]flake[/]: {oc.flake}, [b]hosts[/]: {oc.hosts.join(" ")}""")
proc getHosts*(): seq[string] = return oc.hosts proc getHosts*(): seq[string] = return oc.hosts
proc getFlake*(): string = return oc.flake proc getFlake*(): string = return oc.flake
proc isDebug*(): bool = return oc.debug proc isDebug*(): bool = return oc.debug
proc isResetCache*(): bool = return oc.resetCache proc isResetCache*(): bool = return oc.resetCache
proc isCi*(): bool = return oc.ci proc isCi*(): bool = return oc.ci

View file

@ -32,25 +32,22 @@ proc runCmdCapt*(
args = args[1..^1], args = args[1..^1],
options = {poUsePath} options = {poUsePath}
) )
let # NOTE: if I didn't use streams could I just read from the file handle instead?
let
outstrm = peekableOutputStream p outstrm = peekableOutputStream p
errstrm = peekableErrorStream p errstrm = peekableErrorStream p
result.exitCode = -1 result.exitCode = -1
var line: string var line: string
# var cnt: int
while true: while true:
if CaptStdout in capture: if CaptStdout in capture:
if outstrm.readLine(line): if outstrm.readLine(line):
result.stdout.add line & '\n' result.stdout.add line & '\n'
if CaptStderr in capture: if CaptStderr in capture:
if errstrm.readLine(line): if errstrm.readLine(line):
result.stderr.add line & '\n' result.stderr.add line & '\n'
result.exitCode = peekExitCode(p) result.exitCode = peekExitCode(p)
if result.exitCode != -1: break if result.exitCode != -1: break
# result.exitCode = waitForExit p
# result.exitCode = waitForExit p
# close p
close p close p
proc runCmdCaptWithSpinner*( proc runCmdCaptWithSpinner*(

View file

@ -7,19 +7,19 @@ import ./[logging, exec, context]
when defined(amd64) and (defined(gcc) or defined(clang)): when defined(amd64) and (defined(gcc) or defined(clang)):
{.passC: "-msse4.1 -mpclmul".} {.passC: "-msse4.1 -mpclmul".}
template withTmpDir(body: untyped): untyped = template withTmpDir(body: untyped): untyped =
let tmpDir {.inject.} = createTempDir("oizys","") let tmpDir {.inject.} = createTempDir("oizys","")
body body
removeDir(tmpDir) removeDir tmpDir
var ghToken = getEnv("GITHUB_TOKEN") var ghToken = getEnv "GITHUB_TOKEN"
proc checkToken() {.inline.} = proc checkToken() {.inline.} =
if ghToken == "": fatalQuit "GITHUB_TOKEN not set" if ghToken == "": fatalQuit "GITHUB_TOKEN not set"
proc ghClient( proc ghClient(
maxRedirects = 5 maxRedirects = 5
): HttpClient = ): HttpClient =
checkToken() checkToken()
result = newHttpClient(maxRedirects = maxRedirects) result = newHttpClient(maxRedirects = maxRedirects)
result.headers = newHttpHeaders({ result.headers = newHttpHeaders({
@ -50,7 +50,8 @@ proc postGhApi(url: string, body: JsonNode) =
let response = client.post(url, body = $body) let response = client.post(url, body = $body)
info fmt"Status: {response.code}" info fmt"Status: {response.code}"
except: except:
error "failed to get response code" errorQuit "failed to get response code"
proc createDispatch*(workflowFileName: string, `ref`: string) = proc createDispatch*(workflowFileName: string, `ref`: string) =
## https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#create-a-workflow-dispatch-event ## https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#create-a-workflow-dispatch-event
@ -174,7 +175,7 @@ proc fetch(r: GitRepo) =
checkGit code checkGit code
proc status(r: GitRepo) = proc status(r: GitRepo) =
let (output, _, code) = runCmdCapt(r.git("status", "--porcelain")) let (output, _, code) = runCmdCapt r.git("status", "--porcelain")
checkGit code checkGit code
if output.len > 0: if output.len > 0:
info "unstaged commits, cowardly exiting..." info "unstaged commits, cowardly exiting..."
@ -188,6 +189,4 @@ proc rebase(r: GitRepo, `ref`: string) =
proc updateRepo*() = proc updateRepo*() =
let repo = GitRepo(path: getFlake()) let repo = GitRepo(path: getFlake())
fetch repo fetch repo
rebase repo, "origin/flake-lock" rebase(repo, "origin/flake-lock")

View file

@ -2,8 +2,7 @@ import std/macros
type type
OverlayKind = enum OverlayKind = enum
oPre oPre, oPost
oPost
OverlayProc = object OverlayProc = object
node: NimNode node: NimNode
kind: OverlayKind kind: OverlayKind
@ -27,6 +26,7 @@ proc applyOverlay(child: NimNode, overlayProc: OverlayProc) =
macro overlay*(x: untyped): untyped = macro overlay*(x: untyped): untyped =
##[ ##[
apply pre and post operations to procs: apply pre and post operations to procs:
```nim ```nim
overlay: overlay:
proc pre(a: bool) = proc pre(a: bool) =
@ -43,7 +43,8 @@ macro overlay*(x: untyped): untyped =
echo "inside mine" echo "inside mine"
echo "after" echo "after"
``` ```
]## ]##
result = newStmtList() result = newStmtList()
var overlays: seq[OverlayProc] var overlays: seq[OverlayProc]
for child in x.children(): for child in x.children():