You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.0 KiB
Plaintext

# notify when the latest ci pipeline completes
export def notify [] {
while (info | get status) in ["running", "queued"] {
sleep 1sec;
};
let name = ($env.PWD | path basename)
notify-send $"CI ($name)" $"Job (info | get conclusion)"
}
export def watch [] {
loop {
while (info | get status) != "running" {
sleep 10sec;
}
notify
}
}
export def info [] {
if (get-ci) == "gitlab" {
return (glab ci get -F json | from json | {
conclusion: $in.status,
exists: true,
...$in
})
} else if (get-ci) == "github" {
use git.nu
let branch = (git gb | where current == true | first | get branch)
let info = (gh run list --json conclusion,name,startedAt,status,number,headBranch | from json | where headBranch == $branch | get -i 0 )
if $info != null {
return {
id: $info.number,
name: $info.name,
conclusion: $info.conclusion,
status: (match $info.status {
"in_progress" => {"running"},
"completed" => { $info.conclusion }
_ => $info.status
}),
exists: true,
}
}
}
({
id: null,
name: null,
status: null,
conclusion: null,
exists: false,
})
}
# notify in background
export def notify-bg [] {
use task.nu
task spawn -i -l "ci-notify" -g (task-group) {
ci notify
}
}
export def watch-bg [] {
use task.nu
task spawn -l "ci-watch" -g (task-group) {
while (ci info | get status) != "running" {
sleep 10sec;
}
notify-send $"CI (ci info | get id)" "Job started"
ci notify
ci watch-bg
}
}
export def get-ci [] {
let remote = (git remote get-url --all origin)
if ($remote | str contains gitlab) {
"gitlab"
} else if ($remote | str contains github.com) {
"github"
}
}
def task-group [] {
let name = ($env.PWD | path basename)
let groupname = $"ci-($name)"
if not ($groupname in ...(task group | columns)) {
task group add $groupname -p 4
}
$groupname
}