The framework lives at ../go in the canonical workspace layout. The ../core path was a symlink-specific workaround that broke the CLI go.work build. Co-Authored-By: Charon <charon@lethean.io>
86 lines
2.4 KiB
Markdown
86 lines
2.4 KiB
Markdown
# CLAUDE.md — go-devops Agent Instructions
|
|
|
|
You are a dedicated domain expert for `forge.lthn.ai/core/go-devops`. Virgil (in core/go) orchestrates your work via TODO.md. Pick up tasks in phase order, mark `[x]` when done, commit and push.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
go test ./... # Run all tests
|
|
go test -v -run TestName ./... # Single test
|
|
go test -race ./... # Race detector
|
|
go vet ./... # Static analysis
|
|
```
|
|
|
|
## Local Dependencies
|
|
|
|
| Module | Local Path | Notes |
|
|
|--------|-----------|-------|
|
|
| `forge.lthn.ai/core/go` | `../go` | Framework (core.E, io.Medium, config, i18n, log) |
|
|
|
|
## Key Interfaces
|
|
|
|
```go
|
|
// build/builders/
|
|
type Builder interface {
|
|
Name() string
|
|
Detect(fs io.Medium, dir string) (bool, error)
|
|
Build(ctx context.Context, cfg *Config, targets []Target) ([]Artifact, error)
|
|
}
|
|
|
|
// release/publishers/
|
|
type Publisher interface {
|
|
Name() string
|
|
Publish(ctx context.Context, release *Release, pubCfg PublisherConfig, relCfg ReleaseConfig, dryRun bool) error
|
|
}
|
|
|
|
// container/
|
|
type Hypervisor interface {
|
|
Name() string
|
|
Available() bool
|
|
Run(ctx context.Context, opts RunOptions) (*process.Handle, error)
|
|
}
|
|
|
|
// devops/sources/
|
|
type ImageSource interface {
|
|
Name() string
|
|
Available() bool
|
|
Download(ctx context.Context, name, version string, progress func(downloaded, total int64)) (string, error)
|
|
}
|
|
|
|
// build/signing/
|
|
type Signer interface {
|
|
Name() string
|
|
Available() bool
|
|
Sign(filePath, keyID string) ([]byte, error)
|
|
}
|
|
|
|
// sdk/generators/
|
|
type Generator interface {
|
|
Language() string
|
|
Generate(ctx context.Context, spec, outputDir string, config *Config) error
|
|
}
|
|
```
|
|
|
|
## Coding Standards
|
|
|
|
- **UK English**: colour, organisation, centre
|
|
- **Tests**: testify assert/require, `_Good`/`_Bad`/`_Ugly` naming convention
|
|
- **Conventional commits**: `feat(ansible):`, `fix(infra):`, `refactor(build):`
|
|
- **Co-Author**: `Co-Authored-By: Virgil <virgil@lethean.io>`
|
|
- **Licence**: EUPL-1.2
|
|
- **Imports**: stdlib → forge.lthn.ai → third-party, each group separated by blank line
|
|
|
|
## Forge
|
|
|
|
- **Repo**: `forge.lthn.ai/core/go-devops`
|
|
- **Push via SSH**: `git push forge main` (remote: `ssh://git@forge.lthn.ai:2223/core/go-devops.git`)
|
|
|
|
## Documentation
|
|
|
|
- Architecture: `docs/architecture.md`
|
|
- Development guide: `docs/development.md`
|
|
- Project history: `docs/history.md`
|
|
|
|
## Task Queue
|
|
|
|
See `TODO.md` for prioritised work.
|