Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ module github.com/aslamcodes/powerappstream-builder

go 1.24.1

require github.com/goccy/go-yaml v1.19.0 // indirect
require github.com/goccy/go-yaml v1.19.0
38 changes: 37 additions & 1 deletion internal/backend/local_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,43 @@ func TestGetConfig(t *testing.T) {
{Path: `C:\AppStream\Scripts\End-System.ps1`, Content: "Write-EventLog -LogName Application -Source AppStream -EventID 200 -Message \"System cleanup\"\n"},
{Path: `C:\AppStream\Scripts\End-User.ps1`, Content: "Write-Host \"User session cleanup\"\n"},
},
}
SessionScripts: config.SessionScripts{
SessionStart: config.SessionConfig{
Executables: []config.Executable{
{
Context: "system",
Filename: `C:\AppStream\Scripts\Start-System.ps1`,
Arguments: "-Init",
S3LogEnabled: true,
},
{
Context: "user",
Filename: `C:\AppStream\Scripts\Start-User.ps1`,
Arguments: "-UserSetup",
S3LogEnabled: true,
},
},
WaitingTime: 60,
},
SessionTermination: config.SessionConfig{
Executables: []config.Executable{
{
Context: "system",
Filename: `C:\AppStream\Scripts\End-System.ps1`,
Arguments: "-Cleanup",
S3LogEnabled: true,
},
{
Context: "user",
Filename: `C:\AppStream\Scripts\End-User.ps1`,
Arguments: "-CleanupUser",
S3LogEnabled: true,
},
},
WaitingTime: 60,
},
},
}

if !reflect.DeepEqual(expected, *actual) {
t.Fatalf("GetConfig() mismatch.\nexpected: %#v\nactual: %#v", expected, *actual)
Expand Down
9 changes: 7 additions & 2 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package config
import "io"

type Config struct {
Installers []Installer `yaml:"installers"`
Files []File `yaml:"files"`
Installers []Installer `yaml:"installers"`
Files []File `yaml:"files"`
SessionScripts SessionScripts `yaml:"session_scripts"`
}

func (c *Config) Setup(out io.Writer) error {
Expand All @@ -24,5 +25,9 @@ func (c *Config) Setup(out io.Writer) error {
}
}

if err := c.SessionScripts.UpdateSessionScriptConfig(out); err != nil {
return err
}

return nil
}
54 changes: 54 additions & 0 deletions internal/config/session_script.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package config

import (
"bufio"
"encoding/json"
"io"
"os"
"path/filepath"
)

type Executable struct {
Context string `yaml:"context" json:"context"`
Filename string `yaml:"filename" json:"filename"`
Arguments string `yaml:"arguments" json:"arguments"`
S3LogEnabled bool `yaml:"s3LogEnabled" json:"s3LogEnabled"`
}

type SessionConfig struct {
Executables []Executable `yaml:"executables" json:"executables"`
WaitingTime int `yaml:"waitingTime" json:"waitingTime"`
}

type SessionScripts struct {
SessionStart SessionConfig `yaml:"session_start" json:"SessionStart"`
SessionTermination SessionConfig `yaml:"session_termination" json:"SessionTermination"`
}

func (ss *SessionScripts) UpdateSessionScriptConfig(out io.Writer) error {
if err := os.MkdirAll(filepath.Dir(SESSION_SCRIPT_CONFIG_LOCATION), 0770); err != nil {
return err
}

config, err := json.MarshalIndent(ss, "", " ")

if err != nil {
return err
}

file, err := os.Create(SESSION_SCRIPT_CONFIG_LOCATION)

if err != nil {
return err
}

defer file.Close()

bw := bufio.NewWriter(file)

if _, err := bw.Write(config); err != nil {
return err
}

return bw.Flush()
}
5 changes: 5 additions & 0 deletions internal/config/session_script_unix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
//go:build !windows

package config

const SESSION_SCRIPT_CONFIG_LOCATION = "C:\\Appstream\\SessionScripts\\config.json"
5 changes: 5 additions & 0 deletions internal/config/session_script_win.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
//go:build windows

package config

const SESSION_SCRIPT_CONFIG_LOCATION = "C:\\Appstream\\SessionScripts\\config.json"
12 changes: 8 additions & 4 deletions testdata/config_win.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ catalog:
iconPath: ""
workingDir: ""

registryConfig:
registry_config:
- path: "HKEY_LOCAL_MACHINE\\Software\\MyApp"
values:
LogLevel: "DEBUG"
Expand Down Expand Up @@ -48,8 +48,8 @@ files:
content: |
Write-Host "User session cleanup"

sessionScripts:
SessionStart:
session_scripts:
session_start:
executables:
- context: "system"
filename: "C:\\AppStream\\Scripts\\Start-System.ps1"
Expand All @@ -61,7 +61,9 @@ sessionScripts:
arguments: "-UserSetup"
s3LogEnabled: true

SessionTermination:
waitingTime: 60

session_termination:
executables:
- context: "system"
filename: "C:\\AppStream\\Scripts\\End-System.ps1"
Expand All @@ -72,3 +74,5 @@ sessionScripts:
filename: "C:\\AppStream\\Scripts\\End-User.ps1"
arguments: "-CleanupUser"
s3LogEnabled: true

waitingTime: 60