Skip to content

Commit 529dd76

Browse files
committed
Run post_install.sh script on trusted platforms
1 parent bee2da6 commit 529dd76

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

arduino/cores/packagemanager/install_uninstall.go

+38-1
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ package packagemanager
1717

1818
import (
1919
"fmt"
20+
"runtime"
2021

2122
"github.com/arduino/arduino-cli/arduino/cores"
23+
"github.com/arduino/arduino-cli/executils"
24+
"github.com/arduino/go-paths-helper"
25+
"github.com/pkg/errors"
2226
)
2327

2428
// InstallPlatform installs a specific release of a platform.
@@ -28,7 +32,40 @@ func (pm *PackageManager) InstallPlatform(platformRelease *cores.PlatformRelease
2832
"hardware",
2933
platformRelease.Platform.Architecture,
3034
platformRelease.Version.String())
31-
return platformRelease.Resource.Install(pm.DownloadDir, pm.TempDir, destDir)
35+
if err := platformRelease.Resource.Install(pm.DownloadDir, pm.TempDir, destDir); err != nil {
36+
return errors.Errorf("installing platform %s: %s", platformRelease, err)
37+
}
38+
39+
// Perform post install
40+
if platformRelease.IsTrusted {
41+
if err := pm.runPostInstallScript(destDir); err != nil {
42+
return errors.Errorf("running post install script for %s: %s", platformRelease, err)
43+
}
44+
}
45+
46+
return nil
47+
}
48+
49+
func (pm *PackageManager) runPostInstallScript(destDir *paths.Path) error {
50+
postInstallFilename := "post_install.sh"
51+
if runtime.GOOS == "windows" {
52+
postInstallFilename = "post_install.bat"
53+
}
54+
postInstall := destDir.Join(postInstallFilename)
55+
if postInstall.Exist() && !postInstall.IsDir() {
56+
cmd, err := executils.Command(postInstall.String())
57+
if err != nil {
58+
return err
59+
}
60+
cmd.Dir = destDir.String()
61+
cmd.Stdout = nil
62+
cmd.Stderr = nil
63+
if err := cmd.Run(); err != nil {
64+
return err
65+
}
66+
}
67+
return nil
68+
3269
}
3370

3471
// IsManagedPlatformRelease returns true if the PlatforRelease is managed by the PackageManager

0 commit comments

Comments
 (0)