Mova uma tarefa quando um pull request for mergeado
Conecte o código ao plano: encontre a chave da tarefa do Dailybot em um pull request, mova a tarefa para a coluna de concluídas do quadro e deixe um comentário, a partir de qualquer CI.
Beta
Plan está em beta. Tudo o que está em /plan no aplicativo web, os comandos da CLI e da agent skill para projetos, metas, quadros e tarefas, e a API pública /v1/plan/ podem mudar antes da disponibilidade geral. Quer testar com sua equipe? Escreva para [email protected].
Quando o merge de um pull request com o título ENG-142: Ship the delta feed é feito, a tarefa ENG-142 deveria ir para concluída sem que ninguém mexa no quadro. As chaves de tarefa facilitam isso: uma chave basta para identificar uma tarefa, e todo quadro tem uma coluna na categoria done.
Esta receita é um script shell que você pode executar como último passo de qualquer job de CI depois de um merge.
Escolha uma credencial
- Uma API key pessoal (
X-API-KEY) é adequada para CI que deve agir como uma pessoa: alcança tudo o que essa pessoa vê, sem scope a solicitar. Uma key de agente ou da organização age como um ator de sistema: só alcança tarefas em quadros visíveis para a organização e precisa ter o escopotasks:writeconcedido (durante o Beta, escreva para [email protected]). - Um token de usuário da CLI também funciona se a movimentação precisar ficar registrada em nome de uma pessoa específica.
Veja Autenticação no Plan.
O script
#!/usr/bin/env bash
set -euo pipefail
API="https://api.dailybot.com/v1/plan"
AUTH=(-H "X-API-KEY: $DAILYBOT_API_KEY")
# 1. Find the task key in the pull request title (or the branch name).
KEY=$(echo "$PR_TITLE" | grep -oE '[A-Z][A-Z0-9]+-[0-9]+' | head -1 || true)
if [ -z "$KEY" ]; then echo "No task key in the title; nothing to move."; exit 0; fi
# 2. Read the task by its key to learn its board and version.
TASK_JSON=$(curl -sS --fail-with-body "$API/tasks/$KEY/" "${AUTH[@]}")
BOARD=$(echo "$TASK_JSON" | jq -r .board)
VERSION=$(echo "$TASK_JSON" | jq -r .version)
# 3. Pick the board's first column in the "done" category.
DONE=$(curl -sS --fail-with-body "$API/boards/$BOARD/states/" "${AUTH[@]}" \
| jq -r '[.[] | select(.category == "done")][0].uuid')
# 4. Move the task there, refusing if someone changed it meanwhile.
curl -sS --fail-with-body -X POST "$API/tasks/$KEY/move/" "${AUTH[@]}" \
-H "Content-Type: application/json" \
-H "If-Match: \"$VERSION\"" \
-d "{\"state\": \"$DONE\"}" | jq '{key, state: .state.name, version}'
# 5. Say why it moved.
curl -sS --fail-with-body -X POST "$API/tasks/$KEY/comments/" "${AUTH[@]}" \
-H "Content-Type: application/json" \
-d "{\"body\": \"Merged: $PR_URL\"}" > /dev/null
Defina PR_TITLE e PR_URL com as variáveis de pull request do seu CI.
Detalhes que importam
- As chaves sobrevivem a renomeações. Se a chave do quadro mudou de
ENGparaPLATdepois que a branch foi aberta,ENG-142continua resolvendo. - Categorias, não nomes. As colunas podem ter qualquer nome; é a categoria
doneque faz este script funcionar em qualquer quadro. - Edições simultâneas. Se alguém editou a tarefa entre a leitura e a movimentação, a movimentação responde
409 version_conflict. Execute o passo de novo, ou remova oIf-Matchse o merge sempre tiver que prevalecer. - Mover é a única forma de mudar o estado; a tarefa vai para o final da coluna de concluídas.
- Uma chave de outra organização, ou de um quadro que a credencial não pode ver, responde
404.
Pela CLI, os comandos equivalentes são:
dailybot plan task move "$KEY" --state done
dailybot plan task comment "$KEY" "Merged: $PR_URL"