53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
|
|
package service
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
)
|
||
|
|
|
||
|
|
func (a *App) artifacts() map[string]ArtifactSummary {
|
||
|
|
a.mu.RLock()
|
||
|
|
defer a.mu.RUnlock()
|
||
|
|
result := make(map[string]ArtifactSummary, len(a.artifactStore))
|
||
|
|
for key, value := range a.artifactStore {
|
||
|
|
result[key] = value
|
||
|
|
}
|
||
|
|
return result
|
||
|
|
}
|
||
|
|
|
||
|
|
func (a *App) loadArtifacts() error {
|
||
|
|
data, err := os.ReadFile(a.settings.ArtifactStatePath)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
var artifacts map[string]ArtifactSummary
|
||
|
|
if err := json.Unmarshal(data, &artifacts); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
a.mu.Lock()
|
||
|
|
a.artifactStore = artifacts
|
||
|
|
a.mu.Unlock()
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (a *App) persistArtifacts() error {
|
||
|
|
a.mu.RLock()
|
||
|
|
data, err := json.MarshalIndent(a.artifactStore, "", " ")
|
||
|
|
a.mu.RUnlock()
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
if err := os.MkdirAll(filepath.Dir(a.settings.ArtifactStatePath), 0o755); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return os.WriteFile(a.settings.ArtifactStatePath, data, 0o644)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (a *App) recordArtifact(summary ArtifactSummary) error {
|
||
|
|
a.mu.Lock()
|
||
|
|
a.artifactStore[summary.Node] = summary
|
||
|
|
a.mu.Unlock()
|
||
|
|
return a.persistArtifacts()
|
||
|
|
}
|