GPLv3's "How to Apply These Terms" asks for a notice in each source file; this is the modern two-line SPDX form of it rather than the full paragraph. 82 files, including tests. The blank line after the header is load-bearing. In Go a comment block immediately preceding `package X` becomes the package doc comment, so without the separator the SPDX lines would be absorbed into the doc for the eleven packages whose doc.go (or main.go) opens with one, and `go doc` would print them. Verified it doesn't.
50 lines
955 B
Go
50 lines
955 B
Go
// SPDX-FileCopyrightText: 2026 LINUXexpert-org
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package preflight
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// Status is a single check's verdict.
|
|
type Status string
|
|
|
|
const (
|
|
StatusOK Status = "ok"
|
|
StatusWarn Status = "warn"
|
|
StatusFail Status = "fail"
|
|
)
|
|
|
|
// CheckResult is one named check's outcome.
|
|
type CheckResult struct {
|
|
Name string
|
|
Status Status
|
|
Detail string
|
|
}
|
|
|
|
// Report is the full set of preflight check outcomes.
|
|
type Report struct {
|
|
Results []CheckResult
|
|
}
|
|
|
|
// Blocking reports whether any check failed hard enough that a run must
|
|
// not proceed.
|
|
func (r Report) Blocking() bool {
|
|
for _, res := range r.Results {
|
|
if res.Status == StatusFail {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (r Report) String() string {
|
|
var b strings.Builder
|
|
for _, res := range r.Results {
|
|
fmt.Fprintf(&b, "[%-4s] %-20s %s\n", strings.ToUpper(string(res.Status)), res.Name, res.Detail)
|
|
}
|
|
return b.String()
|
|
}
|