internal/changelog/entry.go (64 lines of code) (raw):
// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
// or more contributor license agreements. Licensed under the Elastic License 2.0;
// you may not use this file except in compliance with the Elastic License 2.0.
package changelog
import (
"github.com/elastic/elastic-agent-changelog-tool/internal/changelog/fragment"
)
type FragmentFileInfo struct {
Name string `yaml:"name"`
Checksum string `yaml:"checksum"`
}
type Entry struct {
Kind Kind `yaml:"kind"`
Summary string `yaml:"summary"`
Description string `yaml:"description"`
Component string `yaml:"component"`
LinkedPR []string `yaml:"pr"`
LinkedIssue []string `yaml:"issue"`
Timestamp int64 `yaml:"timestamp"`
File FragmentFileInfo `yaml:"file"`
}
// EntriesFromFragment returns one or more entries based on the fragment File.
// A single Fragment can contain multiple Changelog entries.
func EntryFromFragment(f fragment.File) Entry {
e := Entry{
Kind: kind2kind(f),
Summary: f.Fragment.Summary,
Description: f.Fragment.Description,
Component: f.Fragment.Component,
LinkedPR: []string{},
LinkedIssue: []string{},
Timestamp: f.Timestamp,
File: FragmentFileInfo{
Name: f.Name,
Checksum: f.Checksum(),
},
}
if f.Fragment.Pr != "" {
e.LinkedPR = []string{f.Fragment.Pr}
}
if f.Fragment.Issue != "" {
e.LinkedIssue = []string{f.Fragment.Issue}
}
return e
}
func kind2kind(f fragment.File) Kind {
switch f.Fragment.Kind {
case string(BreakingChange):
return BreakingChange
case string(BugFix):
return BugFix
case string(Deprecation):
return Deprecation
case string(Enhancement):
return Enhancement
case string(Feature):
return Feature
case string(KnownIssue):
return KnownIssue
case string(Security):
return Security
case string(Upgrade):
return Upgrade
case string(Other):
return Other
default:
return Unknown
}
}