Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/aw/actions-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
"version": "v5.6.0",
"sha": "a26af69be951a213d495a4c3e4e4022e16d87065"
},
"actions/upload-artifact@v4": {
"actions/upload-artifact@v4.6.2": {
"repo": "actions/upload-artifact",
"version": "v4.6.2",
"sha": "ea165f8d65b6e75b540449e92b4886f43607fa02"
Expand Down
982 changes: 982 additions & 0 deletions .github/aw/test-dispatcher.lock.yml

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions .github/workflows/archie.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/cloclo.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/daily-compiler-quality.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/daily-file-diet.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/daily-testify-uber-super-expert.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/developer-docs-consolidator.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/duplicate-code-detector.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/glossary-maintainer.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/go-fan.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/jsweep.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/mcp-inspector.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/q.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/repository-quality-improver.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/sergo.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/smoke-claude.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/smoke-codex.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/smoke-copilot.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/terminal-stylist.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .github/workflows/typist.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pkg/workflow/compiler_yaml_main_job.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ func (c *Compiler) generateMainJobSteps(yaml *strings.Builder, data *WorkflowDat
}
}

// Add Serena cache step if Serena tool is enabled
c.generateSerenaCacheStep(yaml, data, needsCheckout)

// Add checkout steps for repository imports
// Each repository import needs to be checked out into a temporary folder
// so the merge script can copy files from it
Expand Down
2 changes: 1 addition & 1 deletion pkg/workflow/data/action_pins.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
"version": "v5.6.0",
"sha": "a26af69be951a213d495a4c3e4e4022e16d87065"
},
"actions/upload-artifact@v4": {
"actions/upload-artifact@v4.6.2": {
"repo": "actions/upload-artifact",
"version": "v4.6.2",
"sha": "ea165f8d65b6e75b540449e92b4886f43607fa02"
Expand Down
58 changes: 58 additions & 0 deletions pkg/workflow/serena_cache.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package workflow

import (
"fmt"
"strings"

"github.com/githubnext/gh-aw/pkg/logger"
)

var serenaCacheLog = logger.New("workflow:serena_cache")

// isSerenaEnabled checks if the Serena tool is configured in the workflow
func isSerenaEnabled(data *WorkflowData) bool {
if data == nil {
return false
}

// Check ParsedTools first (strongly-typed)
if data.ParsedTools != nil && data.ParsedTools.Serena != nil {
serenaCacheLog.Print("Serena tool detected via ParsedTools")
return true
}

// Fallback to Tools map for backward compatibility
if data.Tools != nil {
if _, exists := data.Tools["serena"]; exists {
serenaCacheLog.Print("Serena tool detected via Tools map")
return true
}
}

return false
}

// generateSerenaCacheStep adds a cache step for .serena/cache if Serena tool is enabled
// The cache is configured to:
// - Use path: .serena/cache
// - Ignore if the folder doesn't exist (continue-on-error: true)
// - Expire in 7 days (GitHub Actions default cache retention policy)
// - Use "last cache wins" strategy (save-always: true)
func (c *Compiler) generateSerenaCacheStep(yaml *strings.Builder, data *WorkflowData, needsCheckout bool) {
// Only add cache if Serena is enabled and checkout was performed
if !isSerenaEnabled(data) || !needsCheckout {
return
}

serenaCacheLog.Print("Generating Serena cache step")

yaml.WriteString(" - name: Cache Serena\n")
fmt.Fprintf(yaml, " uses: %s\n", GetActionPin("actions/cache"))
yaml.WriteString(" continue-on-error: true\n")
yaml.WriteString(" with:\n")
yaml.WriteString(" path: .serena/cache\n")
yaml.WriteString(" key: serena-${{ runner.os }}-${{ github.run_id }}-${{ github.run_attempt }}\n")
yaml.WriteString(" restore-keys: |\n")
yaml.WriteString(" serena-${{ runner.os }}-\n")
yaml.WriteString(" save-always: true\n")
}
Loading
Loading