Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7115365

Browse filesBrowse files
[breaking] Add post install script support for tools (#2075)
* Add post install script support for tools * Add TestCoreInstallRunsToolPostInstallScript to core_test.go * Document changes in UPGRADING.md
1 parent d6196c1 commit 7115365
Copy full SHA for 7115365

File tree

Expand file treeCollapse file tree

4 files changed

+67
-11
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+67
-11
lines changed

‎arduino/cores/packagemanager/install_uninstall.go

Copy file name to clipboardExpand all lines: arduino/cores/packagemanager/install_uninstall.go
+26-10Lines changed: 26 additions & 10 deletions
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

‎commands/instances.go

Copy file name to clipboardExpand all lines: commands/instances.go
+1-1Lines changed: 1 addition & 1 deletion
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

‎docs/UPGRADING.md

Copy file name to clipboardExpand all lines: docs/UPGRADING.md
+25Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,31 @@
22

33
Here you can find a list of migration guides to handle breaking changes between releases of the CLI.
44

5+
## 0.31.0
6+
7+
### Added `post_install` script support for tools
8+
9+
The `post_install` script now runs when a tool is correctly installed and the CLI is in "interactive" mode. This
10+
behavior can be [configured](https://arduino.github.io/arduino-cli/0.30/commands/arduino-cli_core_install/#options).
11+
12+
### golang API: methods in `github.com/arduino/arduino-cli/arduino/cores/packagemanager` changed signature
13+
14+
The following methods in `github.com/arduino/arduino-cli/arduino/cores/packagemanager`:
15+
16+
```go
17+
func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB) error { ... }
18+
func (pme *Explorer) RunPostInstallScript(platformRelease *cores.PlatformRelease) error { ... }
19+
```
20+
21+
have changed. `InstallTool` requires the new `skipPostInstall` parameter, which must be set to `true` to skip the post
22+
install script. `RunPostInstallScript` does not require a `*cores.PlatformRelease` parameter but requires a
23+
`*paths.Path` parameter:
24+
25+
```go
26+
func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB, skipPostInstall bool) error {...}
27+
func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error { ... }
28+
```
29+
530
## 0.30.0
631

732
### Sketch name validation

‎internal/integrationtest/core/core_test.go

Copy file name to clipboardExpand all lines: internal/integrationtest/core/core_test.go
+15Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,3 +992,18 @@ func TestCoreInstallCreatesInstalledJson(t *testing.T) {
992992
sortedExpected := requirejson.Parse(t, expectedInstalledJson).Query("walk(if type == \"array\" then sort else . end)").String()
993993
require.JSONEq(t, sortedExpected, sortedInstalled)
994994
}
995+
996+
func TestCoreInstallRunsToolPostInstallScript(t *testing.T) {
997+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
998+
defer env.CleanUp()
999+
1000+
url := "http://drazzy.com/package_drazzy.com_index.json"
1001+
1002+
_, _, err := cli.Run("core", "update-index", "--additional-urls", url)
1003+
require.NoError(t, err)
1004+
1005+
// Checks that the post_install script is correctly skipped on the CI
1006+
stdout, _, err := cli.Run("core", "install", "ATTinyCore:avr", "--verbose", "--additional-urls", url)
1007+
require.NoError(t, err)
1008+
require.Contains(t, string(stdout), "Skipping tool configuration.")
1009+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.