|
|
|
# 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 completed"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export def watch [] {
|
|
|
|
loop {
|
|
|
|
while (info | get status) != "running" {
|
|
|
|
sleep 10sec;
|
|
|
|
}
|
|
|
|
notify
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export def info [] {
|
|
|
|
if (get-ci) == "gitlab" {
|
|
|
|
glab ci get -F json | from json
|
|
|
|
} else {
|
|
|
|
(gh run list --json conclusion,name,startedAt,status | from json | first
|
|
|
|
| {
|
|
|
|
name: $in.name,
|
|
|
|
conclusion: $in.conclusion,
|
|
|
|
status: (match $in.status {
|
|
|
|
"in_progress" => {"running"},
|
|
|
|
_ => $in.status
|
|
|
|
}),
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# 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;
|
|
|
|
}
|
|
|
|
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
|
|
|
|
}
|