added ai prompt to gitignore file
This commit is contained in:
+73
-32
@@ -9,41 +9,81 @@ Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Planned — Phase 4 ( Artifacts + Git HTTP(S)/SSH Support + Releases Page)
|
||||
### Planned — Phase 5 (AI Diagnostics + Deployment Promotions + Rollback Visualization)
|
||||
- AI-powered pipeline failure diagnostics
|
||||
- Deployment promotion workflows (manual + automated)
|
||||
- Rollback visualization and timeline
|
||||
|
||||
### 4A. Artifacts
|
||||
- Signed artifacts (Sigstore/Cosign)
|
||||
- SBOM generation (CycloneDX/SPDX)
|
||||
- OCI container registry
|
||||
- Secret scanning (commit-level pattern detection)
|
||||
- Dependency vulnerability scanning
|
||||
- Cross-instance pull requests (ForgeFed ActivityPub extension)
|
||||
---
|
||||
|
||||
### 4B. Git HTTP(S)/SSH Support
|
||||
## [1.0.0] — 2026-05-13
|
||||
|
||||
### 4C. Releases Page
|
||||
- Goal:
|
||||
- Make releases operationally meaningful.
|
||||
- Build:
|
||||
- releases
|
||||
- release notes
|
||||
- release assets
|
||||
- changelog generation
|
||||
- release timelines
|
||||
- release channels
|
||||
- Add:
|
||||
- signed artifacts
|
||||
- rollback metadata
|
||||
- deployment associations
|
||||
- UI:
|
||||
- Release page should show:
|
||||
- version
|
||||
- artifacts
|
||||
- deployments
|
||||
- timeline
|
||||
- health
|
||||
Phase 4 complete. SBOM generation, secret scanning, dependency vulnerability scanning, signed artifacts, and OCI registry are operational.
|
||||
|
||||
### Added — SBOM Generation (`internal/domain/sbom/`)
|
||||
- **`Generator`** — subscribes to `pipeline.completed` events and auto-generates CycloneDX 1.4 SBOM documents for every successful pipeline run; also supports on-demand generation via `GenerateOnDemand`
|
||||
- **6 manifest parsers**: `go.mod`, `package.json`, `requirements.txt`, `Cargo.toml`, `Gemfile.lock`, `pom.xml` — lightweight line-scanning, no external parser dependencies
|
||||
- **API endpoints** — `GET /sbom`, `GET /sbom/document`, `GET /runs/{runID}/sbom`, `GET /runs/{runID}/sbom/document`, `POST /sbom/generate?ref=&runID=`
|
||||
- **Database** — migration `016_sbom` adds `SBOMReport` model with CycloneDX document body
|
||||
- Automatic generation on pipeline completion now also fires directly from the orchestrator (not solely via NATS), ensuring SBOMs are generated even when NATS is unavailable
|
||||
|
||||
### Added — Secret Scanning (`internal/domain/scanning/`)
|
||||
- **`Scanner`** — subscribes to `push.received` events, scans git diffs against 15 regex patterns for high/medium severity secrets
|
||||
- **Secret patterns**: AWS keys, GitHub/GitLab tokens, generic API keys, Bearer tokens, Slack tokens, Google API keys, Google service accounts, SSH private keys, JWTs, NPM tokens, PostgreSQL/Redis connection strings, generic passwords
|
||||
- **API endpoints** — `GET /secrets/leaks`, `POST /secrets/leaks/{leakID}/dismiss` (repo-scoped), `GET /api/v1/secrets/leaks` (global admin)
|
||||
- **Database** — migration `018_scanning` adds `SecretLeak` model
|
||||
|
||||
### Added — Vulnerability Scanning (`internal/domain/vulnscan/`)
|
||||
- **`Scanner`** — triggers on-demand scans against the OSV API (`api.osv.dev/v1`); supports scanning by PURL or by fetching the latest SBOM and scanning all components
|
||||
- **OSV client** — HTTP client with 30-second timeout, queries OSV database for CVEs by PURL or ecosystem+name, extracts CVSS scores and fixed version ranges
|
||||
- **API endpoints** — `GET /vulnerabilities`, `POST /vulnerabilities/scan`, `POST /vulnerabilities/{findingID}/dismiss` (repo-scoped), `GET /api/v1/vulnerabilities` (global admin)
|
||||
- **Database** — migration `019_vulnscan` adds `VulnerabilityFinding` model
|
||||
- Findings deduplicated by `(vuln_id, purl, repo_id)`
|
||||
|
||||
### Added — Artifact Signing (`internal/domain/signing/`)
|
||||
- **`KeyStore`** — ECDSA P-256 signing and verification; produces self-verifying `Bundle` carrying payload, signature (ASN.1 DER), and public key PEM
|
||||
- `Sign(artifactID, name, rawContent)` — computes SHA-256 digest, signs, returns signed `Bundle` with key ID fingerprint
|
||||
- `Verify(bundleJSON)` — extracts public key from bundle, verifies ECDSA signature, returns `VerifyResult` with key-matching check
|
||||
- `Generate()` — creates ephemeral ECDSA P-256 key when `ARTIFACT_SIGNING_KEY` env var is unset (logs warning; signatures lost on restart unless persisted)
|
||||
- **API endpoints** — `GET /artifacts/{artifactID}/signature`, `GET /artifacts/{artifactID}/verify`
|
||||
- **Database** — migration `015_signing` adds `ArtifactSignature` model
|
||||
|
||||
### Added — OCI Registry (`internal/domain/oci/`)
|
||||
- **`Registry`** — content-addressable on-disk blob store implementing OCI Distribution Spec v1.1
|
||||
- Storage layout: `{root}/blobs/sha256/<hex>` for blobs, `{root}/uploads/<uuid>` for in-progress uploads
|
||||
- Full upload session lifecycle: start (POST), append chunk (PATCH), finalize with digest verification (PUT), cancel (DELETE), offset query (GET)
|
||||
- 13 OCI distribution error codes defined (`ErrBlobUnknown`, `ErrDigestInvalid`, `ErrManifestInvalid`, etc.)
|
||||
- **API handlers** (`internal/api/handlers/oci.go`, 525 lines) — full `/v2/{name}/{kind}/{ref}` routing: manifest push/get/delete, blob HEAD/get/delete, tag listing, chunked upload
|
||||
- **Database** — migration `017_oci` adds `OCIRepository`, `OCIManifest`, `OCITag`, `OCIBlob`, `OCIUpload` models
|
||||
- Registry is consumed by standard OCI tools (Docker, Podman, Skopeo, containerd)
|
||||
|
||||
### Added — Unified Security Page (`/repos/:owner/:repo/security`)
|
||||
- **`RepoSecurityPage`** — single-page view combining SBOM status, secret leak detection, and vulnerability findings
|
||||
- SBOM section: displays existing SBOM metadata with download button, or "Generate SBOM" form with branch/SHA input
|
||||
- Secret Leaks section: lists leaks with severity badge, pattern name, commit SHA, ref, match sample, dismiss button
|
||||
- Vulnerabilities section: lists findings with CVSS severity (CRITICAL/HIGH/MEDIUM/LOW), vuln ID, score, summary, PURL, version, fix suggestion, dismiss button; "Scan now" trigger
|
||||
- **Route** added in `App.tsx`, nav link added in `RepoPage.tsx` tab bar
|
||||
|
||||
### Added — Pipeline Run SBOM Integration
|
||||
- `PipelineRunPage` shows per-run SBOM section: metadata (components, SHA, generation time) + download button
|
||||
- "Generate SBOM" button for completed/failed runs that lack one
|
||||
- `useRunSBOM` / `useGenerateSBOM` hooks in `frontend/src/api/queries/sbom.ts`
|
||||
- 404 from `useRunSBOM` handled gracefully (returns `null` instead of throwing)
|
||||
|
||||
### Added — Database Models
|
||||
- Migration `016_sbom` — `SBOMReport` (repoId, runId, sha, format, componentCount, bomDocument, generatedAt)
|
||||
- Migration `017_oci` — `OCIRepository`, `OCIManifest`, `OCITag`, `OCIBlob`, `OCIUpload`
|
||||
- Migration `018_scanning` — `SecretLeak` (repoId, commitSha, ref, patternName, description, severity, matchSample, dismissed, dismissedBy, dismissedAt, detectedAt)
|
||||
- Migration `019_vulnscan` — `VulnerabilityFinding` (repoId, vulnId, purl, version, summary, details, cvssScore, fixedVersion, dismissed, dismissedBy, dismissedAt, detectedAt)
|
||||
- Migration `020_forgefed` — repository + pull request column updates
|
||||
|
||||
### Fixed
|
||||
- SBOM per-run download endpoint (`/runs/{runID}/sbom/document`) was registered at the wrong router nesting level, causing a route conflict with the `GetLatestDocument` handler. Moved into the correct `/runs/{runID}` route block.
|
||||
- `username` context key extraction in scanning and vulnerability handlers changed from raw string `"user"` to typed `middleware.ContextKeyUsername`
|
||||
- Nil-safe `Needs` marshalling in orchestrator job creation
|
||||
- Nil-safe findings response in vulnerability scan API
|
||||
- `GenerateOnDemand` SBOM cache key now includes `runID` to prevent per-run generation from being shadowed by prior on-demand generation
|
||||
|
||||
> NOT just markdown notes.
|
||||
---
|
||||
|
||||
## [0.9.0] — 2026-05-12
|
||||
@@ -361,7 +401,8 @@ Initial development milestone. Core Git hosting, collaboration, and frontend SPA
|
||||
|
||||
---
|
||||
|
||||
[Unreleased]: https://github.com/forgeo/forgebucket/compare/v0.9.0...HEAD
|
||||
[Unreleased]: https://github.com/forgeo/forgebucket/compare/v1.0.0...HEAD
|
||||
[1.0.0]: https://github.com/forgeo/forgebucket/compare/v0.9.0...v1.0.0
|
||||
[0.9.0]: https://github.com/forgeo/forgebucket/compare/v0.8.0...v0.9.0
|
||||
[0.8.0]: https://github.com/forgeo/forgebucket/compare/v0.7.0...v0.8.0
|
||||
[0.7.0]: https://github.com/forgeo/forgebucket/compare/v0.6.0...v0.7.0
|
||||
|
||||
Reference in New Issue
Block a user