docs: READMEs completos, estructura final de arquetipos
Mueve los reusable workflows a .gitea/workflows/ (restriccion real de Gitea: workflow_call no puede vivir en una ruta arbitraria, confirmado en vivo). Corrige todos los 'uses:' cross-repo a URL absoluta (https://gitea.cruzcloud.net/...) -- la forma corta de GitHub se resuelve contra github.com en esta instancia, confirmado en vivo con un test real (reusable workflow + composite action ejecutando gitleaks de punta a punta). Limpia los archivos de prueba.
This commit is contained in:
1 parent
018d424a1c
commit
a3c022c024
11 files changed
+514
-49
No files matched your search
@@ -0,0 +1,66 @@
|
||||
# DevSecOps snippets — composite actions
|
||||
|
||||
Cada subcarpeta es un *composite action* real de Gitea Actions
|
||||
(`action.yml`), no un fragmento de YAML para copiar/pegar — se invocan
|
||||
con `uses:` como cualquier action de GitHub.
|
||||
|
||||
**Nota sobre la estructura:** el pedido original de este repo era una
|
||||
lista plana (`gitleaks-step.yaml`, `trivy-image-step.yaml`, etc.). Se
|
||||
ajustó a `<nombre>/action.yml` porque es el único layout que Gitea (y
|
||||
GitHub) reconocen como composite action invocable — un archivo con
|
||||
nombre libre no se puede referenciar con `uses:`, tiene que ser
|
||||
literalmente `action.yml` (o `action.yaml`) en su propia carpeta.
|
||||
|
||||
## Cómo invocar uno desde tu pipeline
|
||||
|
||||
```yaml
|
||||
steps:
|
||||
- uses: https://gitea.cruzcloud.net/devops/platform-templates/devsecops-snippets/gitleaks-step@main
|
||||
with:
|
||||
source: mi-app/
|
||||
```
|
||||
|
||||
**La URL absoluta (`https://gitea.cruzcloud.net/...`) no es opcional.**
|
||||
La forma corta de GitHub (`devops/platform-templates/...@main`) se
|
||||
resuelve contra **github.com** por default en esta instancia de Gitea
|
||||
(`DEFAULT_ACTIONS_URL` sin configurar = `github`), no contra el propio
|
||||
Gitea — confirmado en vivo armando este repo: con la forma corta, el
|
||||
runner intentó clonar `https://github.com/devops/platform-templates`
|
||||
(no existe) y falló con "Repository not found". Con la URL absoluta
|
||||
`https://gitea.cruzcloud.net/...` sí resuelve correctamente contra la
|
||||
instancia local. Ver
|
||||
`../pipelines/archetype-nextjs-frontend/README.md` para más contexto.
|
||||
|
||||
## Los 6 snippets
|
||||
|
||||
| Snippet | Qué hace | Bloquea por default |
|
||||
|---|---|---|
|
||||
| `gitleaks-step` | Secretos commiteados en el árbol de archivos | Sí |
|
||||
| `trivy-iac-step` | Misconfiguraciones en manifiestos K8s | No (auditoría) |
|
||||
| `trivy-image-step` | CVEs de la imagen construida | CRITICAL sí, HIGH no |
|
||||
| `semgrep-step` | SAST, ruleset configurable por `with.configs` | No (auditoría) |
|
||||
| `syft-sbom-step` | Genera y publica el SBOM de la imagen | N/A (no bloquea) |
|
||||
| `cosign-sign-verify-step` | Firma por digest + smoke test de verificación | Sí (firma inválida = falla) |
|
||||
|
||||
Cada `action.yml` tiene sus `inputs:` documentados inline — no hay
|
||||
READMEs individuales por snippet, son chicos y el propio archivo ya
|
||||
explica cada input.
|
||||
|
||||
## `cosign-sign-verify-step`: un composite action no puede leer `secrets`
|
||||
|
||||
Restricción real de Gitea/GitHub Actions, no de este repo: un composite
|
||||
action **no tiene acceso directo** al contexto `secrets` del caller. El
|
||||
workflow que lo invoca tiene que pasarlos explícitos como `with:`:
|
||||
|
||||
```yaml
|
||||
- uses: https://gitea.cruzcloud.net/devops/platform-templates/devsecops-snippets/cosign-sign-verify-step@main
|
||||
with:
|
||||
image_name: ${{ env.IMAGE_NAME }}
|
||||
digest: ${{ steps.push.outputs.digest }}
|
||||
public_key_path: ${{ env.APP_DIR }}/cosign.pub
|
||||
cosign_private_key: ${{ secrets.COSIGN_PRIVATE_KEY }}
|
||||
cosign_password: ${{ secrets.COSIGN_PASSWORD }}
|
||||
```
|
||||
|
||||
Los 3 arquetipos de `pipelines/` ya lo hacen así — es solo relevante si
|
||||
armás tu propio pipeline a mano usando estos snippets sueltos.
|
||||
Reference in new issue
Block a user