Compare commits

...

1 Commits

Author SHA1 Message Date
46b15ed6ab fix(actions): remove fragile heredocs from proposer PR step
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 40s
2026-03-16 12:30:43 +01:00

View File

@@ -555,22 +555,20 @@ jobs:
[[ "${NOOP:-0}" == "0" ]] || exit 0 [[ "${NOOP:-0}" == "0" ]] || exit 0
[[ -n "${BRANCH:-}" ]] || { echo "BRANCH unset -> skip PR"; exit 0; } [[ -n "${BRANCH:-}" ]] || { echo "BRANCH unset -> skip PR"; exit 0; }
test -n "${FORGE_TOKEN:-}" || { echo "Missing FORGE_TOKEN"; exit 1; }
if [[ "${TARGET_COUNT:-0}" == "1" ]]; then if [[ "${TARGET_COUNT:-0}" == "1" ]]; then
PR_TITLE="proposer: apply ticket #${TARGET_PRIMARY_ISSUE}" PR_TITLE="proposer: apply ticket #${TARGET_PRIMARY_ISSUE}"
else else
PR_TITLE="proposer: apply ${TARGET_COUNT} tickets on ${TARGET_CHEMIN}" PR_TITLE="proposer: apply ${TARGET_COUNT} tickets on ${TARGET_CHEMIN}"
fi fi
export TITLE="$PR_TITLE" export PR_TITLE TARGET_CHEMIN TARGET_ISSUES BRANCH END_SHA DEFAULT_BRANCH OWNER
export CHEMIN="$TARGET_CHEMIN"
export ISSUES="$TARGET_ISSUES"
export BRANCH="$BRANCH"
export END_SHA="${END_SHA:-unknown}"
export DEFAULT_BRANCH="$DEFAULT_BRANCH"
export OWNER="$OWNER"
node --input-type=module - <<'NODE' > /tmp/proposer.pr.json node --input-type=module -e '
const issues = String(process.env.ISSUES || "") import fs from "node:fs";
const issues = String(process.env.TARGET_ISSUES || "")
.trim() .trim()
.split(/\s+/) .split(/\s+/)
.filter(Boolean); .filter(Boolean);
@@ -578,7 +576,7 @@ jobs:
const body = [ const body = [
`PR auto depuis ticket${issues.length > 1 ? "s" : ""} ${issues.map((n) => `#${n}`).join(", ")} (state/approved).`, `PR auto depuis ticket${issues.length > 1 ? "s" : ""} ${issues.map((n) => `#${n}`).join(", ")} (state/approved).`,
"", "",
`- Chemin: ${process.env.CHEMIN || "(inconnu)"}`, `- Chemin: ${process.env.TARGET_CHEMIN || "(inconnu)"}`,
"- Tickets:", "- Tickets:",
...issues.map((n) => ` - #${n}`), ...issues.map((n) => ` - #${n}`),
`- Branche: ${process.env.BRANCH || ""}`, `- Branche: ${process.env.BRANCH || ""}`,
@@ -587,14 +585,17 @@ jobs:
"Merge si CI OK." "Merge si CI OK."
].join("\n"); ].join("\n");
process.stdout.write(JSON.stringify({ fs.writeFileSync(
title: process.env.TITLE || "proposer: apply tickets", "/tmp/proposer.pr.json",
JSON.stringify({
title: process.env.PR_TITLE || "proposer: apply tickets",
body, body,
base: process.env.DEFAULT_BRANCH || "main", base: process.env.DEFAULT_BRANCH || "main",
head: `${process.env.OWNER}:${process.env.BRANCH}`, head: `${process.env.OWNER}:${process.env.BRANCH}`,
allow_maintainer_edit: true allow_maintainer_edit: true
})); })
NODE );
'
PR_JSON="$(curl -fsS -X POST \ PR_JSON="$(curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \ -H "Authorization: token $FORGE_TOKEN" \
@@ -602,10 +603,7 @@ jobs:
"$API_BASE/api/v1/repos/$OWNER/$REPO/pulls" \ "$API_BASE/api/v1/repos/$OWNER/$REPO/pulls" \
--data-binary @/tmp/proposer.pr.json)" --data-binary @/tmp/proposer.pr.json)"
PR_URL="$(node --input-type=module -e ' PR_URL="$(node --input-type=module -e 'const pr = JSON.parse(process.argv[1] || "{}"); console.log(pr.html_url || pr.url || "");' "$PR_JSON")"
const pr = JSON.parse(process.argv[1] || "{}");
console.log(pr.html_url || pr.url || "");
' "$PR_JSON")"
test -n "$PR_URL" || { test -n "$PR_URL" || {
echo "PR URL missing. Raw: $PR_JSON" echo "PR URL missing. Raw: $PR_JSON"
@@ -614,15 +612,21 @@ jobs:
for ISSUE in $TARGET_ISSUES; do for ISSUE in $TARGET_ISSUES; do
export ISSUE PR_URL export ISSUE PR_URL
node --input-type=module - <<'NODE' > /tmp/proposer.issue.close.comment.json
node --input-type=module -e '
import fs from "node:fs";
const issue = process.env.ISSUE || ""; const issue = process.env.ISSUE || "";
const url = process.env.PR_URL || ""; const url = process.env.PR_URL || "";
const msg = const msg =
`PR proposer created for ticket #${issue}: ${url}\n\n` + `PR proposer créée pour le ticket #${issue} : ${url}\n\n` +
`The ticket is closed automatically. Discussion can continue in the PR.`; `Le ticket est clôturé automatiquement ; la discussion peut se poursuivre dans la PR.`;
process.stdout.write(JSON.stringify({ body: msg })); fs.writeFileSync(
NODE "/tmp/proposer.issue.close.comment.json",
JSON.stringify({ body: msg })
);
'
curl -fsS -X POST \ curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \ -H "Authorization: token $FORGE_TOKEN" \