Автоматическое формирование ежедневного учёта рабочего времени на основе EWS-календаря и Jira активности.
- plan -- построение плана рабочей нагрузки
- apply -- отправка worklog в Jira через Tempo Timesheets API
- Поддержка диапазонов дат с исключением выходных
- Автопривязка встреч к issue по ключу в теме (YOU_PROJECT-123)
- Коэффициент 1.2x на длительность встреч (кроме all-day и 8-часовых)
- Дедупликация: повторный apply не создаёт дубли (сигнатура по
[HH:MM] comment+ duration) - Распределение оставшегося времени по Jira issue (weighted по пересечению интервалов)
Примеры:
# Списать время/показать план на сегодня
./worklog apply/plan
# Списать время/показать план на дату
./worklog apply/plan -d 2026-03-27
# Списать время/показат план на диапазон (выходные исключены)
./worklog apply/plan -d 2026-03-24:2026-03-28
# Кастомные часы в день (по умолчанию 8)
./worklog apply/plan -d 2026-03-27 -h 6Файл ./.env должен находиться в директории запуска (рядом с бинарником или в корне проекта при go run).
| Переменная | Описание |
|---|---|
| DEFAULT_ISSUE | Default issue для неизвестных встреч (YOU_PROJECT-1000) |
| EWS_URL | URL Exchange Web Services https://mail.example.com/EWS/Exchange.asmx |
| EWS_USERNAME | Почта |
| EWS_PASSWORD | Пароль |
| JIRA_BASE_URL | URL Jira (http://jira.example.com) |
| JIRA_EMAIL | Email для API доступа |
| JIRA_API_TOKEN | Пароль или API token |
| EWS_IGNORED_MEETINGS | Названия встреч для игнорирования |
| JIRA_PROJECT | Ключ проекта для фильтрации |
| JIRA_IGNORED_STATUSES | Статусы не для учёта |
| JIRA_DAY_CLOSE_STATUSES | Статусы "день закрыт", следующие дни не учитываются |
| WORK_TYPE | Вид работ (атрибут Tempo: Руководство, Разработка, Аналитика, Тестирование) |
| IS_MANAGER | Распределять неиспользованное время |
| MANAGER_ACTIVITY_COMMENT | Comment для учета менеджерского времени |
-d DATE Дата (YYYY-MM-DD) или диапазон (YYYY-MM-DD:YYYY-MM-DD)
-h HOURS Рабочих часов в день (по умолчанию 8)
--with-jira Включить Jira активность (по умолчанию true)
# macOS arm64
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o bin/worklog ./cmd/worklog
# Linux amd64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/worklog ./cmd/worklog
# Windows amd64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/worklog.exe ./cmd/worklog- Go 1.24+
- EWS доступ (Exchange)
- Jira API доступ
- Tempo Timesheets (плагин Jira)
go test ./...
# С race detector
go test -race ./...
# С покрытием
go test -cover ./...При пуше тега v* GitHub Actions собирает бинарники для darwin-arm64, darwin-amd64, linux-amd64, windows-amd64 и создаёт GitHub Release.
cmd/worklog/ CLI точка входа, оркестрация plan/apply
internal/
app/ Рендеринг плана (tabwriter)
domain/
meeting_worklog.go MeetingEvent -> WorklogEntry (буфер 1.2x, [HH:MM] префикс)
activity_worklog.go IssueActivityInterval -> WorklogEntry (weighted allocation)
integrations/
ews/ Exchange Web Services (NTLM, SOAP/XML)
jira/
client.go Jira REST API + changelog -> activity intervals
worklog.go Tempo Timesheets API (create/dedup worklogs)
PolyForm Noncommercial 1.0.0 — свободное использование в некоммерческих целях. Коммерческое использование запрещено без отдельного соглашения.