Documentation
¶
Index ¶
- func GetDefaultStoragePath() (string, error)
- type ActivityType
- type AuthorFilter
- type BranchFilter
- type DiscussionFilter
- type FileFilter
- type FileStorage
- func (fs *FileStorage) AddSubscription(subscription RepositorySubscription) error
- func (fs *FileStorage) BackupSubscriptions(path string) error
- func (fs *FileStorage) ExportSubscriptions() (*SubscriptionList, error)
- func (fs *FileStorage) GetSubscription(repository string) (*RepositorySubscription, error)
- func (fs *FileStorage) ImportSubscriptions(list SubscriptionList) error
- func (fs *FileStorage) ListSubscriptions() ([]RepositorySubscription, error)
- func (fs *FileStorage) RemoveSubscription(repository string) error
- func (fs *FileStorage) RestoreSubscriptions(path string) error
- func (fs *FileStorage) UpdateSubscription(subscription RepositorySubscription) error
- type Frequency
- type GitHubClient
- type GitHubClientImpl
- func (gc *GitHubClientImpl) CheckRepositoryAccess(ctx context.Context, owner, repo string) (bool, error)
- func (gc *GitHubClientImpl) DeleteRepositorySubscription(ctx context.Context, owner, repo string) error
- func (gc *GitHubClientImpl) GetAuthenticatedUser(ctx context.Context) (*github.User, error)
- func (gc *GitHubClientImpl) GetRawClient() *github.Client
- func (gc *GitHubClientImpl) GetRepository(ctx context.Context, owner, repo string) (*github.Repository, error)
- func (gc *GitHubClientImpl) GetRepositoryEvents(ctx context.Context, owner, repo string) ([]*github.Event, error)
- func (gc *GitHubClientImpl) GetRepositoryNotifications(ctx context.Context, owner, repo string) ([]*github.Notification, error)
- func (gc *GitHubClientImpl) GetRepositorySubscription(ctx context.Context, owner, repo string) (*github.Subscription, error)
- func (gc *GitHubClientImpl) ListOrganizationRepositories(ctx context.Context, org string) ([]*github.Repository, error)
- func (gc *GitHubClientImpl) ListUserOrganizations(ctx context.Context) ([]*github.Organization, error)
- func (gc *GitHubClientImpl) ListUserRepositories(ctx context.Context, user string) ([]*github.Repository, error)
- func (gc *GitHubClientImpl) ListWatchedRepositories(ctx context.Context) ([]*github.Repository, error)
- func (gc *GitHubClientImpl) SetRepositorySubscription(ctx context.Context, owner, repo string, subscription *github.Subscription) (*github.Subscription, error)
- func (gc *GitHubClientImpl) ValidateRepositoryPattern(ctx context.Context, pattern string) ([]string, error)
- type Manager
- func (m *Manager) ExpandPatterns(ctx context.Context) ([]string, error)
- func (m *Manager) GetStats() (*SubscriptionStats, error)
- func (m *Manager) GetSubscription(repository string) (*RepositorySubscription, error)
- func (m *Manager) ListSubscriptions() ([]RepositorySubscription, error)
- func (m *Manager) Subscribe(ctx context.Context, repository string, priority Priority, ...) error
- func (m *Manager) Unsubscribe(repository string) error
- func (m *Manager) UpdateSubscription(repository string, updates SubscriptionUpdates) error
- func (m *Manager) ValidateAccess(ctx context.Context) error
- type Priority
- type RepositorySubscription
- type Storage
- type SubscriptionConfig
- type SubscriptionList
- type SubscriptionStats
- type SubscriptionUpdates
- type ValidationError
- type ValidationResult
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetDefaultStoragePath ¶
GetDefaultStoragePath returns the default storage path
Types ¶
type ActivityType ¶
type ActivityType string
ActivityType represents different types of repository activities
const ( ActivityCommits ActivityType = "commits" ActivityBranches ActivityType = "branches" ActivityPRs ActivityType = "prs" ActivityIssues ActivityType = "issues" ActivityDiscussions ActivityType = "discussions" ActivityReleases ActivityType = "releases" ActivityWiki ActivityType = "wiki" ActivitySecurity ActivityType = "security" )
func AllActivityTypes ¶
func AllActivityTypes() []ActivityType
AllActivityTypes returns all available activity types
type AuthorFilter ¶
type AuthorFilter struct {
// All contributors if true
All bool `json:"all" yaml:"all"`
// Specific usernames to include
Include []string `json:"include" yaml:"include"`
// Specific usernames to exclude
Exclude []string `json:"exclude" yaml:"exclude"`
// Exclude bots
ExcludeBots bool `json:"exclude_bots" yaml:"exclude_bots"`
}
AuthorFilter defines author filtering options
type BranchFilter ¶
type BranchFilter struct {
// All branches if true, otherwise use patterns
All bool `json:"all" yaml:"all"`
// Include main/master branches
MainOnly bool `json:"main_only" yaml:"main_only"`
// Specific branch patterns (glob patterns)
Patterns []string `json:"patterns" yaml:"patterns"`
// Exclude patterns
ExcludePatterns []string `json:"exclude_patterns" yaml:"exclude_patterns"`
}
BranchFilter defines branch filtering options
type DiscussionFilter ¶
type DiscussionFilter struct {
// All discussions if true
All bool `json:"all" yaml:"all"`
// Specific categories to include
Categories []string `json:"categories" yaml:"categories"`
// Exclude categories
ExcludeCategories []string `json:"exclude_categories" yaml:"exclude_categories"`
// Discussion states to monitor (open, closed, all)
States []string `json:"states" yaml:"states"`
// Monitor answered discussions only
AnsweredOnly bool `json:"answered_only" yaml:"answered_only"`
// Monitor unanswered discussions only
UnansweredOnly bool `json:"unanswered_only" yaml:"unanswered_only"`
// Minimum upvotes threshold
MinUpvotes int `json:"min_upvotes" yaml:"min_upvotes"`
// Minimum comments threshold
MinComments int `json:"min_comments" yaml:"min_comments"`
// Keywords to include
Keywords []string `json:"keywords" yaml:"keywords"`
// Keywords to exclude
ExcludeKeywords []string `json:"exclude_keywords" yaml:"exclude_keywords"`
// Monitor discussions you're mentioned in
MentionsOnly bool `json:"mentions_only" yaml:"mentions_only"`
// Monitor discussions you're participating in
ParticipatingOnly bool `json:"participating_only" yaml:"participating_only"`
}
DiscussionFilter defines discussion filtering options
type FileFilter ¶
type FileFilter struct {
// Include patterns (glob patterns)
Include []string `json:"include" yaml:"include"`
// Exclude patterns (glob patterns)
Exclude []string `json:"exclude" yaml:"exclude"`
// File extensions to include
Extensions []string `json:"extensions" yaml:"extensions"`
// Paths to include
Paths []string `json:"paths" yaml:"paths"`
}
FileFilter defines file pattern filtering
type FileStorage ¶
type FileStorage struct {
// contains filtered or unexported fields
}
FileStorage implements Storage using encrypted files
func NewFileStorage ¶
func NewFileStorage(filePath, password string) (*FileStorage, error)
NewFileStorage creates a new file-based storage
func (*FileStorage) AddSubscription ¶
func (fs *FileStorage) AddSubscription(subscription RepositorySubscription) error
AddSubscription adds a new subscription
func (*FileStorage) BackupSubscriptions ¶
func (fs *FileStorage) BackupSubscriptions(path string) error
BackupSubscriptions creates a backup of subscriptions
func (*FileStorage) ExportSubscriptions ¶
func (fs *FileStorage) ExportSubscriptions() (*SubscriptionList, error)
ExportSubscriptions exports all subscriptions
func (*FileStorage) GetSubscription ¶
func (fs *FileStorage) GetSubscription(repository string) (*RepositorySubscription, error)
GetSubscription retrieves a specific subscription
func (*FileStorage) ImportSubscriptions ¶
func (fs *FileStorage) ImportSubscriptions(list SubscriptionList) error
ImportSubscriptions imports subscriptions from a list
func (*FileStorage) ListSubscriptions ¶
func (fs *FileStorage) ListSubscriptions() ([]RepositorySubscription, error)
ListSubscriptions returns all subscriptions
func (*FileStorage) RemoveSubscription ¶
func (fs *FileStorage) RemoveSubscription(repository string) error
RemoveSubscription removes a subscription
func (*FileStorage) RestoreSubscriptions ¶
func (fs *FileStorage) RestoreSubscriptions(path string) error
RestoreSubscriptions restores subscriptions from a backup
func (*FileStorage) UpdateSubscription ¶
func (fs *FileStorage) UpdateSubscription(subscription RepositorySubscription) error
UpdateSubscription updates an existing subscription
type Frequency ¶
type Frequency int
Frequency defines notification frequency
func ParseFrequency ¶
ParseFrequency parses a frequency string
type GitHubClient ¶
type GitHubClient interface {
GetRepository(ctx context.Context, owner, repo string) (*github.Repository, error)
ListUserRepositories(ctx context.Context, user string) ([]*github.Repository, error)
ListOrganizationRepositories(ctx context.Context, org string) ([]*github.Repository, error)
CheckRepositoryAccess(ctx context.Context, owner, repo string) (bool, error)
}
GitHubClient interface for GitHub operations
type GitHubClientImpl ¶
type GitHubClientImpl struct {
// contains filtered or unexported fields
}
GitHubClientImpl implements GitHubClient using go-github
func NewGitHubClient ¶
func NewGitHubClient(ctx context.Context) (*GitHubClientImpl, error)
NewGitHubClient creates a new GitHub client for subscriptions
func (*GitHubClientImpl) CheckRepositoryAccess ¶
func (gc *GitHubClientImpl) CheckRepositoryAccess(ctx context.Context, owner, repo string) (bool, error)
CheckRepositoryAccess checks if we have access to a repository
func (*GitHubClientImpl) DeleteRepositorySubscription ¶
func (gc *GitHubClientImpl) DeleteRepositorySubscription(ctx context.Context, owner, repo string) error
DeleteRepositorySubscription deletes the subscription for a repository
func (*GitHubClientImpl) GetAuthenticatedUser ¶
GetAuthenticatedUser gets information about the authenticated user
func (*GitHubClientImpl) GetRawClient ¶
func (gc *GitHubClientImpl) GetRawClient() *github.Client
GetRawClient returns the underlying GitHub client
func (*GitHubClientImpl) GetRepository ¶
func (gc *GitHubClientImpl) GetRepository(ctx context.Context, owner, repo string) (*github.Repository, error)
GetRepository retrieves repository information
func (*GitHubClientImpl) GetRepositoryEvents ¶
func (gc *GitHubClientImpl) GetRepositoryEvents(ctx context.Context, owner, repo string) ([]*github.Event, error)
GetRepositoryEvents gets recent events for a repository
func (*GitHubClientImpl) GetRepositoryNotifications ¶
func (gc *GitHubClientImpl) GetRepositoryNotifications(ctx context.Context, owner, repo string) ([]*github.Notification, error)
GetRepositoryNotifications gets notifications for a repository
func (*GitHubClientImpl) GetRepositorySubscription ¶
func (gc *GitHubClientImpl) GetRepositorySubscription(ctx context.Context, owner, repo string) (*github.Subscription, error)
GetRepositorySubscription gets the current subscription status for a repository
func (*GitHubClientImpl) ListOrganizationRepositories ¶
func (gc *GitHubClientImpl) ListOrganizationRepositories(ctx context.Context, org string) ([]*github.Repository, error)
ListOrganizationRepositories lists repositories for an organization
func (*GitHubClientImpl) ListUserOrganizations ¶
func (gc *GitHubClientImpl) ListUserOrganizations(ctx context.Context) ([]*github.Organization, error)
ListUserOrganizations lists organizations for the authenticated user
func (*GitHubClientImpl) ListUserRepositories ¶
func (gc *GitHubClientImpl) ListUserRepositories(ctx context.Context, user string) ([]*github.Repository, error)
ListUserRepositories lists repositories for a user
func (*GitHubClientImpl) ListWatchedRepositories ¶
func (gc *GitHubClientImpl) ListWatchedRepositories(ctx context.Context) ([]*github.Repository, error)
ListWatchedRepositories lists repositories the authenticated user is watching
func (*GitHubClientImpl) SetRepositorySubscription ¶
func (gc *GitHubClientImpl) SetRepositorySubscription(ctx context.Context, owner, repo string, subscription *github.Subscription) (*github.Subscription, error)
SetRepositorySubscription sets the subscription status for a repository
func (*GitHubClientImpl) ValidateRepositoryPattern ¶
func (gc *GitHubClientImpl) ValidateRepositoryPattern(ctx context.Context, pattern string) ([]string, error)
ValidateRepositoryPattern validates if a repository pattern is accessible
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager handles repository subscription operations
func NewManager ¶
func NewManager(storage Storage, client GitHubClient) *Manager
NewManager creates a new subscription manager
func (*Manager) ExpandPatterns ¶
ExpandPatterns expands wildcard patterns to actual repositories
func (*Manager) GetStats ¶
func (m *Manager) GetStats() (*SubscriptionStats, error)
GetStats returns subscription statistics
func (*Manager) GetSubscription ¶
func (m *Manager) GetSubscription(repository string) (*RepositorySubscription, error)
GetSubscription retrieves a specific subscription
func (*Manager) ListSubscriptions ¶
func (m *Manager) ListSubscriptions() ([]RepositorySubscription, error)
ListSubscriptions returns all subscriptions
func (*Manager) Subscribe ¶
func (m *Manager) Subscribe(ctx context.Context, repository string, priority Priority, config SubscriptionConfig) error
Subscribe adds a new repository subscription
func (*Manager) Unsubscribe ¶
Unsubscribe removes a repository subscription
func (*Manager) UpdateSubscription ¶
func (m *Manager) UpdateSubscription(repository string, updates SubscriptionUpdates) error
UpdateSubscription updates an existing subscription
type RepositorySubscription ¶
type RepositorySubscription struct {
// Repository full name (owner/repo) or pattern (owner/*)
Repository string `json:"repository" yaml:"repository"`
// Whether this is a wildcard pattern
IsPattern bool `json:"is_pattern" yaml:"is_pattern"`
// Priority level
Priority Priority `json:"priority" yaml:"priority"`
// Subscription configuration
Config SubscriptionConfig `json:"config" yaml:"config"`
// Whether the subscription is active
Active bool `json:"active" yaml:"active"`
// Creation timestamp
CreatedAt time.Time `json:"created_at" yaml:"created_at"`
// Last updated timestamp
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at"`
// Last access check (for permission validation)
LastAccessCheck time.Time `json:"last_access_check" yaml:"last_access_check"`
// Whether we have access to this repository
HasAccess bool `json:"has_access" yaml:"has_access"`
// Access error message if any
AccessError string `json:"access_error,omitempty" yaml:"access_error,omitempty"`
// Metadata for additional information
Metadata map[string]interface{} `json:"metadata,omitempty" yaml:"metadata,omitempty"`
}
RepositorySubscription represents a subscription to a repository
type Storage ¶
type Storage interface {
AddSubscription(subscription RepositorySubscription) error
RemoveSubscription(repository string) error
GetSubscription(repository string) (*RepositorySubscription, error)
UpdateSubscription(subscription RepositorySubscription) error
ListSubscriptions() ([]RepositorySubscription, error)
ExportSubscriptions() (*SubscriptionList, error)
ImportSubscriptions(list SubscriptionList) error
BackupSubscriptions(path string) error
RestoreSubscriptions(path string) error
}
Storage interface for subscription persistence
type SubscriptionConfig ¶
type SubscriptionConfig struct {
// Activity types to monitor
ActivityTypes []ActivityType `json:"activity_types" yaml:"activity_types"`
// Notification frequency
Frequency Frequency `json:"frequency" yaml:"frequency"`
// Branch filtering
BranchFilter BranchFilter `json:"branch_filter" yaml:"branch_filter"`
// Author filtering
AuthorFilter AuthorFilter `json:"author_filter" yaml:"author_filter"`
// File pattern filtering
FileFilter FileFilter `json:"file_filter" yaml:"file_filter"`
// Discussion filtering
DiscussionFilter DiscussionFilter `json:"discussion_filter" yaml:"discussion_filter"`
// Custom webhook URL (optional)
WebhookURL string `json:"webhook_url,omitempty" yaml:"webhook_url,omitempty"`
// Custom notification template (optional)
Template string `json:"template,omitempty" yaml:"template,omitempty"`
}
SubscriptionConfig holds the configuration for a repository subscription
func DefaultSubscriptionConfig ¶
func DefaultSubscriptionConfig() SubscriptionConfig
DefaultSubscriptionConfig returns a default subscription configuration
type SubscriptionList ¶
type SubscriptionList struct {
// Version for compatibility
Version string `json:"version" yaml:"version"`
// Subscriptions
Subscriptions []RepositorySubscription `json:"subscriptions" yaml:"subscriptions"`
// Last updated timestamp
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at"`
// Metadata
Metadata map[string]interface{} `json:"metadata,omitempty" yaml:"metadata,omitempty"`
}
SubscriptionList represents a collection of repository subscriptions
type SubscriptionStats ¶
type SubscriptionStats struct {
Total int `json:"total"`
Active int `json:"active"`
Inactive int `json:"inactive"`
Patterns int `json:"patterns"`
Repositories int `json:"repositories"`
Critical int `json:"critical"`
Normal int `json:"normal"`
Low int `json:"low"`
AccessErrors int `json:"access_errors"`
LastUpdated time.Time `json:"last_updated"`
}
SubscriptionStats provides statistics about subscriptions
type SubscriptionUpdates ¶
type SubscriptionUpdates struct {
Priority *Priority `json:"priority,omitempty"`
Config *SubscriptionConfig `json:"config,omitempty"`
Active *bool `json:"active,omitempty"`
}
SubscriptionUpdates represents updates to a subscription
type ValidationError ¶
ValidationError represents a subscription validation error
func (ValidationError) Error ¶
func (e ValidationError) Error() string
type ValidationResult ¶
type ValidationResult struct {
Valid bool `json:"valid"`
Errors []ValidationError `json:"errors,omitempty"`
}
ValidationResult holds the result of subscription validation