Skip to content

Commit fdcd956

Browse files
authored
Merge pull request #133 from StackVista/STAC-23918-externalize-icons
STAC-23918: include icons and includes folders
2 parents f71068e + 4b4961d commit fdcd956

File tree

2 files changed

+36
-17
lines changed

2 files changed

+36
-17
lines changed

cmd/stackpack/stackpack_package.go

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,16 @@ func (y *YamlParser) Parse(filePath string) (*StackpackInfo, error) {
6565

6666
// Required files and directories for a valid stackpack
6767
var requiredStackpackItems = []string{
68-
"provisioning",
68+
"stackpack.yaml",
6969
"README.md",
70+
"settings",
7071
"resources",
71-
"stackpack.yaml",
72+
}
73+
74+
// Optional files and directories for a valid stackpack
75+
var optionalStackpackItems = []string{
76+
"icons",
77+
"includes",
7278
}
7379

7480
// StackpackPackageCommand creates the package subcommand
@@ -79,11 +85,13 @@ func StackpackPackageCommand(cli *di.Deps) *cobra.Command {
7985
Short: "Package a stackpack into an .sts file",
8086
Long: `Package a stackpack into an .sts file.
8187
82-
Creates an .sts file containing all required stackpack files and directories:
83-
- provisioning/ (directory)
88+
Creates an .sts file containing all stackpack files and directories:
89+
- stackpack.yaml (file)
8490
- README.md (file)
91+
- settings/ (directory)
8592
- resources/ (directory)
86-
- stackpack.yaml (file)
93+
- icons/ (directory, optional)
94+
- includes/ (directory, optional)
8795
8896
The .sts file is named <stackpack_name>-<version>.sts where the name and
8997
version are extracted from stackpack.yaml and created in the current directory.`,
@@ -222,6 +230,17 @@ func createStackpackZip(sourceDir, zipPath string) error {
222230
}
223231
}
224232

233+
// Add each optional item to the zip
234+
for _, item := range optionalStackpackItems {
235+
itemPath := filepath.Join(sourceDir, item)
236+
if err := addToZip(zipWriter, itemPath, item); err != nil {
237+
if os.IsNotExist(err) {
238+
continue
239+
}
240+
return fmt.Errorf("failed to add %s to zip: %w", item, err)
241+
}
242+
}
243+
225244
return nil
226245
}
227246

cmd/stackpack/stackpack_package_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func setupStackPackPackageCmd(t *testing.T) (*di.MockDeps, *cobra.Command) {
2222
// createTestStackpack creates a valid stackpack directory structure for testing
2323
func createTestStackpack(t *testing.T, dir string, name string, version string) {
2424
// Create required directories
25-
require.NoError(t, os.MkdirAll(filepath.Join(dir, "provisioning"), 0755))
25+
require.NoError(t, os.MkdirAll(filepath.Join(dir, "settings"), 0755))
2626
require.NoError(t, os.MkdirAll(filepath.Join(dir, "resources"), 0755))
2727

2828
// Create stackpack.conf
@@ -42,7 +42,7 @@ version: "%s"
4242
require.NoError(t, os.WriteFile(filepath.Join(dir, "README.md"), []byte(readme), 0644))
4343

4444
// Create test files in subdirectories
45-
require.NoError(t, os.WriteFile(filepath.Join(dir, "provisioning", "test.sty"), []byte("test provisioning"), 0644))
45+
require.NoError(t, os.WriteFile(filepath.Join(dir, "settings", "test.sty"), []byte("test settings"), 0644))
4646
require.NoError(t, os.WriteFile(filepath.Join(dir, "resources", "overview.md"), []byte("test overview"), 0644))
4747
}
4848

@@ -192,18 +192,18 @@ func TestStackpackPackageCommand_MissingRequiredFiles(t *testing.T) {
192192
expectedError string
193193
}{
194194
{
195-
name: "missing provisioning directory",
195+
name: "missing settings directory",
196196
setupFunc: func(dir string) {
197197
require.NoError(t, os.MkdirAll(filepath.Join(dir, "resources"), 0755))
198198
require.NoError(t, os.WriteFile(filepath.Join(dir, "README.md"), []byte("readme"), 0644))
199199
require.NoError(t, os.WriteFile(filepath.Join(dir, "stackpack.yaml"), []byte("name: \"test\"\nversion: \"1.0.0\""), 0644))
200200
},
201-
expectedError: "required stackpack item not found: provisioning",
201+
expectedError: "required stackpack item not found: settings",
202202
},
203203
{
204204
name: "missing README.md file",
205205
setupFunc: func(dir string) {
206-
require.NoError(t, os.MkdirAll(filepath.Join(dir, "provisioning"), 0755))
206+
require.NoError(t, os.MkdirAll(filepath.Join(dir, "settings"), 0755))
207207
require.NoError(t, os.MkdirAll(filepath.Join(dir, "resources"), 0755))
208208
require.NoError(t, os.WriteFile(filepath.Join(dir, "stackpack.yaml"), []byte("name: \"test\"\nversion: \"1.0.0\""), 0644))
209209
},
@@ -212,7 +212,7 @@ func TestStackpackPackageCommand_MissingRequiredFiles(t *testing.T) {
212212
{
213213
name: "missing resources directory",
214214
setupFunc: func(dir string) {
215-
require.NoError(t, os.MkdirAll(filepath.Join(dir, "provisioning"), 0755))
215+
require.NoError(t, os.MkdirAll(filepath.Join(dir, "settings"), 0755))
216216
require.NoError(t, os.WriteFile(filepath.Join(dir, "README.md"), []byte("readme"), 0644))
217217
require.NoError(t, os.WriteFile(filepath.Join(dir, "stackpack.yaml"), []byte("name: \"test\"\nversion: \"1.0.0\""), 0644))
218218
},
@@ -221,7 +221,7 @@ func TestStackpackPackageCommand_MissingRequiredFiles(t *testing.T) {
221221
{
222222
name: "missing stackpack.yaml file",
223223
setupFunc: func(dir string) {
224-
require.NoError(t, os.MkdirAll(filepath.Join(dir, "provisioning"), 0755))
224+
require.NoError(t, os.MkdirAll(filepath.Join(dir, "settings"), 0755))
225225
require.NoError(t, os.MkdirAll(filepath.Join(dir, "resources"), 0755))
226226
require.NoError(t, os.WriteFile(filepath.Join(dir, "README.md"), []byte("readme"), 0644))
227227
},
@@ -293,7 +293,7 @@ version: ""`,
293293
require.NoError(t, os.MkdirAll(stackpackDir, 0755))
294294

295295
// Create required directories and files except stackpack.conf
296-
require.NoError(t, os.MkdirAll(filepath.Join(stackpackDir, "provisioning"), 0755))
296+
require.NoError(t, os.MkdirAll(filepath.Join(stackpackDir, "settings"), 0755))
297297
require.NoError(t, os.MkdirAll(filepath.Join(stackpackDir, "resources"), 0755))
298298
require.NoError(t, os.WriteFile(filepath.Join(stackpackDir, "README.md"), []byte("readme"), 0644))
299299

@@ -447,30 +447,30 @@ func TestValidateStackpackDirectory(t *testing.T) {
447447
{
448448
name: "valid stackpack directory",
449449
setupFunc: func(dir string) {
450-
require.NoError(t, os.MkdirAll(filepath.Join(dir, "provisioning"), 0755))
450+
require.NoError(t, os.MkdirAll(filepath.Join(dir, "settings"), 0755))
451451
require.NoError(t, os.MkdirAll(filepath.Join(dir, "resources"), 0755))
452452
require.NoError(t, os.WriteFile(filepath.Join(dir, "README.md"), []byte("readme"), 0644))
453453
require.NoError(t, os.WriteFile(filepath.Join(dir, "stackpack.yaml"), []byte("yaml"), 0644))
454454
},
455455
expectError: false,
456456
},
457457
{
458-
name: "missing provisioning directory",
458+
name: "missing settings directory",
459459
setupFunc: func(dir string) {
460460
require.NoError(t, os.MkdirAll(filepath.Join(dir, "resources"), 0755))
461461
require.NoError(t, os.WriteFile(filepath.Join(dir, "README.md"), []byte("readme"), 0644))
462462
require.NoError(t, os.WriteFile(filepath.Join(dir, "stackpack.yaml"), []byte("yaml"), 0644))
463463
},
464464
expectError: true,
465-
errorContains: "required stackpack item not found: provisioning",
465+
errorContains: "required stackpack item not found: settings",
466466
},
467467
{
468468
name: "missing all required items",
469469
setupFunc: func(dir string) {
470470
// Create empty directory
471471
},
472472
expectError: true,
473-
errorContains: "required stackpack item not found: provisioning",
473+
errorContains: "required stackpack item not found: stackpack.yaml",
474474
},
475475
}
476476

0 commit comments

Comments
 (0)