mirror of
https://github.com/go-task/task.git
synced 2025-12-16 03:37:48 +01:00
116 lines
6.6 KiB
Fish
116 lines
6.6 KiB
Fish
set -l GO_TASK_PROGNAME (if set -q GO_TASK_PROGNAME; echo $GO_TASK_PROGNAME; else if set -q TASK_EXE; echo $TASK_EXE; else; echo task; end)
|
|
|
|
# Cache variables for experiments (global)
|
|
set -g __task_experiments_cache ""
|
|
set -g __task_experiments_cache_time 0
|
|
|
|
# Helper function to get experiments with 1-second cache
|
|
function __task_get_experiments
|
|
set -l now (date +%s)
|
|
set -l ttl 1 # Cache for 1 second only
|
|
|
|
# Return cached value if still valid
|
|
if test (math "$now - $__task_experiments_cache_time") -lt $ttl
|
|
printf '%s\n' $__task_experiments_cache
|
|
return
|
|
end
|
|
|
|
# Refresh cache
|
|
set -g __task_experiments_cache (task --experiments 2>/dev/null)
|
|
set -g __task_experiments_cache_time $now
|
|
printf '%s\n' $__task_experiments_cache
|
|
end
|
|
|
|
# Helper function to check if an experiment is enabled
|
|
function __task_is_experiment_enabled
|
|
set -l experiment $argv[1]
|
|
__task_get_experiments | string match -qr "^\* $experiment:.*on"
|
|
end
|
|
|
|
function __task_get_tasks --description "Prints all available tasks with their description" --inherit-variable GO_TASK_PROGNAME
|
|
# Check if the global task is requested
|
|
set -l global_task false
|
|
commandline --current-process | read --tokenize --list --local cmd_args
|
|
for arg in $cmd_args
|
|
if test "_$arg" = "_--"
|
|
break # ignore arguments to be passed to the task
|
|
end
|
|
if test "_$arg" = "_--global" -o "_$arg" = "_-g"
|
|
set global_task true
|
|
break
|
|
end
|
|
end
|
|
|
|
# Read the list of tasks (and potential errors)
|
|
if $global_task
|
|
$GO_TASK_PROGNAME --global --list-all
|
|
else
|
|
$GO_TASK_PROGNAME --list-all
|
|
end 2>&1 | read -lz rawOutput
|
|
|
|
# Return on non-zero exit code (for cases when there is no Taskfile found or etc.)
|
|
if test $status -ne 0
|
|
return
|
|
end
|
|
|
|
# Grab names and descriptions (if any) of the tasks
|
|
set -l output (echo $rawOutput | sed -e '1d; s/\* \(.*\):\s\{2,\}\(.*\)\s\{2,\}(\(aliases.*\))/\1\t\2\t\3/' -e 's/\* \(.*\):\s\{2,\}\(.*\)/\1\t\2/'| string split0)
|
|
if test $output
|
|
echo $output
|
|
end
|
|
end
|
|
|
|
complete -c $GO_TASK_PROGNAME \
|
|
-d 'Runs the specified task(s). Falls back to the "default" task if no task name was specified, or lists all tasks if an unknown task name was specified.' \
|
|
-xa "(__task_get_tasks)" \
|
|
-n "not __fish_seen_subcommand_from --"
|
|
|
|
# Standard flags
|
|
complete -c $GO_TASK_PROGNAME -s a -l list-all -d 'list all tasks'
|
|
complete -c $GO_TASK_PROGNAME -s c -l color -d 'colored output (default true)'
|
|
complete -c $GO_TASK_PROGNAME -s C -l concurrency -d 'limit number of concurrent tasks'
|
|
complete -c $GO_TASK_PROGNAME -l completion -d 'generate shell completion script' -xa "bash zsh fish powershell"
|
|
complete -c $GO_TASK_PROGNAME -s d -l dir -d 'set directory of execution'
|
|
complete -c $GO_TASK_PROGNAME -l disable-fuzzy -d 'disable fuzzy matching for task names'
|
|
complete -c $GO_TASK_PROGNAME -s n -l dry -d 'compile and print tasks without executing'
|
|
complete -c $GO_TASK_PROGNAME -s x -l exit-code -d 'pass-through exit code of task command'
|
|
complete -c $GO_TASK_PROGNAME -l experiments -d 'list available experiments'
|
|
complete -c $GO_TASK_PROGNAME -s F -l failfast -d 'when running tasks in parallel, stop all tasks if one fails'
|
|
complete -c $GO_TASK_PROGNAME -s f -l force -d 'force execution even when up-to-date'
|
|
complete -c $GO_TASK_PROGNAME -s g -l global -d 'run global Taskfile from home directory'
|
|
complete -c $GO_TASK_PROGNAME -s h -l help -d 'show help'
|
|
complete -c $GO_TASK_PROGNAME -s i -l init -d 'create new Taskfile'
|
|
complete -c $GO_TASK_PROGNAME -l insecure -d 'allow insecure Taskfile downloads'
|
|
complete -c $GO_TASK_PROGNAME -s I -l interval -d 'interval to watch for changes'
|
|
complete -c $GO_TASK_PROGNAME -s j -l json -d 'format task list as JSON'
|
|
complete -c $GO_TASK_PROGNAME -s l -l list -d 'list tasks with descriptions'
|
|
complete -c $GO_TASK_PROGNAME -l nested -d 'nest namespaces when listing as JSON'
|
|
complete -c $GO_TASK_PROGNAME -l no-status -d 'ignore status when listing as JSON'
|
|
complete -c $GO_TASK_PROGNAME -s o -l output -d 'set output style' -xa "interleaved group prefixed"
|
|
complete -c $GO_TASK_PROGNAME -l output-group-begin -d 'message template before grouped output'
|
|
complete -c $GO_TASK_PROGNAME -l output-group-end -d 'message template after grouped output'
|
|
complete -c $GO_TASK_PROGNAME -l output-group-error-only -d 'hide output from successful tasks'
|
|
complete -c $GO_TASK_PROGNAME -s p -l parallel -d 'execute tasks in parallel'
|
|
complete -c $GO_TASK_PROGNAME -s s -l silent -d 'disable echoing'
|
|
complete -c $GO_TASK_PROGNAME -l sort -d 'set task sorting order' -xa "default alphanumeric none"
|
|
complete -c $GO_TASK_PROGNAME -l status -d 'exit non-zero if tasks not up-to-date'
|
|
complete -c $GO_TASK_PROGNAME -l summary -d 'show task summary'
|
|
complete -c $GO_TASK_PROGNAME -s t -l taskfile -d 'choose Taskfile to run'
|
|
complete -c $GO_TASK_PROGNAME -s v -l verbose -d 'verbose output'
|
|
complete -c $GO_TASK_PROGNAME -l version -d 'show version'
|
|
complete -c $GO_TASK_PROGNAME -s w -l watch -d 'watch mode, re-run on changes'
|
|
complete -c $GO_TASK_PROGNAME -s y -l yes -d 'assume yes to all prompts'
|
|
|
|
# Experimental flags (dynamically checked at completion time via -n condition)
|
|
# GentleForce experiment
|
|
complete -c $GO_TASK_PROGNAME -n "__task_is_experiment_enabled GENTLE_FORCE" -l force-all -d 'force execution of task and all dependencies'
|
|
|
|
# RemoteTaskfiles experiment - Options
|
|
complete -c $GO_TASK_PROGNAME -n "__task_is_experiment_enabled REMOTE_TASKFILES" -l offline -d 'use only local or cached Taskfiles'
|
|
complete -c $GO_TASK_PROGNAME -n "__task_is_experiment_enabled REMOTE_TASKFILES" -l timeout -d 'timeout for remote Taskfile downloads'
|
|
complete -c $GO_TASK_PROGNAME -n "__task_is_experiment_enabled REMOTE_TASKFILES" -l expiry -d 'cache expiry duration'
|
|
|
|
# RemoteTaskfiles experiment - Operations
|
|
complete -c $GO_TASK_PROGNAME -n "__task_is_experiment_enabled REMOTE_TASKFILES" -l download -d 'download remote Taskfile'
|
|
complete -c $GO_TASK_PROGNAME -n "__task_is_experiment_enabled REMOTE_TASKFILES" -l clear-cache -d 'clear remote Taskfile cache'
|