mirror of
https://github.com/j3ssie/osmedeus.git
synced 2026-09-28 04:24:59 +02:00
- chore: fix code style and remove unused error handling (add blank checks for closed file handles) - chore: align struct field padding in multiple files for consistency - fix: add 386 architecture support to goreleaser build config - feat: add docker-publish target to Makefile for publishing to Docker Hub - feat: refactor first-time setup into reusable installRequiredBinaries helper function - feat: add initialization marker tracking for first-time setup completion - feat: enhance workflow YAML detection to skip non-workflow files and hidden directories - feat: improve database column display defaults (assets and vulnerabilities tables) - feat: add fallback mechanism to install.sh for version detection failures - fix: correct tarball filename generation by stripping 'v' prefix - chore: update Docker base image from golang:1.22 to golang:1.25 - chore: update goreleaser release flags and simplify Docker build naming - chore: fix import ordering across multiple files (alphabetical consistency) - chore: improve install script with better version display formatting - chore: reduce binaries per row from 10 to 6 in CLI output for better readability
100 lines
2.1 KiB
Go
100 lines
2.1 KiB
Go
package updater
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// MockSource is a mock implementation of Source for testing
|
|
type MockSource struct {
|
|
Releases []*Release
|
|
DetectError error
|
|
UpdateError error
|
|
DetectCalled int
|
|
UpdateCalled int
|
|
LastUpdateTo *Release
|
|
}
|
|
|
|
// NewMockSource creates a mock source with predefined releases
|
|
func NewMockSource() *MockSource {
|
|
return &MockSource{
|
|
Releases: []*Release{},
|
|
}
|
|
}
|
|
|
|
// AddRelease adds a release to the mock
|
|
func (m *MockSource) AddRelease(rel *Release) {
|
|
m.Releases = append(m.Releases, rel)
|
|
}
|
|
|
|
// SetLatest sets the latest release
|
|
func (m *MockSource) SetLatest(version, assetURL string, prerelease bool) {
|
|
m.Releases = append(m.Releases, &Release{
|
|
Version: version,
|
|
AssetURL: assetURL,
|
|
Prerelease: prerelease,
|
|
PublishedAt: time.Now(),
|
|
})
|
|
}
|
|
|
|
// SetError sets the error to return from DetectLatest/DetectVersion
|
|
func (m *MockSource) SetError(err error) {
|
|
m.DetectError = err
|
|
}
|
|
|
|
// SetUpdateError sets the error to return from UpdateTo
|
|
func (m *MockSource) SetUpdateError(err error) {
|
|
m.UpdateError = err
|
|
}
|
|
|
|
func (m *MockSource) DetectLatest(ctx context.Context, owner, repo string) (*Release, error) {
|
|
m.DetectCalled++
|
|
if m.DetectError != nil {
|
|
return nil, m.DetectError
|
|
}
|
|
|
|
// Find the latest non-prerelease
|
|
var latest *Release
|
|
for _, rel := range m.Releases {
|
|
if rel.Prerelease {
|
|
continue
|
|
}
|
|
if latest == nil {
|
|
latest = rel
|
|
continue
|
|
}
|
|
isNewer, err := IsNewerVersion(rel.Version, latest.Version)
|
|
if err == nil && isNewer {
|
|
latest = rel
|
|
}
|
|
}
|
|
return latest, nil
|
|
}
|
|
|
|
func (m *MockSource) DetectVersion(ctx context.Context, owner, repo, version string) (*Release, error) {
|
|
m.DetectCalled++
|
|
if m.DetectError != nil {
|
|
return nil, m.DetectError
|
|
}
|
|
|
|
// Find matching version
|
|
version = strings.TrimPrefix(version, "v")
|
|
for _, rel := range m.Releases {
|
|
relVersion := strings.TrimPrefix(rel.Version, "v")
|
|
if relVersion == version {
|
|
return rel, nil
|
|
}
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func (m *MockSource) UpdateTo(ctx context.Context, owner, repo string, release *Release) error {
|
|
m.UpdateCalled++
|
|
m.LastUpdateTo = release
|
|
if m.UpdateError != nil {
|
|
return m.UpdateError
|
|
}
|
|
return nil
|
|
}
|