mirror of
https://github.com/alexhopeoconnor/firmware.git
synced 2026-10-22 11:17:49 +10:00
ci: build newly added variants in the PR matrix (#11549)
* ci: build newly added variants in the PR matrix A new board declares board_level = release, so it gets no CI build until after merge. Build the first env of each platformio.ini added by a PR, regardless of board_level. Only added files qualify; adding an env to an existing config does not. * ci: also detect added variants in merge_group runs merge_group uses the same --level pr subset as pull_request, so a newly added variant was skipped there. Derive the diff base from github.event.merge_group.base_sha for those runs. * ci: fail the matrix step when the variant diff errors Process substitution hides the exit status, so a failed diff silently yielded an empty list and dropped the new board from the matrix. Capture into a variable so 'set -e' aborts the step instead.
This commit is contained in:
@@ -23,10 +23,29 @@ parser.add_argument(
|
||||
default=[],
|
||||
help="Board level to build for (omit for the 'pr' + 'release' matrix)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--added-config",
|
||||
action="append",
|
||||
default=[],
|
||||
metavar="PATH",
|
||||
help="platformio.ini added by this PR; its first env is built regardless of board_level",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
outlist = []
|
||||
|
||||
# A brand-new board is normally 'release', so it would get no CI until after merge.
|
||||
# Build the first env of each newly added config so it is compiled at least once.
|
||||
forced_envs = set()
|
||||
for added_path in args.added_config:
|
||||
try:
|
||||
with open(added_path, encoding="utf-8") as added_file:
|
||||
first_env = re.search(r"^[ \t]*\[env:([^\]]+)\]", added_file.read(), re.MULTILINE)
|
||||
except OSError:
|
||||
continue
|
||||
if first_env:
|
||||
forced_envs.add(first_env.group(1).strip())
|
||||
|
||||
cfg = ProjectConfig.get_instance()
|
||||
pio_envs = cfg.envs()
|
||||
|
||||
@@ -69,6 +88,9 @@ for env in all_envs:
|
||||
# Always include board_level = 'pr'
|
||||
if env["board_level"] == "pr":
|
||||
outlist.append(env["ci"])
|
||||
# Include the first env of a platformio.ini added by this PR
|
||||
elif env["ci"]["board"] in forced_envs:
|
||||
outlist.append(env["ci"])
|
||||
# Include board_level = 'extra' when requested
|
||||
elif "extra" in args.level and env["board_level"] == "extra":
|
||||
outlist.append(env["ci"])
|
||||
|
||||
Reference in New Issue
Block a user