Source code for action_updater.main.updaters.setoutput.update

__author__ = "Vanessa Sochat"
__copyright__ = "Copyright 2022, Vanessa Sochat"
__license__ = "MPL 2.0"

import re

from action_updater.main.updater import UpdaterBase


[docs]def update_lines(lines, key="set-output", envar="$GITHUB_OUTPUT"): """ Helper function to replace generic "set-X" variable with pipe to envar. """ lines = lines.splitlines(keepends=True) updated = [] for line in lines: if key not in line: updated.append(line) continue # Convert: # echo "::set-output name={name}}::${raw_data[4]}" # echo "name=value" >> $GITHUB_OUTPUT match = re.search("%s(\s)+name=(?P<name>.+)::(?P<value>.+)" % key, line) # noqa if not match: updated.append(line) continue match = match.groupdict() value = match["value"].strip('"').strip("'") line = 'echo "%s=%s" >> %s\n' % (match["name"], value, envar) updated.append(line) return "".join(updated)
[docs]class SetoutputUpdater(UpdaterBase): name = "set-output" description = "update deprecated set-output commands"
[docs] def detect(self, action): """ Detect changes in an action, old set-output. """ # Set the count to 0 self.count = 0 # No point if we don't have jobs! if not action.steps: return False # For each job, look for steps->updater versions for step in action.steps: # We are primarily interested in uses if "run" not in step: continue # Update step run lines (returns parsed again together) updated_lines = update_lines(step["run"]) # Keep track of change counts if updated_lines != step["run"]: self.count += 1 step["run"] = updated_lines return self.count != 0