@@ -22,14 +22,14 @@ const (
2222// - actionMode: The action mode (dev or release)
2323// - version: The version string to use for release mode
2424// - actionTag: Optional override tag/SHA (takes precedence over version when in release mode)
25- // - data : Optional WorkflowData for SHA resolution (can be nil for standalone use)
25+ // - resolver : Optional ActionSHAResolver for dynamic SHA resolution (can be nil for standalone use)
2626//
2727// Returns:
2828// - For dev mode: "./actions/setup" (local path)
29- // - For release mode with data : "github/gh-aw/actions/setup@<sha> # <version>" (SHA-pinned)
30- // - For release mode without data : "github/gh-aw/actions/setup@<version>" (tag-based, SHA resolved later)
29+ // - For release mode with resolver : "github/gh-aw/actions/setup@<sha> # <version>" (SHA-pinned)
30+ // - For release mode without resolver : "github/gh-aw/actions/setup@<version>" (tag-based, SHA resolved later)
3131// - Falls back to local path if version is invalid in release mode
32- func ResolveSetupActionReference (actionMode ActionMode , version string , actionTag string , data * WorkflowData ) string {
32+ func ResolveSetupActionReference (actionMode ActionMode , version string , actionTag string , resolver ActionSHAResolver ) string {
3333 localPath := "./actions/setup"
3434
3535 // Dev mode - return local path
@@ -55,25 +55,23 @@ func ResolveSetupActionReference(actionMode ActionMode, version string, actionTa
5555 }
5656
5757 // Construct the remote reference with tag: github/gh-aw/actions/setup@tag
58- remoteRef := fmt .Sprintf ("%s/%s@%s" , GitHubOrgRepo , actionPath , tag )
59-
60- // If WorkflowData is available, try to resolve the SHA
61- if data != nil {
62- actionRepo := fmt .Sprintf ("%s/%s" , GitHubOrgRepo , actionPath )
63- pinnedRef , err := GetActionPinWithData (actionRepo , tag , data )
64- if err != nil {
65- // In strict mode, GetActionPinWithData returns an error
66- actionRefLog .Printf ("Failed to pin action %s@%s: %v" , actionRepo , tag , err )
67- return ""
68- }
69- if pinnedRef != "" {
70- // Successfully resolved to SHA
58+ actionRepo := fmt .Sprintf ("%s/%s" , GitHubOrgRepo , actionPath )
59+ remoteRef := fmt .Sprintf ("%s@%s" , actionRepo , tag )
60+
61+ // If a resolver is available, try to resolve the SHA
62+ if resolver != nil {
63+ sha , err := resolver .ResolveSHA (actionRepo , tag )
64+ if err == nil && sha != "" {
65+ pinnedRef := formatActionReference (actionRepo , sha , tag )
7166 actionRefLog .Printf ("Release mode: resolved %s to SHA-pinned reference: %s" , remoteRef , pinnedRef )
7267 return pinnedRef
7368 }
69+ if err != nil {
70+ actionRefLog .Printf ("Failed to resolve SHA for %s@%s: %v" , actionRepo , tag , err )
71+ }
7472 }
7573
76- // If WorkflowData is not available or SHA resolution failed, return tag-based reference
74+ // If no resolver or SHA resolution failed, return tag-based reference
7775 // This is for backward compatibility with standalone workflow generators
7876 actionRefLog .Printf ("Release mode: using tag-based remote action reference: %s (SHA will be resolved later)" , remoteRef )
7977 return remoteRef
@@ -104,11 +102,15 @@ func (c *Compiler) resolveActionReference(localActionPath string, data *Workflow
104102 // For ./actions/setup, check for compiler-level actionTag override first
105103 if localActionPath == "./actions/setup" {
106104 // Use compiler actionTag if available, otherwise check features
105+ var resolver ActionSHAResolver
106+ if data != nil && data .ActionResolver != nil {
107+ resolver = data .ActionResolver
108+ }
107109 if c .actionTag != "" {
108- return ResolveSetupActionReference (c .actionMode , c .version , c .actionTag , data )
110+ return ResolveSetupActionReference (c .actionMode , c .version , c .actionTag , resolver )
109111 }
110112 if ! hasActionTag {
111- return ResolveSetupActionReference (c .actionMode , c .version , "" , data )
113+ return ResolveSetupActionReference (c .actionMode , c .version , "" , resolver )
112114 }
113115 }
114116
0 commit comments