Saltar al contenido
CADCAMFUN
Documentos

Documentación

Flujos de trabajo

Las comprobaciones de YAML versionadas y los pasos de servicio se ejecutan en función de la confirmación exacta del proyecto que las desencadenó.

Traducido automáticamente del inglés. Ver el original en inglés

Lo que evalúa una carrera

Los archivos de flujo de trabajo se confirman en .cadcamfun/workflows/ con un .yml o .yaml extensión. El sidecar los carga desde una referencia comprometida seleccionada. La edición de un dibujo o flujo de trabajo no confirmado no cambia los archivos vistos por una ejecución existente.

@cadcamfun/workflow analiza el YAML, valida dependencias, coincide con activadores y ejecuta funciones registradas. No ejecuta comandos de shell arbitrarios, imágenes de contenedores ni acciones descargadas. Cada uses el identificador debe existir en el registro actual del corredor antes de que comience cualquier paso.

Escribir un flujo de trabajo

Validar cada proyecto enviado manualmente
name: Project checks
on:
  manual: true
jobs:
  validate:
    steps:
      - id: structure
        uses: project/validate
      - uses: project/require-gcode
      - uses: cam/sequence

Un flujo de trabajo tiene un nombre, on activadores y trabajos codificados por identificador. Un trabajo contiene al menos un paso y puede declarar needs. un paso tiene uses, opcional id y nombre, opcional with argumentos, if, y continueOnError.

Los identificadores comienzan con una letra y contienen como máximo 64 letras, dígitos, guiones bajos o guiones. Los identificadores de pasos son únicos en todo el flujo de trabajo. El análisis rechaza YAML no válido, errores de esquema, dependencias de trabajos desconocidos, dependencias cíclicas e identificadores de pasos duplicados.

Controles incorporados

  • project/validate analiza archivos JSON comprometidos y verifica los ID de entidad de dibujo/componente/ruta de herramienta reconocidos con sus nombres de archivo y verifica sus nombres. Devuelve recuentos de recursos.
  • project/require-gcode falla si una trayectoria comprometida tiene un código G vacío o faltante. No requiere que el proyecto contenga al menos una trayectoria.
  • cam/verify genera solicitudes de reproducción a partir del código G de trayectoria de herramienta comprometida y Toolpath.data.request. Falla en los resultados de reproducción de gravedad de errores, o también en las advertencias cuando with.severity es warning. Los argumentos opcionales son toolpath y tolerance.
  • cam/gcode se regenera a partir del comprometido data.request y compara su NC recortado con el texto comprometido. Acepta una opción toolpath selector.
  • cam/sequence comprueba las solicitudes almacenadas en busca de asignaciones de números de herramientas conflictivas y solicitudes de mecanizado de restos cuya herramienta anterior no sea más grande que la herramienta activa.

Los pasos CAM leen el formato de solicitud del generador almacenado. NC faltantes, solicitudes de generación faltantes o solicitudes de verificación no admitidas se informan en skipped resultados cuando corresponda; no fallan automáticamente en el paso. Inspeccione el recuento verificado/coincidente y los motivos omitidos. Un flujo de trabajo ecológico que contenga únicamente trabajo CAM omitido no es prueba de un programa verificado.

Pasos respaldados por el servicio

El sidecar en vivo se registra vcs/commit, notify/push, y, una vez existido el servicio de asistente, ai/prompt. El registro es explícito: un ejecutor creado sin estos servicios falla en un flujo de trabajo que nombra un paso no disponible.

vcs/commit requiere un mensaje y acepta un files registro de texto bajo .cadcamfun/ con extensiones YAML, Markdown, JSON o texto. Actúa como cuenta de ejecución y obedece a la política de rama protegida. El argumento de archivo adicional no puede reemplazar directamente las rutas de la entidad CAD. La implementación actual delega la confirmación del proyecto sin verificar si hay una copia de trabajo limpia: también toma instantáneas de las ediciones actuales de la base de datos en la rama desprotegida, que puede diferir de la referencia que se está verificando. Ejecute este paso de escritura solo cuando se pretenda confirmar la rama actual y el estado de trabajo.

notify/push crea una notificación de aplicación para el actor de la ejecución, con título, cuerpo y resultado de éxito/fracaso opcionales. Es un paso de notificación persistente; por sí solo no establece la entrega a través de un proveedor push externo.

ai/prompt requiere un mensaje y, opcionalmente, acepta texto del sistema y un modelo. Puede sustituir el contenido del archivo confirmado y devuelve el texto de respuesta y la identidad del modelo. Las credenciales faltantes o un error del proveedor fallan en este paso; una respuesta modelo es un resultado de asesoramiento, independiente de las comprobaciones de geometría deterministas.

Los peldaños incorporados puros están registrados en builtinSteps (apps/sidecar/src/services/workflow-steps.ts): project/validate, project/require-gcode, cam/verify, cam/gcode, y cam/sequence. Sólo necesitan los archivos comprometidos y @cadcamfun/core, por lo que están disponibles incluso cuando el asistente no está en ejecución.

Ejecución, resultados y condiciones.

Los trabajos se ejecutan en niveles de dependencia, y los trabajos independientes en un nivel se ejecutan simultáneamente. Los pasos dentro de un trabajo se ejecutan secuencialmente. Se omiten los trabajos cuyas dependencias no tuvieron éxito. La condición de paso predeterminada es success; always se ejecuta después de cualquier resultado y failure se ejecuta después de un error de paso anterior no controlado en ese trabajo.

continueOnError: true registra un evento de paso fallido sin establecer el indicador de error del trabajo. De lo contrario, un paso fallido omitirá los pasos posteriores que solo sean exitosos y marcará el trabajo como fallido. El resultado general es el éxito sólo cuando cada trabajo tiene éxito.

Se puede hacer referencia a resultados de pasos con nombre anteriores en with valores utilizando la expresión que se muestra a continuación. Un valor que consta exactamente de una expresión conserva su tipo; la sustitución dentro de cadenas más largas convierte la salida en texto. Los trabajos deben declarar dependencias cuando consumen los resultados de otro trabajo.

Utilice una salida de paso anterior
with:
  body: "Checked drawings: ${{ steps.structure.outputs.drawings }}"

Disparadores y despacho

on.push admite filtros globales de rama y de ruta modificada; on.pullRequest filtra la rama base; on.manual permite el envío explícito. Un solo asterisco coincide dentro de un segmento de ruta y un asterisco doble puede abarcar segmentos.

La integración de confirmación/envío HTTP actualmente proporciona una lista vacía de rutas modificadas al activador de envío automático. En consecuencia, un flujo de trabajo con un filtro de ruta de inserción no coincide con esos eventos. Utilice filtros de inserción solo para sucursales o envío manual para esta integración hasta que se proporcionen los datos de la ruta modificada.

Lea las definiciones comprometidas en GET /api/projects/:id/actions/workflows, opcionalmente con ref. Lea uno en /workflows/:name. Se devuelve un archivo con formato incorrecto con su contenido y un problem para que pueda ser reparado. Para editar una definición, incluya su ruta de flujo de trabajo segura en una confirmación del proyecto.

POST /api/projects/:id/actions/dispatch acepta una referencia opcional y envía todos los flujos de trabajo manuales coincidentes en esa referencia; no es un selector para un nombre de flujo de trabajo. Leer resultados guardados de GET /api/projects/:id/actions/runs.

Ejecutar persistencia y eventos

El corredor registra el flujo de trabajo, el evento, la referencia, el SHA de confirmación, el estado, las marcas de tiempo y los eventos acumulados en WorkflowRun. Los eventos laborales marcan el comienzo y el final; Los eventos de paso incluyen índice, identificador, estado, salidas opcionales y texto de error. El YAML no válido se conserva como una ejecución fallida con un evento de archivo no válido.

La ruta de activación HTTP actual espera a que los flujos de trabajo se establezcan y luego publica juntos los eventos en vivo iniciados y finalizados de la ejecución. No transmite cada paso de ejecución a través de esa solicitud HTTP. El corredor central expone un onEvent devolución de llamada para integraciones que necesitan un avance gradual.

Interpretar los resultados con precisión

Un flujo de trabajo informa sobre su compromiso capturado y las implementaciones de pasos registrados. No certifica ediciones posteriores de la copia de trabajo ni elimina una confirmación ya registrada en caso de falla. Inspeccione las comprobaciones omitidas, la política de advertencias y la evidencia de trayectoria de herramientas relevante antes de utilizar una ejecución exitosa como puerta de liberación.

La implementación se divide entre packages/workflow/src para esquema/disparador/ejecución y sidecar workflow-runner.ts, workflow-steps.ts, y workflow-service-steps.ts para datos de proyectos comprometidos, ejecuciones persistentes y servicios de aplicaciones.

Ejecute un ejemplo de motor de flujo de trabajo aislado

Un consumidor de paquete proporciona las funciones registradas y su contexto escrito. Este ejemplo analiza un flujo de trabajo manual, ejecuta una verificación registrada y devuelve el resultado del trabajo sin abrir SQLite ni invocar AI.

Analizar, registrar y ejecutar
import { Effect } from "effect"
import { parseWorkflow, runWorkflow } from "@cadcamfun/workflow"

const source = [
  "name: Isolated check", "on:", "  manual: true", "jobs:",
  "  inspect:", "    steps:", "      - id: checked", "        uses: inspection/check"
].join("\n")
const result = await Effect.runPromise(Effect.gen(function* () {
  const workflow = yield* parseWorkflow(source)
  return yield* runWorkflow(workflow, {
    ctx: { drawingCount: 2 },
    registry: { "inspection/check": ({ ctx }) => Effect.succeed({ drawings: ctx.drawingCount }) }
  })
}))
console.log(result) // { status: "success", jobs: { inspect: "success" } }

Ejecutar dentro de un espacio de trabajo dependiendo del efecto y @cadcamfun/workflow, como apps/sidecar. El paso personalizado anterior es local para el registro proporcionado; nombrarlo en un flujo de trabajo de escritorio no lo instala en el sidecar de producción.

Fuente: packages/workflow/src/schema.ts y run.ts.

Haga coincidir filtros y consuma resultados de forma segura

Un disparador de inserción requiere que su filtro de rama coincida y, cuando existe una lista de rutas, se proporciona al menos una ruta modificada para que coincida. Un filtro omitido no tiene restricciones; una lista explícitamente vacía no coincide con nada. Un evento manual requiere on.manual estar presente. La coincidencia de solicitudes de extracción utiliza la rama base, en lugar del nombre de la propuesta principal.

La sustitución de salida atraviesa registros y matrices anidados. Una expresión de salida exacta que falta se evalúa como indefinida; una salida ausente incrustada en una cadena más larga se convierte en texto vacío. No confíe en que un paso omitido o fallido haya producido un resultado. Declarar needs para consumidores de trabajos cruzados, por lo que la programación de dependencia establece el orden de los datos.

Paso if es uno de los tres modos literales, no un lenguaje de expresión general. Este motor no implementa variables de flujo de trabajo, interpolación de shell, compilaciones de matrices, condiciones arbitrarias de JavaScript ni carga de acciones de terceros. el separado ai/prompt sustitutos del manejador comprometidos files.<path> referencias en su mensaje; los pasos ordinarios no reciben esa sustitución adicional.

Fuente: packages/workflow/src/trigger.ts, run.ts, y apps/sidecar/src/services/workflow-service-steps.ts.

Un filtro de ruta o rama omitido coincide con todos los valores. Un envío manual coincide solo con flujos de trabajo que declaran on.manualy un evento de solicitud de extracción coincide con el flujo de trabajo branches globos contra la rama base de la solicitud de extracción (packages/workflow/src/trigger.ts).

Diagnosticar los resultados del flujo de trabajo

DescubrimientoSignificado y próxima comprobación
El archivo de flujo de trabajo se devuelve con problemRepare los errores de YAML/esquema o de dependencia y confirme el archivo reparado. La lista de archivos conserva el contenido no válido para su edición.
Paso desconocido antes de la ejecución.Compara cada uses con ID de paso de sidecar registradas. El registro local de un ejemplo de paquete no es el registro de producción.
No correr después del empujónConfirme que el flujo de trabajo existe en la referencia confirmada, que la rama coincide y que ningún filtro de ruta de cambio HTTP no compatible excluye el evento.
La ejecución es exitosa pero verified: 0Leer skipped. Las solicitudes de generador faltantes o las trayectorias de herramientas no compatibles pueden dejar la verificación sin evidencia geométrica.
Trabajo dependiente omitidoInspeccionar el resultado de cada needs trabajo; El fallo de dependencia impide que el trabajo se inicie, incluidos sus pasos siempre condicionados.
La ejecución sigue ejecutándose después de la finalización del procesoInspeccione sus marcas de tiempo/eventos y la confirmación exacta. El corredor persiste en el estado inicial y final por separado y no reanuda automáticamente una carrera interrumpida.

El historial de ejecución guardado devuelve las últimas 50 ejecuciones de forma predeterminada en el límite del servicio. Las notificaciones de eventos en vivo son canales secundarios de mejor esfuerzo: inspeccionar las filas persistentes para obtener el resultado de la ejecución duradera en lugar de tratar la entrega de notificaciones como el registro de ejecución.

Fuente: apps/sidecar/src/services/workflow-runner.ts, workflow-steps.ts, y http/vcs.ts.

Formato de archivo de flujo de trabajo

Un flujo de trabajo es un archivo YAML en .cadcamfun/workflows/<name>.yml en el repositorio del proyecto, versionado con el modelo que verifica. Su forma refleja las acciones de GitHub (on, jobs, needs, steps, uses, with), pero uses siempre nombra un paso registrado de CADCAMFUN. Un flujo de trabajo no puede ejecutar un comando de shell ni una imagen de contenedor.

.cadcamfun/workflows/release-check.yml
name: Release check
on:
  push:
    branches: [main, "release/*"]
    paths: ["toolpaths/**"]
  pullRequest:
    branches: [main]
  manual: {}
jobs:
  validate:
    steps:
      - uses: project/validate
      - uses: project/require-gcode
  verify:
    needs: [validate]
    steps:
      - id: verify
        uses: cam/verify
        with: { severity: warning }
  gcode:
    needs: [validate]
    steps:
      - uses: cam/gcode
      - uses: cam/sequence
  report:
    needs: [verify, gcode]
    steps:
      - id: review
        uses: ai/prompt
        with:
          prompt: "Summarise risks in this program: ${{ files.toolpaths/op1.json }}"
        continueOnError: true
      - uses: notify/push
        if: always
        with:
          title: "Release check finished"
          body: "${{ steps.review.outputs.text }}"
validarverificarcódigo ginforme (necesita ambos) nivel 0nivel 1 (concurrente)nivel 2
Los trabajos se ejecutan nivel por nivel. Los trabajos en el mismo nivel se ejecutan simultáneamente y un trabajo se ejecuta solo cuando todos los trabajos en su needs tuvo éxito; de lo contrario se informa como skipped.
LlaveNormas
nameObligatorio, 1–128 caracteres.
on.pushOpcional branches y paths listas globales. Una inserción coincide cuando la rama coincide y al menos una ruta modificada coincide.
on.pullRequestOpcional branches globs, comparados con la rama base de la solicitud de extracción cuando se abre.
on.manualCualquier valor (por ejemplo {}) permite el envío desde el escritorio o el compañero móvil.
jobs.<id>Los ID de trabajo comienzan con una letra y pueden contener letras, dígitos, _, y - (como máximo 64 caracteres). Cada trabajo necesita al menos un paso.
needsID de trabajo que deben tener éxito primero. Los ID y ciclos desconocidos se rechazan cuando se analiza el archivo.
steps[].usesUn identificador de paso en minúscula con al menos una barra, como por ejemplo cam/verify.
steps[].idOpcional; único en todo el flujo de trabajo. Requerido para pasos posteriores para leer sus resultados.
steps[].withParámetros de formato libre para el paso. Las cadenas están interpoladas.
steps[].ifsuccess (predeterminado: ejecutar solo si nada falló hasta el momento en el trabajo), failure (ejecutar sólo después de una falla), o always.
steps[].continueOnErrorCuando es verdadero, un error en este paso no marca el trabajo como fallido.

uso de globos * para coincidir dentro de un segmento de ruta y ** para hacer coincidir entre segmentos. Una lista de filtros omitida coincide con todo. toolpaths/*.json partidos toolpaths/a.json pero no toolpaths/x/a.json; toolpaths/** coincide con ambos.

Referencia de paso

Los pasos puros leen solo los archivos de la confirmación que se está verificando, nunca la base de datos activa, por lo que una ejecución informa exactamente sobre el árbol que se envió. Los pasos respaldados por el servicio se registran una vez que existe su servicio. Hasta entonces, nombrar uno es un error grave, no una operación silenciosa.

PasoconSalidasfalla cuando
project/validateningunoissues (0), drawings, workflowsUn archivo JSON de entidad no es válido, un drawings/, components/, o toolpaths/ archivos id no coincide con su nombre de archivo, o name falta.
project/require-gcodeningunotoolpathsCualquier trayectoria en la confirmación no tiene código G.
cam/verifytoolpath?, tolerance?, severity? (error predeterminado, o warning)verified, toolpaths, skippedLa reproducción encuentra un error (o una advertencia, con severity: warning): rápidos en el material, hendiduras, colisiones de vástagos o accesorios, material abandonado. Los programas sin código G o una solicitud de generación almacenada se enumeran en skipped, nunca contó como aprobado.
cam/gcodetoolpath?matched, toolpaths, skippedLa regeneración a partir de la solicitud almacenada no reproduce el código G confirmado (ignorando el sello del encabezado y los espacios en blanco circundantes).
cam/sequencetoolpath?toolpaths, toolsUn número de herramienta nombra dos herramientas diferentes, o una operación de mecanizado de restos. restToolDiameter no es más grande que su toolDiameter.
vcs/commitmessage (requerido), files mapacommit, filesLa copia de trabajo está sucia, hay un camino afuera. .cadcamfun/, o un archivo no es .yml, .yaml, .md, .json, o .txt. Se rechaza un actor de IA main.
notify/pushtitle?, body?, outcome? (success predeterminado, o failure)notifiedNunca falla la carrera. Crea un WORKFLOW_PASSED o WORKFLOW_FAILED notificación para la cuenta de envío, vinculada al historial del proyecto.
ai/promptprompt (requerido), system?, model?text, modelNo hay ningún modelo disponible o la llamada falla. Sólo este paso falla; el veredicto de geometría no se ve afectado.

Malformado with los valores se leen de forma defensiva: se ignora un elemento que no es una cadena donde se espera una cadena, o un número no finito, en lugar de fallar la ejecución. Verifique las salidas para confirmar un filtro como toolpath realmente aplicado.

Salidas e interpolación

Un paso con un id almacena sus resultados en toda la ejecución, por lo que un trabajo puede leer los resultados de los trabajos que needs. Dentro de cualquier cadena en with, ${{ steps.<id>.outputs.<key> }} se reemplaza recursivamente a través de objetos y matrices. Cuando una cadena consta exactamente de una expresión, el valor mantiene su tipo (un número sigue siendo un número). Incrustado en otro texto, el valor se convierte en una cadena y un valor faltante se convierte en una cadena vacía. ai/prompt adicionalmente se expande ${{ files.<path> }} al texto de ese archivo en la confirmación (vacío si el archivo está ausente).

expresión en conValor de salidaResultado
"${{ steps.verify.outputs.verified }}"33 (número)
"Verified ${{ steps.verify.outputs.verified }} programs"3"Verified 3 programs"
"${{ steps.missing.outputs.x }}"ningunoundefined

Ejecutar ciclo de vida y errores.

  1. El evento desencadenante (push, pull request o manual) selecciona flujos de trabajo en el árbol de la referencia, leídos desde la confirmación en lugar de la copia de trabajo.
  2. Cada archivo se analiza. Errores YAML (yaml), errores de esquema (schema), desconocido needs (needs), ciclos (cycle) y duplicar los ID de los pasos (duplicate-step-id) se informan como una ejecución no válida con el motivo.
  3. Cada uses se compara con el registro antes de que se ejecute algo. Un paso desconocido falla la ejecución con Unknown step(s): ..., por lo que un error tipográfico nunca aplica un cambio a medias.
  4. Los trabajos están ordenados en niveles. Cada nivel se ejecuta al mismo tiempo; un trabajo cuyo needs no todos tuvieron éxito se omiten.
  5. Eventos de progreso (job-start, step con estado y salidas o mensaje, job-end) transmite al escritorio y al complemento, y la ejecución persiste con sus eventos.
  6. La ejecución tiene éxito sólo si todos los trabajos se realizaron correctamente. Los trabajos omitidos se consideran no exitosos.

Eventos en vivo workflow.started (con el evento desencadenante) y workflow.finished (success, failure, o cancelled) se publican para cada ejecución.

Pruebas, no adornos.

De los escalones incorporados, solo cam/verify reproduce el programa contra el material y las herramientas. Los demás controles confirman la coherencia de lo cometido. Leer skipped listas: una trayectoria no verificable no es verificada.

Una ejecución completa, rastreada evento por evento

Este flujo de trabajo ejercita todas las reglas del motor a la vez: resultados pasados entre trabajos, un valor completo y una interpolación integrada, continueOnError, if: failure, un trabajo omitido porque falló su dependencia y un trabajo independiente. fue ejecutado con runWorkflow y cuatro controladores de pasos de prueba: demo/measure regresa { volume: 7842.92, part }, demo/check imprime lo que recibió, demo/fail falla con StepError("tolerance exceeded") y demo/notify no devuelve nada.

.cadcamfun/workflows/release-check.yml
name: Release check
on:
  push: { branches: [main, "release/**"], paths: ["parts/**/*.json"] }
  manual: {}
jobs:
  measure:
    steps:
      - id: size
        uses: demo/measure
        with: { part: bracket }
  verify:
    needs: [measure]
    steps:
      - uses: demo/check
        with: { volume: "${{ steps.size.outputs.volume }}", label: "vol=${{ steps.size.outputs.volume }} mm3" }
      - uses: demo/fail
        continueOnError: true
      - uses: demo/fail
      - uses: demo/notify
        if: failure
      - uses: demo/notify
  publish:
    needs: [verify]
    steps:
      - uses: demo/notify
  lint:
    steps:
      - uses: demo/notify
Eventos y resultado, tal como se emiten
levels [["measure","lint"],["verify"],["publish"]]
{"type":"job-start","job":"measure"}
{"type":"step","job":"measure","index":0,"uses":"demo/measure","status":"success","outputs":{"volume":7842.92,"part":"bracket"}}
{"type":"job-end","job":"measure","status":"success"}
{"type":"job-start","job":"lint"}
{"type":"step","job":"lint","index":0,"uses":"demo/notify","status":"success","outputs":{}}
{"type":"job-end","job":"lint","status":"success"}
{"type":"job-start","job":"verify"}
  check got {"volume":7842.92,"label":"vol=7842.92 mm3"}
{"type":"step","job":"verify","index":0,"uses":"demo/check","status":"success","outputs":{"ok":true}}
{"type":"step","job":"verify","index":1,"uses":"demo/fail","status":"failure","message":"Cause([Fail(StepError: tolerance exceeded)])"}
{"type":"step","job":"verify","index":2,"uses":"demo/fail","status":"failure","message":"Cause([Fail(StepError: tolerance exceeded)])"}
{"type":"step","job":"verify","index":3,"uses":"demo/notify","status":"success","outputs":{}}
{"type":"step","job":"verify","index":4,"uses":"demo/notify","status":"skipped"}
{"type":"job-end","job":"verify","status":"failure"}
{"type":"job-end","job":"publish","status":"skipped"}
result {"status":"failure","jobs":{"measure":"success","lint":"success","verify":"failure","publish":"skipped"}}
ObservaciónRegla
measure y lint correr en el primer nivelTrabajos sin needs nivel de formulario 0 y ejecutar simultáneamente
volume llega como el número 7842.92, label como una cuerdaUna cadena que es exactamente una expresión mantiene el tipo de salida; una expresión incrustada está encadenada
El paso 1 falla pero el trabajo continúa normalmentecontinueOnError: true registra el fallo sin marcar el trabajo fallido
El paso 2 falla y marca que el trabajo fallóComportamiento predeterminado
El paso 3 se ejecuta, el paso 4 se omiteif: failure se ejecuta sólo después de una falla; el valor predeterminado if: success se omite después de uno
publish se omite, nunca se iniciaUn trabajo cuyo needs no todos tuvieron éxito emite solo job-end con skipped
En general failureLa ejecución tiene éxito sólo si todos los trabajos son success; un trabajo omitido cuenta como no exitoso

Coincidencia de disparadores, probado

Evento¿Partidos?Por qué
empujar main, cambió parts/a/b.jsonsíPartidos de sucursales; coincidencias de ruta parts/**/*.json
empujar main, cambió README.mdnoNo hay coincidencias de ruta modificadas
empujar release/6.1, cambió parts/x.jsonnoparts/**/*.json compila a ^parts\/.*\/[^/]*\.json$, que necesita un directorio entre parts/ y el archivo
empujar feature/xnoLa sucursal no coincide
manualsímanual es declarado
introducir la solicitud en mainnoNo pullRequest disparador declarado

** necesita un segmento en cada lado aquí

Porque ** se convierte .* entre dos barras literales, parts/**/*.json no coincide con los archivos directamente en parts/. Enumere ambos patrones, parts/*.json y parts/**/*.json, para cubrir ambos.

* coincidencias dentro de un segmento de ruta; ** coincidencias entre segmentos. Omitiendo branches o paths significa que cualquier valor coincide.

Cada error de análisis, reproducido.

códigoProblema de entradaMensaje
yamlYAML con formato incorrecto, como name: [xYAML no válido: Error de sintaxis: Error de análisis de YAML: token inesperado
schemauses: Shell (no en minúscula area/step identificación)SchemaError (se esperaba una cadena que coincidiera con RegExp...) con la ruta ["jobs"]["a"]["steps"][0]
needsneeds: [b] sin trabajo bEl trabajo a necesita un trabajo desconocido b
cyclea necesidades b y b necesidades aLos trabajos de flujo de trabajo forman un ciclo: a, b
duplicate-step-iddos pasos con id: s, incluso en diferentes trabajosLos ID de los pasos deben ser únicos en todo el flujo de trabajo.

En tiempo de ejecución, cualquier uses sin un controlador registrado falla toda la ejecución antes del primer paso, enumerando cada identificación desconocida: Unknown step(s): demo/measure, demo/check, …. Por lo tanto, un error tipográfico nunca aplica a medias un flujo de trabajo.

CampoRegla
name1–128 caracteres
ID de trabajo y pasoPrimero la letra, luego las letras, los dígitos, _ o -; como máximo 64 caracteres
usesSegmentos en minúsculas separados por /, al menos dos segmentos
stepsAl menos uno por trabajo
ifsuccess (por defecto), always, failure

En 3D

Gráfico de trabajo de GitHub Actions Arrastrar para orbitar · desplazarse para hacer zoom · arrastrar con el botón derecho para desplazarse
Cada trabajo en .github/workflows, por necesidades: profundidad a la derecha. Los trabajos marcados con ×6 se despliegan en la matriz de plataformas de seis objetivos; cadenas release.yml confiables → compilación → manifiesto → plataforma de publicación → índice de publicación.