@@ -350,15 +350,18 @@ type Config struct {
350350
351351 KnownURLs map [string ]struct {}
352352
353+ // Hardcoded config
354+ HardcodedData map [string ]any
355+
353356 // Merged data.
354357 Data map [string ]any
355358
356359 ProjectID string
357360}
358361
359362// New creates a new configuration from the given paths.
360- func New (logger log.Logger , paths []string ) (* Config , error ) {
361- cfg := & Config {logger : logger , Paths : []* urlConfig {}, KnownURLs : map [string ]struct {}{}, Repo : & Repo {}}
363+ func New (logger log.Logger , paths []string , hardcodedData map [ string ] any ) (* Config , error ) {
364+ cfg := & Config {logger : logger , Paths : []* urlConfig {}, KnownURLs : map [string ]struct {}{}, Repo : & Repo {}, HardcodedData : hardcodedData }
362365
363366 for _ , path := range paths {
364367 myURL , err := config .NewURL (path )
@@ -390,6 +393,8 @@ func New(logger log.Logger, paths []string) (*Config, error) {
390393 cfg .KnownURLs [myURL .String ()] = struct {}{}
391394 }
392395
396+ cfg .HardcodedData = hardcodedData
397+
393398 return cfg , nil
394399}
395400
@@ -481,6 +486,11 @@ func (c *Config) mergeRepos(ctx context.Context) error {
481486 repoFiles = append (repoFiles , slices .Collect (path .FlattenRepo ())... )
482487 }
483488
489+ repoFile := & Repo {}
490+ if err := config .Parse (nil , "repos" , c .Data , repoFile ); err == nil {
491+ mergo .Merge (c .Repo , repoFile )
492+ }
493+
484494 slices .Reverse (repoFiles )
485495
486496 for _ , repoFile := range repoFiles {
@@ -530,6 +540,11 @@ func (c *Config) merge(_ context.Context) error {
530540
531541 var mErr * multierror.Error
532542
543+ // Merge hardcoded data first.
544+ if err := config .Merge (& c .Data , c .HardcodedData ); err != nil {
545+ mErr = multierror .Append (mErr , err )
546+ }
547+
533548 for _ , cfg := range configs {
534549 // Log that we're merging this config.
535550 c .logger .Trace ("Merging config" , "url" , cfg .URL .String ())
0 commit comments