Document TaskStream boards in the README and .env.example
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
15
.env.example
15
.env.example
@@ -186,3 +186,18 @@ GIT_SYNC_CRON=hourly
|
||||
GIT_SYNC_TTL=55
|
||||
GIT_MAX_ISSUES=25
|
||||
GIT_HTTP_TIMEOUT=15
|
||||
|
||||
###############################################################################
|
||||
# TaskStream — the issue tracker
|
||||
###############################################################################
|
||||
# `taskstream: true` on POST /v1/projects opens a public board there too.
|
||||
# Both default to production.
|
||||
TASKSTREAM_API_URL=https://api.taskstream.pireon.dev
|
||||
TASKSTREAM_WEB_URL=https://taskstream.pireon.dev
|
||||
|
||||
# A Pireon personal access token (oauth.pireon.dev/tokens), only used when the
|
||||
# caller signs in with a machine token (pmt_…), which TaskStream cannot read.
|
||||
# People with a Pireon token have theirs passed on instead. Empty: machine
|
||||
# tokens cannot ask for a board.
|
||||
TASKSTREAM_TOKEN=
|
||||
TASKSTREAM_HTTP_TIMEOUT=10
|
||||
|
||||
40
README.md
40
README.md
@@ -525,6 +525,46 @@ fuera. Añadir GitLab es escribir una clase que implemente
|
||||
[`RepositoryProvider`](app/Services/Git/Contracts/RepositoryProvider.php) y
|
||||
registrarla en `config/git.php`, sin tocar nada más.
|
||||
|
||||
## Tableros en TaskStream
|
||||
|
||||
Al crear un proyecto por la API, `taskstream: true` le abre también un tablero
|
||||
en [TaskStream](https://taskstream.pireon.dev), el gestor de tareas del
|
||||
colectivo, y la respuesta trae el enlace:
|
||||
|
||||
```json
|
||||
POST /api/v1/projects
|
||||
{ "title": { "es": "Catálogo abierto" }, "slug": { "es": "catalogo" }, "taskstream": true }
|
||||
|
||||
→ 201 { "data": { …, "taskstream_key": "CATALOGO", "taskstream_url": "https://taskstream.pireon.dev/p/CATALOGO" } }
|
||||
```
|
||||
|
||||
- **Público** siempre: es el tablero de un proyecto que se enseña.
|
||||
- **Clave**: la de `taskstream_key` (de 2 a 10 letras o cifras, empezando por
|
||||
letra) o, si no se indica, una sacada del slug en el idioma por defecto: de
|
||||
una palabra, sus diez primeros caracteres (`catalogo` → `CATALOGO`); de
|
||||
varias, sus iniciales (`mi-web-nueva` → `MWN`).
|
||||
- **Primero TaskStream**: si lo rechaza (una clave ya usada, por ejemplo), aquí
|
||||
no se crea nada y el motivo vuelve como error de validación (422); si no
|
||||
responde, 502. Así no quedan proyectos a medias ni webhooks de algo que no
|
||||
existe.
|
||||
- **A nombre de quien lo pide**: TaskStream acepta los mismos tokens de Pireon
|
||||
que esta API, y se le pasa el de quien llama. Un token de máquina (`pmt_…`)
|
||||
allí no significa nada, así que esas peticiones usan `TASKSTREAM_TOKEN`; sin
|
||||
él, no pueden pedir tablero.
|
||||
- Solo al crear: en una edición los dos campos se ignoran, y un proyecto
|
||||
duplicado no hereda el tablero del original.
|
||||
|
||||
```dotenv
|
||||
TASKSTREAM_API_URL=https://api.taskstream.pireon.dev # por defecto
|
||||
TASKSTREAM_WEB_URL=https://taskstream.pireon.dev # de aquí sale el enlace
|
||||
TASKSTREAM_TOKEN= # token personal de Pireon, solo para tokens de máquina
|
||||
TASKSTREAM_HTTP_TIMEOUT=10
|
||||
```
|
||||
|
||||
El cliente está en [`TaskStreamClient`](app/Services/TaskStream/TaskStreamClient.php)
|
||||
y la lógica (clave, token, errores) en
|
||||
[`OpenInTaskStream`](app/Actions/Projects/OpenInTaskStream.php).
|
||||
|
||||
## API pública (para el frontend)
|
||||
|
||||
Sin autenticación y de solo lectura. Todo lo que devuelve ya está publicado en
|
||||
|
||||
Reference in New Issue
Block a user