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.
26 lines
904 B
Go
26 lines
904 B
Go
// SPDX-FileCopyrightText: 2026 LINUXexpert-org
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package preflight
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// LooksClustered does a conservative, heuristic scan for cluster-related
|
|
// configuration. It exists to force a manual confirmation gate (see
|
|
// ARCHITECTURE.md §4.1's cluster gate: one live node on the old version
|
|
// during migration corrupts a shared store), not to enumerate peers
|
|
// precisely. A false positive just costs an extra confirmation prompt; a
|
|
// false negative is the dangerous direction, so this errs toward matching
|
|
// broadly rather than requiring an exact schema match.
|
|
func LooksClustered(configPath string) (bool, error) {
|
|
data, err := os.ReadFile(configPath)
|
|
if err != nil {
|
|
return false, fmt.Errorf("preflight: read config %s: %w", configPath, err)
|
|
}
|
|
return strings.Contains(strings.ToLower(string(data)), "cluster"), nil
|
|
}
|