Skip to content

Commit 3cee3a7

Browse files
committed
Fix rebase: replace FetchLatestRelease with getSkillsRef after base branch change
Co-authored-by: Isaac
1 parent 5edba59 commit 3cee3a7

File tree

2 files changed

+27
-36
lines changed

2 files changed

+27
-36
lines changed

experimental/aitools/lib/installer/installer.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,8 @@ func ListSkills(ctx context.Context) error {
117117
// This is the core installation function. Callers are responsible for agent detection,
118118
// prompting, and printing the "Installing..." header.
119119
func InstallSkillsForAgents(ctx context.Context, src ManifestSource, targetAgents []*agents.Agent, opts InstallOptions) error {
120-
latestTag, err := src.FetchLatestRelease(ctx)
121-
if err != nil {
122-
return fmt.Errorf("failed to fetch latest release: %w", err)
123-
}
124-
125-
manifest, err := src.FetchManifest(ctx, latestTag)
120+
ref := getSkillsRef(ctx)
121+
manifest, err := src.FetchManifest(ctx, ref)
126122
if err != nil {
127123
return err
128124
}
@@ -173,7 +169,7 @@ func InstallSkillsForAgents(ctx context.Context, src ManifestSource, targetAgent
173169
}
174170
}
175171

176-
if err := installSkillForAgents(ctx, latestTag, name, meta.Files, targetAgents, globalDir); err != nil {
172+
if err := installSkillForAgents(ctx, ref, name, meta.Files, targetAgents, globalDir); err != nil {
177173
return err
178174
}
179175
}
@@ -186,7 +182,7 @@ func InstallSkillsForAgents(ctx context.Context, src ManifestSource, targetAgent
186182
Skills: make(map[string]string, len(targetSkills)),
187183
}
188184
}
189-
state.Release = latestTag
185+
state.Release = ref
190186
state.LastUpdated = time.Now()
191187
// IncludeExperimental reflects the last invocation's flag value. The Skills
192188
// map may still contain experimental entries from a prior run with the flag
@@ -199,7 +195,7 @@ func InstallSkillsForAgents(ctx context.Context, src ManifestSource, targetAgent
199195
return err
200196
}
201197

202-
tag := strings.TrimPrefix(latestTag, "v")
198+
tag := strings.TrimPrefix(ref, "v")
203199
noun := "skills"
204200
if len(targetSkills) == 1 {
205201
noun = "skill"

experimental/aitools/lib/installer/installer_test.go

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
// mockManifestSource is a test double for ManifestSource.
2020
type mockManifestSource struct {
2121
manifest *Manifest
22-
release string
2322
fetchErr error
2423
}
2524

@@ -30,10 +29,6 @@ func (m *mockManifestSource) FetchManifest(_ context.Context, _ string) (*Manife
3029
return m.manifest, nil
3130
}
3231

33-
func (m *mockManifestSource) FetchLatestRelease(_ context.Context) (string, error) {
34-
return m.release, nil
35-
}
36-
3732
func testManifest() *Manifest {
3833
return &Manifest{
3934
Version: "1",
@@ -195,7 +190,7 @@ func TestInstallSkillsForAgentsWritesState(t *testing.T) {
195190
ctx, stderr := cmdio.NewTestContextWithStderr(t.Context())
196191
setupFetchMock(t)
197192

198-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
193+
src := &mockManifestSource{manifest: testManifest()}
199194
agent := testAgent(tmp)
200195

201196
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{})
@@ -206,20 +201,20 @@ func TestInstallSkillsForAgentsWritesState(t *testing.T) {
206201
require.NoError(t, err)
207202
require.NotNil(t, state)
208203
assert.Equal(t, 1, state.SchemaVersion)
209-
assert.Equal(t, "v0.1.0", state.Release)
204+
assert.Equal(t, defaultSkillsRepoRef, state.Release)
210205
assert.Len(t, state.Skills, 2)
211206
assert.Equal(t, "0.1.0", state.Skills["databricks-sql"])
212207
assert.Equal(t, "0.1.0", state.Skills["databricks-jobs"])
213208

214-
assert.Contains(t, stderr.String(), "Installed 2 skills (v0.1.0).")
209+
assert.Contains(t, stderr.String(), "Installed 2 skills (v0.1.3).")
215210
}
216211

217212
func TestInstallSkillForSingleWritesState(t *testing.T) {
218213
tmp := setupTestHome(t)
219214
ctx, stderr := cmdio.NewTestContextWithStderr(t.Context())
220215
setupFetchMock(t)
221216

222-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
217+
src := &mockManifestSource{manifest: testManifest()}
223218
agent := testAgent(tmp)
224219

225220
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{
@@ -234,15 +229,15 @@ func TestInstallSkillForSingleWritesState(t *testing.T) {
234229
assert.Len(t, state.Skills, 1)
235230
assert.Equal(t, "0.1.0", state.Skills["databricks-sql"])
236231

237-
assert.Contains(t, stderr.String(), "Installed 1 skill (v0.1.0).")
232+
assert.Contains(t, stderr.String(), "Installed 1 skill (v0.1.3).")
238233
}
239234

240235
func TestInstallSkillsSpecificNotFound(t *testing.T) {
241236
tmp := setupTestHome(t)
242237
ctx := cmdio.MockDiscard(t.Context())
243238
setupFetchMock(t)
244239

245-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
240+
src := &mockManifestSource{manifest: testManifest()}
246241
agent := testAgent(tmp)
247242

248243
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{
@@ -264,7 +259,7 @@ func TestExperimentalSkillsSkippedByDefault(t *testing.T) {
264259
Experimental: true,
265260
}
266261

267-
src := &mockManifestSource{manifest: manifest, release: "v0.1.0"}
262+
src := &mockManifestSource{manifest: manifest}
268263
agent := testAgent(tmp)
269264

270265
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{})
@@ -277,7 +272,7 @@ func TestExperimentalSkillsSkippedByDefault(t *testing.T) {
277272
assert.Len(t, state.Skills, 2)
278273
assert.NotContains(t, state.Skills, "databricks-experimental")
279274

280-
assert.Contains(t, stderr.String(), "Installed 2 skills (v0.1.0).")
275+
assert.Contains(t, stderr.String(), "Installed 2 skills (v0.1.3).")
281276
}
282277

283278
func TestExperimentalSkillsIncludedWithFlag(t *testing.T) {
@@ -292,7 +287,7 @@ func TestExperimentalSkillsIncludedWithFlag(t *testing.T) {
292287
Experimental: true,
293288
}
294289

295-
src := &mockManifestSource{manifest: manifest, release: "v0.1.0"}
290+
src := &mockManifestSource{manifest: manifest}
296291
agent := testAgent(tmp)
297292

298293
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{
@@ -307,7 +302,7 @@ func TestExperimentalSkillsIncludedWithFlag(t *testing.T) {
307302
assert.Contains(t, state.Skills, "databricks-experimental")
308303
assert.True(t, state.IncludeExperimental)
309304

310-
assert.Contains(t, stderr.String(), "Installed 3 skills (v0.1.0).")
305+
assert.Contains(t, stderr.String(), "Installed 3 skills (v0.1.3).")
311306
}
312307

313308
func TestMinCLIVersionSkipWithWarningForInstallAll(t *testing.T) {
@@ -328,7 +323,7 @@ func TestMinCLIVersionSkipWithWarningForInstallAll(t *testing.T) {
328323
MinCLIVer: "0.300.0",
329324
}
330325

331-
src := &mockManifestSource{manifest: manifest, release: "v0.1.0"}
326+
src := &mockManifestSource{manifest: manifest}
332327
agent := testAgent(tmp)
333328

334329
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{})
@@ -341,7 +336,7 @@ func TestMinCLIVersionSkipWithWarningForInstallAll(t *testing.T) {
341336
assert.Len(t, state.Skills, 2)
342337
assert.NotContains(t, state.Skills, "databricks-future")
343338

344-
assert.Contains(t, stderr.String(), "Installed 2 skills (v0.1.0).")
339+
assert.Contains(t, stderr.String(), "Installed 2 skills (v0.1.3).")
345340
assert.Contains(t, logBuf.String(), "requires CLI version 0.300.0")
346341
}
347342

@@ -358,7 +353,7 @@ func TestMinCLIVersionHardErrorForInstallSingle(t *testing.T) {
358353
MinCLIVer: "0.300.0",
359354
}
360355

361-
src := &mockManifestSource{manifest: manifest, release: "v0.1.0"}
356+
src := &mockManifestSource{manifest: manifest}
362357
agent := testAgent(tmp)
363358

364359
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{
@@ -374,7 +369,7 @@ func TestIdempotentSecondInstallSkips(t *testing.T) {
374369
ctx := cmdio.MockDiscard(t.Context())
375370
setupFetchMock(t)
376371

377-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
372+
src := &mockManifestSource{manifest: testManifest()}
378373
agent := testAgent(tmp)
379374

380375
// First install.
@@ -403,7 +398,7 @@ func TestIdempotentInstallUpdatesNewVersions(t *testing.T) {
403398
ctx := cmdio.MockDiscard(t.Context())
404399
setupFetchMock(t)
405400

406-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
401+
src := &mockManifestSource{manifest: testManifest()}
407402
agent := testAgent(tmp)
408403

409404
// First install.
@@ -416,7 +411,7 @@ func TestIdempotentInstallUpdatesNewVersions(t *testing.T) {
416411
Version: "0.2.0",
417412
Files: []string{"SKILL.md"},
418413
}
419-
src2 := &mockManifestSource{manifest: updatedManifest, release: "v0.2.0"}
414+
src2 := &mockManifestSource{manifest: updatedManifest}
420415

421416
// Track which skills are fetched.
422417
var fetchedSkills []string
@@ -439,7 +434,7 @@ func TestIdempotentInstallUpdatesNewVersions(t *testing.T) {
439434
globalDir := filepath.Join(tmp, ".databricks", "aitools", "skills")
440435
state, err := LoadState(globalDir)
441436
require.NoError(t, err)
442-
assert.Equal(t, "v0.2.0", state.Release)
437+
assert.Equal(t, defaultSkillsRepoRef, state.Release)
443438
assert.Equal(t, "0.2.0", state.Skills["databricks-sql"])
444439
}
445440

@@ -452,7 +447,7 @@ func TestLegacyDetectMessagePrinted(t *testing.T) {
452447
globalDir := filepath.Join(tmp, ".databricks", "aitools", "skills")
453448
require.NoError(t, os.MkdirAll(filepath.Join(globalDir, "databricks-sql"), 0o755))
454449

455-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
450+
src := &mockManifestSource{manifest: testManifest()}
456451
agent := testAgent(tmp)
457452

458453
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{})
@@ -470,7 +465,7 @@ func TestLegacyDetectLegacyDir(t *testing.T) {
470465
legacyDir := filepath.Join(tmp, ".databricks", "agent-skills")
471466
require.NoError(t, os.MkdirAll(filepath.Join(legacyDir, "databricks-sql"), 0o755))
472467

473-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
468+
src := &mockManifestSource{manifest: testManifest()}
474469
agent := testAgent(tmp)
475470

476471
err := InstallSkillsForAgents(ctx, src, []*agents.Agent{agent}, InstallOptions{})
@@ -484,7 +479,7 @@ func TestIdempotentInstallReinstallsForNewAgent(t *testing.T) {
484479
ctx := cmdio.MockDiscard(t.Context())
485480
setupFetchMock(t)
486481

487-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
482+
src := &mockManifestSource{manifest: testManifest()}
488483
agent1 := testAgent(tmp)
489484

490485
// First install for agent1.
@@ -533,7 +528,7 @@ func TestLegacyTargetedInstallBlocked(t *testing.T) {
533528
globalDir := filepath.Join(tmp, ".databricks", "aitools", "skills")
534529
require.NoError(t, os.MkdirAll(filepath.Join(globalDir, "databricks-sql"), 0o755))
535530

536-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
531+
src := &mockManifestSource{manifest: testManifest()}
537532
agent := testAgent(tmp)
538533

539534
// Targeted install should fail on legacy setup.
@@ -553,7 +548,7 @@ func TestLegacyFullInstallAllowed(t *testing.T) {
553548
globalDir := filepath.Join(tmp, ".databricks", "aitools", "skills")
554549
require.NoError(t, os.MkdirAll(filepath.Join(globalDir, "databricks-sql"), 0o755))
555550

556-
src := &mockManifestSource{manifest: testManifest(), release: "v0.1.0"}
551+
src := &mockManifestSource{manifest: testManifest()}
557552
agent := testAgent(tmp)
558553

559554
// Full install (no SpecificSkills) should succeed and rebuild state.

0 commit comments

Comments
 (0)