@@ -28,7 +28,7 @@ x-arcane:
2828 composePath := filepath .Join (tempDir , "compose.yaml" )
2929 require .NoError (t , os .WriteFile (composePath , []byte (composeContent ), 0o600 ))
3030
31- meta , err := ParseArcaneComposeMetadata (context .Background (), composePath )
31+ meta , err := ParseArcaneComposeMetadata (context .Background (), composePath , tempDir , false )
3232 require .NoError (t , err )
3333 require .Equal (t , "https://cdn.jsdelivr.net/gh/homarr-labs/webp/raspberry-pi.webp" , meta .ProjectIconURL )
3434 require .Equal (t , []string {"https://www.example.com" }, meta .ProjectURLS )
@@ -53,8 +53,64 @@ services:
5353`
5454 require .NoError (t , os .WriteFile (filepath .Join (tempDir , "meta.yaml" ), []byte (metaContent ), 0o600 ))
5555
56- meta , err := ParseArcaneComposeMetadata (context .Background (), composePath )
56+ meta , err := ParseArcaneComposeMetadata (context .Background (), composePath , tempDir , false )
5757 require .NoError (t , err )
5858 require .Equal (t , "https://example.com/icon.png" , meta .ProjectIconURL )
5959 require .Equal (t , []string {"https://example.com/docs" }, meta .ProjectURLS )
6060}
61+
62+ func TestParseArcaneComposeMetadata_LoadsGlobalEnvForIncludedMetadata (t * testing.T ) {
63+ projectsRoot := t .TempDir ()
64+ projectDir := filepath .Join (projectsRoot , "demo" )
65+ require .NoError (t , os .MkdirAll (projectDir , 0o755 ))
66+
67+ require .NoError (t , os .WriteFile (
68+ filepath .Join (projectsRoot , GlobalEnvFileName ),
69+ []byte ("ICON_CDN_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main\n " ),
70+ 0o600 ,
71+ ))
72+
73+ require .NoError (t , os .WriteFile (filepath .Join (projectDir , "compose.yaml" ), []byte (`include:
74+ - metadata.yaml
75+ services:
76+ watchtower:
77+ image: nickfedor/watchtower:latest
78+ ` ), 0o600 ))
79+
80+ require .NoError (t , os .WriteFile (filepath .Join (projectDir , "metadata.yaml" ), []byte (`x-watchtower-icon: &watchtower-icon "${ICON_CDN_URL:+${ICON_CDN_URL}/svg/watchtower.svg}"
81+ x-arcane:
82+ icon: *watchtower-icon
83+ ` ), 0o600 ))
84+
85+ meta , err := ParseArcaneComposeMetadata (context .Background (), filepath .Join (projectDir , "compose.yaml" ), projectsRoot , false )
86+ require .NoError (t , err )
87+ require .Equal (t , "https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/watchtower.svg" , meta .ProjectIconURL )
88+ }
89+
90+ func TestParseArcaneComposeMetadata_LoadsGlobalEnvForNestedProjects (t * testing.T ) {
91+ projectsRoot := t .TempDir ()
92+ projectDir := filepath .Join (projectsRoot , "group" , "demo" )
93+ require .NoError (t , os .MkdirAll (projectDir , 0o755 ))
94+
95+ require .NoError (t , os .WriteFile (
96+ filepath .Join (projectsRoot , GlobalEnvFileName ),
97+ []byte ("ICON_CDN_URL=https://cdn.jsdelivr.net/gh/selfhst/icons@main\n " ),
98+ 0o600 ,
99+ ))
100+
101+ require .NoError (t , os .WriteFile (filepath .Join (projectDir , "compose.yaml" ), []byte (`include:
102+ - metadata.yaml
103+ services:
104+ watchtower:
105+ image: nickfedor/watchtower:latest
106+ ` ), 0o600 ))
107+
108+ require .NoError (t , os .WriteFile (filepath .Join (projectDir , "metadata.yaml" ), []byte (`x-watchtower-icon: &watchtower-icon "${ICON_CDN_URL:+${ICON_CDN_URL}/svg/watchtower.svg}"
109+ x-arcane:
110+ icon: *watchtower-icon
111+ ` ), 0o600 ))
112+
113+ meta , err := ParseArcaneComposeMetadata (context .Background (), filepath .Join (projectDir , "compose.yaml" ), projectsRoot , false )
114+ require .NoError (t , err )
115+ require .Equal (t , "https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/watchtower.svg" , meta .ProjectIconURL )
116+ }
0 commit comments