Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package chain
|
|
|
|
import (
|
|
"io"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
"github.com/ignite/cli/v29/ignite/config/chain/version"
|
|
)
|
|
|
|
// Build time check for the latest config version type.
|
|
// This is required to be sure that conversion to latest
|
|
// doesn't break when a new config version is added without
|
|
// updating the references to the previous version.
|
|
var _ = Versions[LatestVersion].(*Config)
|
|
|
|
// ConvertLatest converts a config to the latest version.
|
|
func ConvertLatest(c version.Converter) (_ *Config, err error) {
|
|
for c.GetVersion() < LatestVersion {
|
|
c, err = c.ConvertNext()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
// Cast to the latest version type.
|
|
// This is safe because there is a build time check that makes sure
|
|
// the type for the latest config version is the right one here.
|
|
return c.(*Config), nil
|
|
}
|
|
|
|
// MigrateLatest migrates a config file to the latest version.
|
|
func MigrateLatest(current io.Reader, latest io.Writer) error {
|
|
cfg, err := Parse(current)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
encoder := yaml.NewEncoder(latest)
|
|
encoder.SetIndent(2)
|
|
return encoder.Encode(cfg)
|
|
}
|