Compare commits
1 Commits
debug/prop
...
hotfix/pro
| Author | SHA1 | Date | |
|---|---|---|---|
| 46b15ed6ab |
@@ -555,46 +555,47 @@ 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";
|
||||||
.trim()
|
|
||||||
.split(/\s+/)
|
|
||||||
.filter(Boolean);
|
|
||||||
|
|
||||||
const body = [
|
const issues = String(process.env.TARGET_ISSUES || "")
|
||||||
`PR auto depuis ticket${issues.length > 1 ? "s" : ""} ${issues.map((n) => `#${n}`).join(", ")} (state/approved).`,
|
.trim()
|
||||||
"",
|
.split(/\s+/)
|
||||||
`- Chemin: ${process.env.CHEMIN || "(inconnu)"}`,
|
.filter(Boolean);
|
||||||
"- Tickets:",
|
|
||||||
...issues.map((n) => ` - #${n}`),
|
|
||||||
`- Branche: ${process.env.BRANCH || ""}`,
|
|
||||||
`- Commit: ${process.env.END_SHA || "unknown"}`,
|
|
||||||
"",
|
|
||||||
"Merge si CI OK."
|
|
||||||
].join("\n");
|
|
||||||
|
|
||||||
process.stdout.write(JSON.stringify({
|
const body = [
|
||||||
title: process.env.TITLE || "proposer: apply tickets",
|
`PR auto depuis ticket${issues.length > 1 ? "s" : ""} ${issues.map((n) => `#${n}`).join(", ")} (state/approved).`,
|
||||||
body,
|
"",
|
||||||
base: process.env.DEFAULT_BRANCH || "main",
|
`- Chemin: ${process.env.TARGET_CHEMIN || "(inconnu)"}`,
|
||||||
head: `${process.env.OWNER}:${process.env.BRANCH}`,
|
"- Tickets:",
|
||||||
allow_maintainer_edit: true
|
...issues.map((n) => ` - #${n}`),
|
||||||
}));
|
`- Branche: ${process.env.BRANCH || ""}`,
|
||||||
NODE
|
`- Commit: ${process.env.END_SHA || "unknown"}`,
|
||||||
|
"",
|
||||||
|
"Merge si CI OK."
|
||||||
|
].join("\n");
|
||||||
|
|
||||||
|
fs.writeFileSync(
|
||||||
|
"/tmp/proposer.pr.json",
|
||||||
|
JSON.stringify({
|
||||||
|
title: process.env.PR_TITLE || "proposer: apply tickets",
|
||||||
|
body,
|
||||||
|
base: process.env.DEFAULT_BRANCH || "main",
|
||||||
|
head: `${process.env.OWNER}:${process.env.BRANCH}`,
|
||||||
|
allow_maintainer_edit: true
|
||||||
|
})
|
||||||
|
);
|
||||||
|
'
|
||||||
|
|
||||||
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
|
|
||||||
const issue = process.env.ISSUE || "";
|
|
||||||
const url = process.env.PR_URL || "";
|
|
||||||
const msg =
|
|
||||||
`PR proposer created for ticket #${issue}: ${url}\n\n` +
|
|
||||||
`The ticket is closed automatically. Discussion can continue in the PR.`;
|
|
||||||
|
|
||||||
process.stdout.write(JSON.stringify({ body: msg }));
|
node --input-type=module -e '
|
||||||
NODE
|
import fs from "node:fs";
|
||||||
|
|
||||||
|
const issue = process.env.ISSUE || "";
|
||||||
|
const url = process.env.PR_URL || "";
|
||||||
|
const msg =
|
||||||
|
`PR proposer créée pour le ticket #${issue} : ${url}\n\n` +
|
||||||
|
`Le ticket est clôturé automatiquement ; la discussion peut se poursuivre dans la PR.`;
|
||||||
|
|
||||||
|
fs.writeFileSync(
|
||||||
|
"/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" \
|
||||||
|
|||||||
Reference in New Issue
Block a user