Task (go-task) - مشغل مهام حديث
Task (aka go-task) هو مشغل مهام وأداة بناء تهدف إلى أن تكون بديل Make أبسط. تحدد المهام في Taskfile.yml — مع التبعيات والمتغيرات والشمول وفحوصات محدثة — وتشغيلها مع task <name>. إنها مكتوبة في Go وتُشحن كملف ثنائي واحد خالٍ من التبعيات مع سلوك متعدد المنصات ومراقبة ملفات مدمجة. إنها خيار قوي عندما يفضل فريقك YAML على بناء جملة Make.
التثبيت
| المنصة | الأمر |
|---|
| Script | sh -c "$(curl -sSL https://taskfile.dev/install.sh)" |
| macOS/Linux (Homebrew) | brew install go-task |
| Arch Linux | sudo pacman -S go-task |
| Go install | go install github.com/go-task/task/v3/cmd/task@latest |
| Windows (Scoop) | scoop install task |
| التحقق | task --version |
Taskfile الأساسي
# Taskfile.yml
version: '3'
vars:
BINARY: myapp
tasks:
build:
desc: Build the binary
cmds:
- go build -o {{.BINARY}} ./cmd/app
test:
desc: Run tests
cmds:
- go test ./...
ci:
desc: Lint, test, build
deps: [test]
cmds:
- task: build
تشغيل المهام
| الأمر | الوصف |
|---|
task | شغّل المهمة default |
task build | شغّل مهمة مسماة |
task test build | شغّل عدة مهام بالترتيب |
task --list (-l) | قائمة المهام مع الأوصاف |
task --list-all | قائمة جميع المهام (incl. بدون وصف) |
task --summary build | اعرض تفاصيل المهمة |
task VAR=value build | مرّر متغيرًا |
task -- arg1 arg2 | مرّر وسيطات CLI إلى المهمة ({{.CLI_ARGS}}) |
التبعيات والترتيب
| المفتاح | السلوك |
|---|
deps: [a, b] | شغّل a و b (بالتوازي) قبل هذه المهمة |
cmds: [{task: x}] | استدعِ مهمة أخرى كخطوة (متسلسل) |
deps parallelism | التبعيات تعمل بالتوازي بشكل افتراضي |
--parallel | شغّل المهام المعطاة بالتوازي |
فحوصات محدثة (تخطّ العمل غير الضروري)
tasks:
build:
sources:
- "**/*.go"
generates:
- myapp
cmds:
- go build -o myapp ./cmd/app
| المفتاح | التأثير |
|---|
sources | المدخلات لحساب بصمة |
generates | النتائج المتوقعة |
| `method: checksum | timestamp |
status: [ ... ] | فحوصات shell مخصصة للحالة |
إذا لم تتغيّر المصادر Task تتخطّ الأمر.
المتغيرات والقوالب
| الميزة | مثال |
|---|
| متغيرات المهمة/العامة | vars: { NAME: value } |
| متغيرات Env | env: { CGO_ENABLED: "0" } |
| Dotenv | dotenv: ['.env'] |
| القوالب | {{.NAME}} و {{.CLI_ARGS}} وتوابع قوالب Go |
| متغيرات ديناميكية | sh: لحساب متغير من أمر |
الشمول والمراقبة
| الميزة | الكيفية |
|---|
| Includes | includes: { docs: ./docs/Taskfile.yml } → task docs:build |
| Namespacing | المهام المشمولة تُستدعى namespace:task |
| وضع المراقبة | task --watch build (إعادة تشغيل على تغيير المصدر) |
-w | شكل قصير من --watch |
سير العمل الشائع
# اكتشف ما يمكن للمشروع أن يفعله
task --list
# شغّل CI محليًا بالضبط كما يفعل الخط الأنابيب
task ci
# كرّر: أعد البناء عند كل تغيير المصدر
task --watch build
# مرّر المحتجات
task test -- -run TestLogin
Task مقابل Make مقابل just
| الجانب | Task | Make | just |
|---|
| البناء جملة | YAML | Makefile | just recipes |
| اللغة | Go (ملف ثنائي واحد) | C (منتشر في كل مكان) | Rust |
| فحوصات محدثة | نعم (sources/generates) | نعم (الطوابع الزمنية) | لا (مشغل أوامر) |
| مراقبة الملفات | مدمجة (--watch) | لا | لا (اقرن مع watchexec) |
| الأفضل لـ | معجبو YAML متعدد المنصات | بناء الرسوم البيانية الكلاسيكية | تشغيل الأوامر البسيط |
انظر أيضًا إلى just للحصول على بديل مشغل أوامر و watchexec لمراقبة ملفات منفصلة.
الموارس