|
|
|
# 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
|
|
|
|
}
|