A Devonshire Tea caKe is simple, satisfying, and pairs well with focused work:
Open ticket β create branch β code β open PR β merge β deploy.
Unfortunately, reality looks more like:
Open ticket β read the ticket ID β switch to terminal β forget the ID β go back to ticket β copy ID β create branch with name
<ticket-id>/<ticket-title>β forget to move the ticket to "In progress" β open PR β forget to link ticket β merge. Ticket still says "In Progress" three weeks later.
dtk cuts through the repetitive ceremony.
It connects Kanban board, Git workflow, and Deployment into one coherent flow,
improving Developer eXperience so we can get back to the actual baking.
- Create a branch from a ticket ID or URL:
- Branch is automatically named from the ticket ID and slugified title
- Dev is automatically assigned to the ticket
- Ticket is automatically moved to WIP
- Open a PR based on the current branch:
- PR title and description are automatically generated from commits and ticket metadata, with the ticket ID and link included
- Ticket is automatically moved to In Review
- Merge a PR:
- Local and remote branches are automatically deleted
- Ticket is automatically moved to Staging
- Create a tag, to deploy:
- Version tag and message are automatically generated from the commit log
- GitHub release automatically created
- A recap is posted to Slack
- Ticket is automatically moved to Done
All commands are configurable to fit any workflow, with support for:
- Jira
- Trello
- GitHub Projects
- JetBrains YouTrack
brew tap ssc-php/dtk
brew install dtkTo upgrade:
brew upgrade dtkDownload the binary for your platform from the releases page:
| Platform | Binary | Examples |
|---|---|---|
| Linux aarch64 | dtk-linux-aarch64 |
AWS Graviton, Raspberry Pi, ARM servers |
| macOS aarch64 | dtk-macos-aarch64 |
Apple Silicon Macs (M1, etc) |
| macOS x86_64 | dtk-macos-x86_64 |
Intel Macs (pre-2020) |
| Windows x86_64 | dtk-windows-x86_64.exe |
Most Windows desktops and servers |
**π§ On Linux:**
curl --proto '=https' --tlsv1.2 -fsSL "https://github.com/ssc-php/dtk/releases/latest/download/dtk-linux-x86_64" -o /tmp/dtk
install -m 755 -D /tmp/dtk ~/.local/bin/dtkVerify the checksum:
curl --proto '=https' --tlsv1.2 -fsSL "https://github.com/ssc-php/dtk/releases/latest/download/checksums.txt" \
| grep "dtk-linux-x86_64" | awk '{print $1 " /tmp/dtk"}' | sha256sum --checkOn ARM (e.g. AWS Graviton, Raspberry Pi, etc), replace
dtk-linux-x86_64withdtk-linux-aarch64.
**π On macOS:**
curl --proto '=https' --tlsv1.2 -fsSL "https://github.com/ssc-php/dtk/releases/latest/download/dtk-macos-aarch64" -o /tmp/dtk
install -m 755 /tmp/dtk ~/.local/bin/dtkVerify the checksum:
curl --proto '=https' --tlsv1.2 -fsSL "https://github.com/ssc-php/dtk/releases/latest/download/checksums.txt" \
| grep "dtk-macos-aarch64" | awk '{print $1 " /tmp/dtk"}' | shasum -a 256 --checkOn Intel Macs (pre-2020), replace
dtk-macos-aarch64withdtk-macos-x86_64. Make sure~/.local/binis in yourPATH.
**πͺ On Windows** (run in PowerShell):
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.local\bin" | Out-Null
Invoke-WebRequest -Uri "https://github.com/ssc-php/dtk/releases/latest/download/dtk-windows-x86_64.exe" -OutFile "$env:TEMP\dtk.exe"Verify the checksum:
$hash = (Get-FileHash "$env:TEMP\dtk.exe" -Algorithm SHA256).Hash.ToLower()
$expected = (Invoke-WebRequest -Uri "https://github.com/ssc-php/dtk/releases/latest/download/checksums.txt").Content -split '\r?\n' |
Where-Object { $_ -match "dtk-windows-x86_64.exe" } | ForEach-Object { ($_ -split '\s+')[0] }
if ($hash -ne $expected) { throw "Checksum mismatch" }Move-Item "$env:TEMP\dtk.exe" "$env:USERPROFILE\.local\bin\dtk.exe"Make sure
%USERPROFILE%\.local\binis in yourPATH.
And run dtk without any argument to get the "help" screen:
$ dtk
ββββββ
ββ ββββββ DTK: Devonshire Tea caKe
ββββββββ ββ Kanban, Git and Deployment,
ββββ ββββ in one coherent flow.
ββββββ
Available commands:
...Further documentation can be found in:
docs/how-to/: how-to guides0xxare for local development (e.g.001-how-to-run-qa.md)
You can see the current and past versions using one of the following:
- the
git tagcommand - the releases page on Github
- the file listing the changes between versions
And finally some meta documentation: