2021-11-30 12:04:28 +01:00
package compose
import (
"log"
"os"
2021-12-03 11:49:32 +01:00
"strings"
2021-11-30 12:04:28 +01:00
2022-04-03 16:08:00 +02:00
"github.com/compose-spec/compose-go/cli"
"github.com/compose-spec/compose-go/types"
2021-11-30 12:04:28 +01:00
"gopkg.in/yaml.v3"
)
2021-12-05 09:05:48 +01:00
const (
ICON_EXCLAMATION = "❕"
)
2021-11-30 15:45:36 +01:00
// Parser is a docker-compose parser.
2021-11-30 12:04:28 +01:00
type Parser struct {
2022-04-03 16:08:00 +02:00
Data * types . Project
2021-11-30 12:04:28 +01:00
}
var Appname = ""
2022-03-31 14:12:20 +02:00
// NewParser create a Parser and parse the file given in filename. If filename is empty, we try to parse the content[0] argument that should be a valid YAML content.
func NewParser ( filename string , content ... string ) * Parser {
2021-11-30 12:04:28 +01:00
c := NewCompose ( )
2022-03-31 14:12:20 +02:00
if filename != "" {
f , err := os . Open ( filename )
if err != nil {
log . Fatal ( err )
}
dec := yaml . NewDecoder ( f )
err = dec . Decode ( c )
if err != nil {
log . Fatal ( err )
}
} else {
dec := yaml . NewDecoder ( strings . NewReader ( content [ 0 ] ) )
err := dec . Decode ( c )
if err != nil {
log . Fatal ( err )
}
}
2021-11-30 12:04:28 +01:00
2022-04-03 16:08:00 +02:00
p := & Parser { }
2021-11-30 12:04:28 +01:00
2022-03-31 14:12:20 +02:00
return p
}
func ( p * Parser ) Parse ( appname string ) {
2022-04-03 16:08:00 +02:00
// Reminder:
// - set Appname
// - loas services
2021-12-03 11:49:32 +01:00
2022-04-03 16:08:00 +02:00
options , err := cli . NewProjectOptions ( nil ,
cli . WithDefaultConfigPath ,
cli . WithNormalization ( true ) ,
cli . WithInterpolation ( true ) ,
cli . WithResolvedPaths ( true ) ,
)
if err != nil {
log . Fatal ( err )
2022-04-01 09:22:00 +02:00
}
2022-04-03 16:08:00 +02:00
proj , err := cli . ProjectFromOptions ( options )
if err != nil {
log . Fatal ( err )
2021-12-03 11:49:32 +01:00
}
2022-04-03 16:08:00 +02:00
Appname = proj . Name
2021-12-05 09:05:48 +01:00
2022-04-03 16:08:00 +02:00
p . Data = proj
2022-04-01 10:12:14 +02:00
2022-04-01 16:58:13 +02:00
}