mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 10:10:45 -06:00
Compare commits
12 commits
defb301c90
...
dea2d9e473
Author | SHA1 | Date | |
---|---|---|---|
dea2d9e473 | |||
0a13e2b754 | |||
d2b28de009 | |||
cf9855ddeb | |||
35deff0e0d | |||
7baf2fc303 | |||
8114ac1b3b | |||
a8ce1b651e | |||
1bb8da0bf1 | |||
42e7de22b1 | |||
a86f4e9698 | |||
4c8fccd973 |
12 changed files with 165 additions and 138 deletions
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
@ -41,7 +41,7 @@ jobs:
|
||||||
- uses: ./.github/actions/nix
|
- uses: ./.github/actions/nix
|
||||||
with:
|
with:
|
||||||
attic_token: ${{ secrets.ATTIC_TOKEN }}
|
attic_token: ${{ secrets.ATTIC_TOKEN }}
|
||||||
clean: true
|
# clean: true
|
||||||
btrfs: true
|
btrfs: true
|
||||||
|
|
||||||
- name: write lock file
|
- name: write lock file
|
||||||
|
|
129
.github/workflows/update.yml
vendored
129
.github/workflows/update.yml
vendored
|
@ -2,6 +2,13 @@ name: Flake Update / Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
hosts:
|
||||||
|
description: 'list of hosts to build'
|
||||||
|
required: true
|
||||||
|
default: 'othalan,algiz'
|
||||||
|
type: string
|
||||||
|
|
||||||
schedule:
|
schedule:
|
||||||
# At minute 00:00 on Monday, Wednesday, and Friday.
|
# At minute 00:00 on Monday, Wednesday, and Friday.
|
||||||
- cron: 0 0 * * 1,3,5
|
- cron: 0 0 * * 1,3,5
|
||||||
|
@ -51,9 +58,11 @@ jobs:
|
||||||
nix run .
|
nix run .
|
||||||
--
|
--
|
||||||
cache
|
cache
|
||||||
--host,=",othalan,algiz"
|
--host,="${{ inputs.hosts }}"
|
||||||
--flake .
|
--flake .
|
||||||
--debug
|
--debug
|
||||||
|
--
|
||||||
|
--quiet
|
||||||
|
|
||||||
- name: Commit Updates
|
- name: Commit Updates
|
||||||
uses: daylin-bot/actions/commit-and-push@main
|
uses: daylin-bot/actions/commit-and-push@main
|
||||||
|
@ -61,85 +70,9 @@ jobs:
|
||||||
push-args: --set-upstream --force origin flake-lock
|
push-args: --set-upstream --force origin flake-lock
|
||||||
|
|
||||||
|
|
||||||
build-full-at-once:
|
|
||||||
needs: build-minimal
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# needed to access ghostty repo for now
|
|
||||||
- name: Setup SSH
|
|
||||||
uses: MrSquaare/ssh-setup-action@v3
|
|
||||||
with:
|
|
||||||
host: github.com
|
|
||||||
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
||||||
|
|
||||||
- uses: daylin-bot/actions/setup@main
|
|
||||||
- uses: ./.github/actions/nix
|
|
||||||
with:
|
|
||||||
attic_token: ${{ secrets.ATTIC_TOKEN }}
|
|
||||||
clean: true
|
|
||||||
btrfs: true
|
|
||||||
|
|
||||||
- name: Pre-build oizys
|
|
||||||
run: nix build .
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: >
|
|
||||||
nix run .
|
|
||||||
--
|
|
||||||
build
|
|
||||||
"$(nix run . -- output --host,=othalan,algiz,mannaz,naudiz --flake .)"
|
|
||||||
--flake .
|
|
||||||
--debug
|
|
||||||
--
|
|
||||||
--keep-going
|
|
||||||
--out-link current
|
|
||||||
|
|
||||||
- run: git checkout flake-lock
|
|
||||||
|
|
||||||
- name: Pre-build oizys
|
|
||||||
run: nix build .
|
|
||||||
|
|
||||||
- name: Build Updated
|
|
||||||
run: >
|
|
||||||
nix run .
|
|
||||||
--
|
|
||||||
build
|
|
||||||
"$(nix run . -- output --host,=othalan,algiz,mannaz,naudiz --flake .)"
|
|
||||||
--flake .
|
|
||||||
--debug
|
|
||||||
--
|
|
||||||
--keep-going
|
|
||||||
--out-link updated
|
|
||||||
|
|
||||||
- run: ls
|
|
||||||
# - run: |
|
|
||||||
# echo "# System Diff" >> $GITHUB_STEP_SUMMARY
|
|
||||||
# nix run "nixpkgs#nvd" -- --color always diff ./current ./updated >> summary.md
|
|
||||||
# printf '```\n%s\n```\n' "$(nix run "nixpkgs#nvd" -- diff ./current ./updated)" >> $GITHUB_STEP_SUMMARY
|
|
||||||
#
|
|
||||||
- run: df -h
|
|
||||||
|
|
||||||
# - uses: actions/upload-artifact@v4
|
|
||||||
# with:
|
|
||||||
# name: ${{ matrix.host }}-summary
|
|
||||||
# path: summary.md
|
|
||||||
#
|
|
||||||
build-full:
|
build-full:
|
||||||
needs: build-minimal
|
needs: build-minimal
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
host:
|
|
||||||
- othalan
|
|
||||||
- algiz
|
|
||||||
- mannaz
|
|
||||||
- naudiz
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
@ -157,49 +90,35 @@ jobs:
|
||||||
- uses: ./.github/actions/nix
|
- uses: ./.github/actions/nix
|
||||||
with:
|
with:
|
||||||
attic_token: ${{ secrets.ATTIC_TOKEN }}
|
attic_token: ${{ secrets.ATTIC_TOKEN }}
|
||||||
clean: true
|
# clean: true
|
||||||
btrfs: true
|
btrfs: true
|
||||||
|
|
||||||
- name: Pre-build oizys
|
- name: Pre-build oizys
|
||||||
run: nix build .
|
run: nix build .
|
||||||
|
|
||||||
- name: Build
|
- name: Build Current and Updated Systems
|
||||||
run: >
|
run: >
|
||||||
nix run .
|
nix run .
|
||||||
--
|
--
|
||||||
build
|
ci update
|
||||||
"$(nix run . -- output --host "${{ matrix.host }}" --flake .)"
|
--host,="${{ inputs.hosts }}"
|
||||||
--flake .
|
--flake .
|
||||||
--debug
|
--debug
|
||||||
--
|
--
|
||||||
--keep-going
|
--quiet
|
||||||
--out-link current
|
|
||||||
|
|
||||||
- run: git checkout flake-lock
|
|
||||||
|
|
||||||
- name: Pre-build oizys
|
|
||||||
run: nix build .
|
|
||||||
|
|
||||||
- name: Build Updated
|
|
||||||
run: >
|
|
||||||
nix run .
|
|
||||||
--
|
|
||||||
build
|
|
||||||
"$(nix run . -- output --host "${{ matrix.host }}" --flake .)"
|
|
||||||
--flake .
|
|
||||||
--debug
|
|
||||||
--
|
|
||||||
--keep-going
|
|
||||||
--out-link updated
|
|
||||||
|
|
||||||
- run: |
|
- run: |
|
||||||
echo "# System Diff" >> $GITHUB_STEP_SUMMARY
|
echo "# system diffs" >> $GITHUB_STEP_SUMMARY
|
||||||
nix run "nixpkgs#nvd" -- --color always diff ./current ./updated >> summary.md
|
hosts="${{ inputs.hosts }}"
|
||||||
printf '```\n%s\n```\n' "$(nix run "nixpkgs#nvd" -- diff ./current ./updated)" >> $GITHUB_STEP_SUMMARY
|
for host in ${hosts//,/ }; do
|
||||||
|
echo "## $host" >> $GITHUB_STEP_SUMMARY
|
||||||
|
nix run "nixpkgs#nvd" -- --color always diff ./$host-current ./$host-updated >> $host-summary.md
|
||||||
|
printf '```\n%s\n```\n' "$(nix run "nixpkgs#nvd" -- diff ./$host-current ./$host-updated)" >> $GITHUB_STEP_SUMMARY
|
||||||
|
done
|
||||||
|
|
||||||
- run: df -h
|
- run: df -h
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.host }}-summary
|
name: summary
|
||||||
path: summary.md
|
path: '*-summary.md'
|
||||||
|
|
|
@ -8,7 +8,7 @@ buildNimblePackage {
|
||||||
verions = "unstable";
|
verions = "unstable";
|
||||||
src = lib.cleanSource ./.;
|
src = lib.cleanSource ./.;
|
||||||
nativeBuildInputs = [ openssl ];
|
nativeBuildInputs = [ openssl ];
|
||||||
nimbleDepsHash = "sha256-1YoGvWvoJJSMauDbeH8ZHuK+QQot48Mkye9TeWteT8k=";
|
nimbleDepsHash = "sha256-IWdlWC+j2h15WjVXXdDyxDZsb0/Ti1+jy6RfmqHFkjs=";
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "nix begat oizys";
|
description = "nix begat oizys";
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
"packages": {
|
"packages": {
|
||||||
"hwylterm": {
|
"hwylterm": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"vcsRevision": "c5f70cec4e40ba396f59162e98c359a1a1ea4fe1",
|
"vcsRevision": "ef573dc0f8bf39f80704f92cfab39e1b9af82492",
|
||||||
"url": "https://github.com/daylinmorgan/hwylterm",
|
"url": "https://github.com/daylinmorgan/hwylterm",
|
||||||
"downloadMethod": "git",
|
"downloadMethod": "git",
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"checksums": {
|
"checksums": {
|
||||||
"sha1": "5727969a8e82e29a7581c13cc7cc45996dbca5a1"
|
"sha1": "ccb51201898b5e913ffee1e18bdf4d9fc4004386"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jsony": {
|
"jsony": {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
## nix begat oizys
|
## nix begat oizys
|
||||||
import std/[os, osproc, sequtils, strformat, strutils]
|
import std/[os, osproc, sequtils, strformat, strutils, tables]
|
||||||
import hwylterm, hwylterm/[hwylcli]
|
import hwylterm, hwylterm/[hwylcli]
|
||||||
import oizys/[context, github, nix, logging]
|
import oizys/[context, github, nix, logging]
|
||||||
|
|
||||||
|
@ -33,11 +33,10 @@ hwylCli:
|
||||||
? "set minimal"
|
? "set minimal"
|
||||||
- m
|
- m
|
||||||
preSub:
|
preSub:
|
||||||
setupLoggers(debug)
|
setupLoggers()
|
||||||
updateContext(host, flake, debug, resetCache)
|
updateContext(host, flake, debug, resetCache)
|
||||||
|
|
||||||
subcommands:
|
subcommands:
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
... "nix build"
|
... "nix build"
|
||||||
flags:
|
flags:
|
||||||
|
@ -65,15 +64,40 @@ hwylCli:
|
||||||
nixBuildWithCache(name, args, service, jobs)
|
nixBuildWithCache(name, args, service, jobs)
|
||||||
|
|
||||||
[ci]
|
[ci]
|
||||||
... "trigger GHA"
|
... "builtin ci"
|
||||||
|
# current behavior adds this block twice...
|
||||||
|
# when really I want it to only happen in the lowest "subcommand"
|
||||||
|
# needs to be fixed in hwylterm
|
||||||
|
preSub:
|
||||||
|
updateContext(host, flake, debug, resetCache)
|
||||||
|
subcommands:
|
||||||
|
[update]
|
||||||
|
... "build current and updated hosts"
|
||||||
|
run:
|
||||||
|
ciUpdate(args)
|
||||||
|
|
||||||
|
[gha]
|
||||||
|
... """
|
||||||
|
trigger GHA
|
||||||
|
|
||||||
|
examples:
|
||||||
|
[b]oizys gha update[/] --input:hosts:othalan,algiz,mannaz
|
||||||
|
"""
|
||||||
flags:
|
flags:
|
||||||
|
input:
|
||||||
|
T seq[KVString]
|
||||||
|
? "inputs for dispatch"
|
||||||
`ref`:
|
`ref`:
|
||||||
T string
|
T string
|
||||||
? "git ref/branch/tag to trigger workflow on"
|
? "git ref/branch/tag to trigger workflow on"
|
||||||
* "main"
|
* "main"
|
||||||
run:
|
run:
|
||||||
|
# TODO: support file operations like gh
|
||||||
|
# i.e. @flake.lock means read a file a flake.lock and use it's contents
|
||||||
if args.len == 0: fatalQuit "expected workflow file name"
|
if args.len == 0: fatalQuit "expected workflow file name"
|
||||||
createDispatch(args[0], `ref`)
|
let inputs =
|
||||||
|
input.mapIt((it.key, it.val)).toTable()
|
||||||
|
createDispatch(args[0], `ref`, inputs)
|
||||||
|
|
||||||
[dry]
|
[dry]
|
||||||
... "dry run build"
|
... "dry run build"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import std/[logging, os, strformat, strutils]
|
import std/[logging, os, strformat, strutils]
|
||||||
from std/nativesockets import getHostname
|
from std/nativesockets import getHostname
|
||||||
import hwylterm, hwylterm/logging
|
import hwylterm, hwylterm/logging
|
||||||
|
import ./logging
|
||||||
|
|
||||||
type
|
type
|
||||||
OizysContext* = object
|
OizysContext* = object
|
||||||
|
@ -36,6 +37,8 @@ proc updateContext*(
|
||||||
) =
|
) =
|
||||||
if host.len > 0: oc.hosts = host
|
if host.len > 0: oc.hosts = host
|
||||||
oc.debug = debug
|
oc.debug = debug
|
||||||
|
if debug:
|
||||||
|
consoleLogger.levelThreshold = lvlAll
|
||||||
oc.resetCache = resetCache
|
oc.resetCache = resetCache
|
||||||
if flake != "":
|
if flake != "":
|
||||||
oc.flake =
|
oc.flake =
|
||||||
|
@ -49,5 +52,3 @@ 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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,10 @@ proc runCmdCapt*(
|
||||||
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:
|
||||||
|
result.stdout.add outstrm.readAll()
|
||||||
|
result.stderr.add errstrm.readAll()
|
||||||
|
break
|
||||||
|
|
||||||
close p
|
close p
|
||||||
|
|
||||||
|
|
|
@ -100,13 +100,14 @@ proc getInProgressRun(
|
||||||
|
|
||||||
warn "timeout reached waiting for workflow to start"
|
warn "timeout reached waiting for workflow to start"
|
||||||
|
|
||||||
proc createDispatch*(workflowFileName: string, `ref`: string) =
|
proc createDispatch*(workflowFileName: string, `ref`: string, inputs: Table[string, 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
|
||||||
let workflow =
|
let workflow =
|
||||||
if workflowFileName.endsWith(".yml") or workflowFileName.endsWith(".yaml"): workflowFileName
|
if workflowFileName.endsWith(".yml") or workflowFileName.endsWith(".yaml"): workflowFileName
|
||||||
else: workflowFileName & ".yml"
|
else: workflowFileName & ".yml"
|
||||||
let body = %*{"ref": `ref`}
|
let body = %*{"ref": `ref`, "inputs": inputs}
|
||||||
info fmt"creating dispatch event for {workflow}"
|
info fmt"creating dispatch event for {workflow}"
|
||||||
|
debug "with body: " & $body
|
||||||
postGhApi(
|
postGhApi(
|
||||||
fmt"https://api.github.com/repos/daylinmorgan/oizys/actions/workflows/{workflow}/dispatches",
|
fmt"https://api.github.com/repos/daylinmorgan/oizys/actions/workflows/{workflow}/dispatches",
|
||||||
body
|
body
|
||||||
|
@ -137,17 +138,17 @@ proc getArtifacts(runId: int): seq[GhArtifact] =
|
||||||
let response = getGhApi(fmt"https://api.github.com/repos/daylinmorgan/oizys/actions/runs/{runId}/artifacts")
|
let response = getGhApi(fmt"https://api.github.com/repos/daylinmorgan/oizys/actions/runs/{runId}/artifacts")
|
||||||
fromJson(response.body, ListGhArtifactResponse).artifacts
|
fromJson(response.body, ListGhArtifactResponse).artifacts
|
||||||
|
|
||||||
proc getUpdateSummaryArtifact(runId: int, host: string): GhArtifact =
|
proc getUpdateSummaryArtifact(runId: int): GhArtifact =
|
||||||
let name = fmt"{host}-summary"
|
let name = "summary"
|
||||||
let artifacts = getArtifacts(runId)
|
let artifacts = getArtifacts(runId)
|
||||||
for artifact in artifacts:
|
for artifact in artifacts:
|
||||||
if artifact.name == name:
|
if artifact.name == name:
|
||||||
return artifact
|
return artifact
|
||||||
fatalQuit fmt"failed to find summary for run id: {runID}"
|
fatalQuit fmt"failed to find summary for run id: {runID}"
|
||||||
|
|
||||||
proc getUpdateSummaryUrl(runID: int, host: string): string =
|
proc getUpdateSummaryUrl(runID: int): string =
|
||||||
## https://api.github.com/repos/OWNER/REPO/actions/artifacts/ARTIFACT_ID/ARCHIVE_FORMAT
|
## https://api.github.com/repos/OWNER/REPO/actions/artifacts/ARTIFACT_ID/ARCHIVE_FORMAT
|
||||||
let artifact = getUpdateSummaryArtifact(runID, host)
|
let artifact = getUpdateSummaryArtifact(runID)
|
||||||
# httpclient was forwarding the Authorization headers,
|
# httpclient was forwarding the Authorization headers,
|
||||||
# which confused Azure where the archive lives...
|
# which confused Azure where the archive lives...
|
||||||
var response: Response
|
var response: Response
|
||||||
|
@ -164,20 +165,20 @@ proc getUpdateSummaryUrl(runID: int, host: string): string =
|
||||||
if location.len == 0: errorQuit fmt("location header missing url?")
|
if location.len == 0: errorQuit fmt("location header missing url?")
|
||||||
return location[0]
|
return location[0]
|
||||||
|
|
||||||
proc fetchUpdateSummaryFromUrl(url: string): string =
|
proc fetchUpdateSummaryFromUrl(url: string, host: string): string =
|
||||||
withTmpDir:
|
withTmpDir:
|
||||||
let client = newHttpClient()
|
let client = newHttpClient()
|
||||||
client.downloadFile(url, tmpDir / "summary.zip")
|
client.downloadFile(url, tmpDir / "summary.zip")
|
||||||
let reader = openZipArchive(tmpDir / "summary.zip")
|
let reader = openZipArchive(tmpDir / "summary.zip")
|
||||||
try:
|
try:
|
||||||
result = reader.extractFile("summary.md")
|
result = reader.extractFile(host & "-summary.md")
|
||||||
finally:
|
finally:
|
||||||
reader.close()
|
reader.close()
|
||||||
|
|
||||||
proc getUpdateSummary*(runId: int, host: string): string =
|
proc getUpdateSummary*(runId: int, host: string): string =
|
||||||
withSpinner("fetching update summary"):
|
withSpinner("fetching update summary"):
|
||||||
let url = getUpdateSummaryUrl(runId, host)
|
let url = getUpdateSummaryUrl(runId)
|
||||||
result = fetchUpdateSummaryFromUrl(url)
|
result = fetchUpdateSummaryFromUrl(url, host)
|
||||||
|
|
||||||
type
|
type
|
||||||
GitRepo = object
|
GitRepo = object
|
||||||
|
|
|
@ -24,3 +24,5 @@ comma-with-db
|
||||||
nix-index-with-db
|
nix-index-with-db
|
||||||
python
|
python
|
||||||
net.conf
|
net.conf
|
||||||
|
llm
|
||||||
|
rofi
|
||||||
|
|
|
@ -23,19 +23,18 @@ proc getOizysLogPath(): string =
|
||||||
createDir(dataDir / "oizys")
|
createDir(dataDir / "oizys")
|
||||||
result = dataDir / "oizys" / "oizys.log"
|
result = dataDir / "oizys" / "oizys.log"
|
||||||
|
|
||||||
|
|
||||||
setLogFilter(lvlAll)
|
setLogFilter(lvlAll)
|
||||||
|
|
||||||
proc setupLoggers*(debug: bool) =
|
var consoleLogger* =
|
||||||
let logLevel =
|
newHwylConsoleLogger(
|
||||||
if not debug: lvlInfo
|
|
||||||
else: lvlAll
|
|
||||||
addHandler(
|
|
||||||
newHwylConsoleLogger(
|
|
||||||
fmtPrefix = $bb"[b magenta]oizys",
|
fmtPrefix = $bb"[b magenta]oizys",
|
||||||
fmtSuffix = " ",
|
fmtSuffix = " ",
|
||||||
levelThreshold = logLevel
|
levelThreshold = lvlInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
|
proc setupLoggers*() =
|
||||||
|
addHandler(
|
||||||
|
consoleLogger
|
||||||
)
|
)
|
||||||
addHandler(
|
addHandler(
|
||||||
newRollingFileLogger(
|
newRollingFileLogger(
|
||||||
|
|
|
@ -14,9 +14,12 @@ proc nixCommand(cmd: string): string =
|
||||||
result.addArg "--log-format multiline"
|
result.addArg "--log-format multiline"
|
||||||
result.addArg cmd
|
result.addArg cmd
|
||||||
|
|
||||||
|
proc nixosConfigAttr(host: string): string =
|
||||||
|
getFlake() & "#nixosConfigurations." & host & ".config.system.build.toplevel"
|
||||||
|
|
||||||
proc nixosConfigAttrs*(): seq[string] =
|
proc nixosConfigAttrs*(): seq[string] =
|
||||||
for host in getHosts():
|
for host in getHosts():
|
||||||
result.add getFlake() & "#nixosConfigurations." & host & ".config.system.build.toplevel"
|
result.add nixosConfigAttr(host)
|
||||||
|
|
||||||
const nixosSubcmds* =
|
const nixosSubcmds* =
|
||||||
"""switch boot test build dry-build dry-activate edit
|
"""switch boot test build dry-build dry-activate edit
|
||||||
|
@ -348,3 +351,78 @@ proc nixBuildWithCache*(name: string, rest:seq[string], service: string, jobs: i
|
||||||
if pushErr != 0:
|
if pushErr != 0:
|
||||||
errorQuit "failed to push build to cache"
|
errorQuit "failed to push build to cache"
|
||||||
|
|
||||||
|
#[
|
||||||
|
- name: Build
|
||||||
|
run: >
|
||||||
|
nix run .
|
||||||
|
--
|
||||||
|
build
|
||||||
|
"$(nix run . -- output --host,=othalan,algiz,mannaz,naudiz --flake .)"
|
||||||
|
--flake .
|
||||||
|
--debug
|
||||||
|
--
|
||||||
|
--keep-going
|
||||||
|
--no-link
|
||||||
|
|
||||||
|
- run: git show origin/flake-lock:flake.lock > updated.lock
|
||||||
|
|
||||||
|
- name: Pre-build oizys
|
||||||
|
run: nix build . --reference-lock-file updated.lock
|
||||||
|
|
||||||
|
- name: Build Updated
|
||||||
|
run: >
|
||||||
|
nix run .
|
||||||
|
--
|
||||||
|
build
|
||||||
|
"$(nix run . -- output --host,=othalan,algiz,mannaz,naudiz --flake .)"
|
||||||
|
--flake .
|
||||||
|
--debug
|
||||||
|
--
|
||||||
|
--keep-going
|
||||||
|
--no-link
|
||||||
|
--reference-lock-file updated.lock
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
for host in othalan algiz mannaz naudiz; do
|
||||||
|
for rev in current updated; do
|
||||||
|
args="\"$(nix run . -- output --host $host)\" --out-link \"${host}-${rev}\""
|
||||||
|
[[ "$rev" == "updated" ]] && args="$args --reference-lock-file updated.lock"
|
||||||
|
nix build $args
|
||||||
|
done
|
||||||
|
done
|
||||||
|
]#
|
||||||
|
|
||||||
|
|
||||||
|
proc getUpdatedLockFile() =
|
||||||
|
info "getting updated flake.lock as updated.lock"
|
||||||
|
let res = runCmdCapt("git --no-pager show origin/flake-lock:flake.lock")
|
||||||
|
if res.exitCode != 0:
|
||||||
|
fatalQuit "failed to fetch updated lock file using git"
|
||||||
|
writeFile("updated.lock", res.stdout)
|
||||||
|
|
||||||
|
# probably duplicating logic above ¯\_(ツ)_/¯
|
||||||
|
proc buildSystem(host: string, rest: seq[string]) =
|
||||||
|
var cmd = nixCommand("build")
|
||||||
|
cmd.addArg nixosConfigAttr(host)
|
||||||
|
cmd.addArgs rest
|
||||||
|
let code = runCmd cmd
|
||||||
|
if code != 0:
|
||||||
|
fatalQuit "build failed"
|
||||||
|
|
||||||
|
proc ciUpdate*(rest: seq[string]) =
|
||||||
|
for host in getHosts():
|
||||||
|
info "building " & host.bb("bold")
|
||||||
|
buildSystem(
|
||||||
|
host,
|
||||||
|
@["--out-link", host & "-current", "--quiet"] & rest
|
||||||
|
)
|
||||||
|
|
||||||
|
getUpdatedLockFile()
|
||||||
|
|
||||||
|
for host in getHosts():
|
||||||
|
info "building updated " & host.bb("bold")
|
||||||
|
buildSystem(
|
||||||
|
host,
|
||||||
|
@["--out-link", host & "-updated", "--quiet", "--reference-lock-file", "updated.lock"] & rest
|
||||||
|
)
|
||||||
|
|
||||||
|
|
2
todo.md
2
todo.md
|
@ -3,10 +3,10 @@
|
||||||
## oizys
|
## oizys
|
||||||
|
|
||||||
- [ ] write a flake template that includes the systems boilerplate
|
- [ ] write a flake template that includes the systems boilerplate
|
||||||
- [ ] get the running action url after `oizys ci {workflow}.yml`
|
|
||||||
|
|
||||||
## software
|
## software
|
||||||
|
|
||||||
|
- [ ] why is my update ci always building llm and rofi?
|
||||||
- [ ] include langservers for enabled languages?
|
- [ ] include langservers for enabled languages?
|
||||||
<!--[tracking issue](https://github.com/wez/wezterm/issues/5990)-->
|
<!--[tracking issue](https://github.com/wez/wezterm/issues/5990)-->
|
||||||
- [ ] ~wezterm is broken...something to do with fonts?~ using ghostty
|
- [ ] ~wezterm is broken...something to do with fonts?~ using ghostty
|
||||||
|
|
Loading…
Reference in a new issue