@@ -93,6 +93,29 @@ func ReplaceActions(inputYaml string, customerMaintainedActions map[string]strin
9393 }
9494 }
9595 }
96+
97+ // For composite actions
98+ if workflow .Runs .Using == "composite" {
99+ for stepIdx , step := range workflow .Runs .Steps {
100+ if len (step .Uses ) > 0 {
101+ actionName := strings .Split (step .Uses , "@" )[0 ]
102+ if newAction , ok := actionMap [actionName ]; ok {
103+ latestVersion , err := GetLatestRelease (newAction )
104+ if err != nil {
105+ return inputYaml , updated , fmt .Errorf ("unable to get latest release: %v" , err )
106+ }
107+ replacements = append (replacements , replacement {
108+ jobName : "composite" , // special marker for composite actions
109+ stepIdx : stepIdx ,
110+ newAction : newAction ,
111+ originalAction : step .Uses ,
112+ latestVersion : latestVersion ,
113+ })
114+ }
115+ }
116+ }
117+ }
118+
96119 if len (replacements ) == 0 {
97120 // No changes needed
98121 return inputYaml , false , nil
@@ -115,9 +138,19 @@ func ReplaceActions(inputYaml string, customerMaintainedActions map[string]strin
115138
116139func replaceAction (t * yaml.Node , inputLines []string , replacements []replacement , updated bool ) ([]string , bool ) {
117140 for _ , r := range replacements {
118- jobsNode := permissions .IterateNode (t , "jobs" , "!!map" , 0 )
119- jobNode := permissions .IterateNode (jobsNode , r .jobName , "!!map" , 0 )
120- stepsNode := permissions .IterateNode (jobNode , "steps" , "!!seq" , 0 )
141+ var stepsNode * yaml.Node
142+
143+ if r .jobName == "composite" {
144+ // Handle composite actions
145+ runsNode := permissions .IterateNode (t , "runs" , "!!map" , 0 )
146+ stepsNode = permissions .IterateNode (runsNode , "steps" , "!!seq" , 0 )
147+ } else {
148+ // Handle regular workflow jobs
149+ jobsNode := permissions .IterateNode (t , "jobs" , "!!map" , 0 )
150+ jobNode := permissions .IterateNode (jobsNode , r .jobName , "!!map" , 0 )
151+ stepsNode = permissions .IterateNode (jobNode , "steps" , "!!seq" , 0 )
152+ }
153+
121154 if stepsNode == nil {
122155 continue
123156 }
0 commit comments