Skip to content

Commit f9d139a

Browse files
Add post install script support for tools
1 parent d6196c1 commit f9d139a

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

Diff for: arduino/cores/packagemanager/install_uninstall.go

+26-10
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
102102

103103
// Install tools first
104104
for _, tool := range toolsToInstall {
105-
if err := pme.InstallTool(tool, taskCB); err != nil {
105+
if err := pme.InstallTool(tool, taskCB, skipPostInstall); err != nil {
106106
return err
107107
}
108108
}
@@ -171,7 +171,10 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
171171
if !skipPostInstall {
172172
log.Info("Running post_install script")
173173
taskCB(&rpc.TaskProgress{Message: tr("Configuring platform.")})
174-
if err := pme.RunPostInstallScript(platformRelease); err != nil {
174+
if !platformRelease.IsInstalled() {
175+
return errors.New(tr("platform not installed"))
176+
}
177+
if err := pme.RunPostInstallScript(platformRelease.InstallDir); err != nil {
175178
taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure platform: %s", err)})
176179
}
177180
} else {
@@ -222,22 +225,19 @@ func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease)
222225
}
223226

224227
// RunPostInstallScript runs the post_install.sh (or post_install.bat) script for the
225-
// specified platformRelease.
226-
func (pme *Explorer) RunPostInstallScript(platformRelease *cores.PlatformRelease) error {
227-
if !platformRelease.IsInstalled() {
228-
return errors.New(tr("platform not installed"))
229-
}
228+
// specified platformRelease or toolRelease.
229+
func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error {
230230
postInstallFilename := "post_install.sh"
231231
if runtime.GOOS == "windows" {
232232
postInstallFilename = "post_install.bat"
233233
}
234-
postInstall := platformRelease.InstallDir.Join(postInstallFilename)
234+
postInstall := installDir.Join(postInstallFilename)
235235
if postInstall.Exist() && postInstall.IsNotDir() {
236236
cmd, err := executils.NewProcessFromPath(pme.GetEnvVarsForSpawnedProcess(), postInstall)
237237
if err != nil {
238238
return err
239239
}
240-
cmd.SetDirFromPath(platformRelease.InstallDir)
240+
cmd.SetDirFromPath(installDir)
241241
if err := cmd.Run(); err != nil {
242242
return err
243243
}
@@ -299,7 +299,7 @@ func (pme *Explorer) UninstallPlatform(platformRelease *cores.PlatformRelease, t
299299
}
300300

301301
// InstallTool installs a specific release of a tool.
302-
func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB) error {
302+
func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB, skipPostInstall bool) error {
303303
log := pme.log.WithField("Tool", toolRelease)
304304

305305
if toolRelease.IsInstalled() {
@@ -325,6 +325,22 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task
325325
log.WithError(err).Warn("Cannot install tool")
326326
return &arduino.FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err}
327327
}
328+
if d, err := destDir.Abs(); err == nil {
329+
toolRelease.InstallDir = d
330+
} else {
331+
return err
332+
}
333+
// Perform post install
334+
if !skipPostInstall {
335+
log.Info("Running tool post_install script")
336+
taskCB(&rpc.TaskProgress{Message: tr("Configuring tool.")})
337+
if err := pme.RunPostInstallScript(toolRelease.InstallDir); err != nil {
338+
taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure tool: %s", err)})
339+
}
340+
} else {
341+
log.Info("Skipping tool configuration.")
342+
taskCB(&rpc.TaskProgress{Message: tr("Skipping tool configuration.")})
343+
}
328344
log.Info("Tool installed")
329345
taskCB(&rpc.TaskProgress{Message: tr("%s installed", toolRelease), Completed: true})
330346

Diff for: commands/instances.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ func installTool(pm *packagemanager.PackageManager, tool *cores.ToolRelease, dow
138138
return fmt.Errorf(tr("downloading %[1]s tool: %[2]s"), tool, err)
139139
}
140140
taskCB(&rpc.TaskProgress{Completed: true})
141-
if err := pme.InstallTool(tool, taskCB); err != nil {
141+
if err := pme.InstallTool(tool, taskCB, true); err != nil {
142142
return fmt.Errorf(tr("installing %[1]s tool: %[2]s"), tool, err)
143143
}
144144
return nil

0 commit comments

Comments
 (0)