@@ -9,9 +9,13 @@ import (
99 "path/filepath"
1010 "strings"
1111
12+ composeloader "github.com/docker/cli/cli/compose/loader"
13+ composetypes "github.com/docker/cli/cli/compose/types"
14+
1215 "github.com/docker/app/internal"
1316 "github.com/docker/app/types/metadata"
1417 "github.com/docker/app/types/parameters"
18+ "github.com/docker/app/types/secrets"
1519)
1620
1721// AppSourceKind represents what format the app was in when read
@@ -41,6 +45,7 @@ type App struct {
4145 composesContent [][]byte
4246 parametersContent [][]byte
4347 parameters parameters.Parameters
48+ secrets secrets.Secrets
4449 metadataContent []byte
4550 metadata metadata.AppMetadata
4651 attachments []Attachment
@@ -93,6 +98,11 @@ func (a *App) Attachments() []Attachment {
9398 return a .attachments
9499}
95100
101+ // Secrets returns a map of secrets
102+ func (a * App ) Secrets () secrets.Secrets {
103+ return a .secrets
104+ }
105+
96106func (a * App ) HasCRLF () bool {
97107 return a .hasCRLF
98108}
@@ -288,10 +298,36 @@ func composeLoader(f func() ([][]byte, error)) func(app *App) error {
288298 return err
289299 }
290300 app .composesContent = append (app .composesContent , composesContent ... )
301+ app .secrets = secrets .New ()
302+ for _ , c := range app .composesContent {
303+ parsedCompose , err := composeloader .ParseYAML (c )
304+ if err != nil {
305+ return err
306+ }
307+ cfg , err := composeloader .Load (composetypes.ConfigDetails {
308+ ConfigFiles : []composetypes.ConfigFile {
309+ {Filename : "docker-compose.yml" , Config : parsedCompose },
310+ },
311+ }, withSkipInterpolation )
312+ if err != nil {
313+ return err
314+ }
315+ for name , secret := range cfg .Secrets {
316+ app .secrets [name ] = secrets.Secret {
317+ Name : secret .Name ,
318+ Path : secret .File ,
319+ External : secret .External .External ,
320+ }
321+ }
322+ }
291323 return nil
292324 }
293325}
294326
327+ func withSkipInterpolation (opts * composeloader.Options ) {
328+ opts .SkipInterpolation = true
329+ }
330+
295331func readReaders (readers ... io.Reader ) ([][]byte , error ) {
296332 content := make ([][]byte , len (readers ))
297333 var errs []string
0 commit comments