Skip to content

Commit 86d69b8

Browse files
authored
fix: run install hook on upgrade (#347)
1 parent b678983 commit 86d69b8

File tree

4 files changed

+36
-13
lines changed

4 files changed

+36
-13
lines changed

app/upgrade_cmd.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package app
22

33
import (
4+
"fmt"
45
"os"
56

67
"github.com/cashapp/hermit"
@@ -42,13 +43,23 @@ func (g *upgradeCmd) Run(l *ui.UI, env *hermit.Env) error {
4243
}
4344

4445
changes := shell.NewChanges(envars.Parse(os.Environ()))
45-
46+
w := l.WriterAt(ui.LevelInfo)
4647
// upgrade packages
4748
for _, pkg := range packages {
48-
c, err := env.Upgrade(l, pkg)
49+
c, upgraded, err := env.Upgrade(l, pkg)
4950
if err != nil {
5051
return errors.WithStack(err)
52+
} else if upgraded == nil {
53+
continue
54+
}
55+
messages, err := env.TriggerForPackage(l, manifest.EventInstall, upgraded)
56+
if err != nil {
57+
return errors.WithStack(err)
58+
}
59+
for _, message := range messages {
60+
fmt.Fprintln(w, message)
5161
}
62+
upgraded.LogWarnings(l)
5263
changes = changes.Merge(c)
5364
}
5465

env.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -661,12 +661,14 @@ func (e *Env) install(l *ui.UI, p *manifest.Package) (*shell.Changes, error) {
661661
}
662662

663663
// Upgrade package.
664-
func (e *Env) Upgrade(l *ui.UI, pkg *manifest.Package) (*shell.Changes, error) {
664+
//
665+
// If an upgrade does not occur, returns all nils.
666+
func (e *Env) Upgrade(l *ui.UI, pkg *manifest.Package) (*shell.Changes, *manifest.Package, error) {
665667
task := l.Task(pkg.Reference.String())
666668

667669
if pkg.Reference.IsChannel() {
668670
err := e.state.UpgradeChannel(task, pkg)
669-
return nil, errors.WithStack(err)
671+
return nil, nil, errors.WithStack(err)
670672
}
671673
return e.upgradeVersion(l, pkg)
672674
}
@@ -1090,34 +1092,33 @@ func (e *Env) BinDir() string {
10901092
// upgradeVersion upgrades the package to its latest version.
10911093
//
10921094
// If the package is already at its latest version, this is a no-op.
1093-
func (e *Env) upgradeVersion(l *ui.UI, pkg *manifest.Package) (*shell.Changes, error) {
1095+
func (e *Env) upgradeVersion(l *ui.UI, pkg *manifest.Package) (*shell.Changes, *manifest.Package, error) {
10941096
resolver, err := e.resolver(l)
10951097
if err != nil {
1096-
return nil, errors.WithStack(err)
1098+
return nil, nil, errors.WithStack(err)
10971099
}
10981100
// Get the latest version of the package
10991101
resolved, err := resolver.Resolve(l, manifest.PrefixSelector(pkg.Reference.Major()))
11001102
if err != nil {
1101-
return nil, errors.WithStack(err)
1103+
return nil, nil, errors.WithStack(err)
11021104
}
11031105
if err := resolved.EnsureSupported(); err != nil {
1104-
return nil, errors.Wrapf(err, "upgrade failed")
1106+
return nil, nil, errors.Wrapf(err, "upgrade failed")
11051107
}
11061108
if !resolved.Reference.Version.Match(pkg.Reference.Version) {
11071109
l.Task(pkg.Reference.Name).SubTask("upgrade").Infof("Upgrading %s to %s", pkg, resolved)
11081110
uc, err := e.uninstall(l.Task(pkg.Reference.String()), pkg)
11091111
if err != nil {
1110-
return nil, errors.WithStack(err)
1112+
return nil, nil, errors.WithStack(err)
11111113
}
11121114
ic, err := e.install(l, resolved)
11131115
if err != nil {
1114-
return nil, errors.WithStack(err)
1116+
return nil, nil, errors.WithStack(err)
11151117
}
11161118
// Update the package.
1117-
*pkg = *resolved
1118-
return uc.Merge(ic), nil
1119+
return uc.Merge(ic), resolved, nil
11191120
}
1120-
return shell.NewChanges(envars.Parse(os.Environ())), nil
1121+
return nil, nil, nil
11211122
}
11221123

11231124
func (e *Env) readPackageState(pkg *manifest.Package) {

integration/integration_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,14 @@ func TestIntegration(t *testing.T) {
238238
hermit manifest add-digests packages/testbin1.hcl
239239
assert grep d4f8989a4a6bf56ccc768c094448aa5f42be3b9f0287adc2f4dfd2241f80d2c0 packages/testbin1.hcl
240240
`},
241+
{name: "UpgradeTriggersInstallHook",
242+
preparations: prep{fixture("testenv1"), activate(".")},
243+
script: `
244+
hermit install testbin1-1.0.0
245+
hermit upgrade testbin1
246+
`,
247+
expectations: exp{outputContains("testbin1-1.0.0 hook"), outputContains("testbin1-1.0.1 hook")},
248+
},
241249
}
242250

243251
checkForShells(t)

integration/testdata/testenv1/packages/testbin1.hcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ description = "Test package one"
22
env = {FOO: "bar", TESTBIN1VERSION: "${version}"}
33
source = "${env}/packages/testbin1.tgz"
44
binaries = ["testbin1"]
5+
on install {
6+
message { text = "testbin1-${version} hook" }
7+
}
58
version "1.0.0" "1.0.1" {}

0 commit comments

Comments
 (0)