fix(open-recipe-pr): replace python3 with jq (cc-ci has jq, not python3)
This commit is contained in:
@@ -37,7 +37,7 @@ NAMESPACE="${GITEA_NAMESPACE:-recipe-maintainers}"
|
|||||||
RECIPE_DIR="${HOME}/.abra/recipes/${RECIPE}"
|
RECIPE_DIR="${HOME}/.abra/recipes/${RECIPE}"
|
||||||
|
|
||||||
export PATH="/run/current-system/sw/bin:${PATH}"
|
export PATH="/run/current-system/sw/bin:${PATH}"
|
||||||
PASS_ENC=$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1],safe=''))" "${GITEA_PASSWORD}")
|
PASS_ENC=$(printf '%s' "${GITEA_PASSWORD}" | jq -Rr '@uri')
|
||||||
API="https://${GITEA_URL}/api/v1"
|
API="https://${GITEA_URL}/api/v1"
|
||||||
AUTH=(-u "${GITEA_USERNAME}:${GITEA_PASSWORD}")
|
AUTH=(-u "${GITEA_USERNAME}:${GITEA_PASSWORD}")
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ if [ "${STATUS}" = "404" ]; then
|
|||||||
echo "→ Mirror ${NAMESPACE}/${RECIPE} does not exist; nothing to reconcile."; exit 0
|
echo "→ Mirror ${NAMESPACE}/${RECIPE} does not exist; nothing to reconcile."; exit 0
|
||||||
fi
|
fi
|
||||||
echo "→ Mirror ${NAMESPACE}/${RECIPE} missing; creating..."
|
echo "→ Mirror ${NAMESPACE}/${RECIPE} missing; creating..."
|
||||||
BODY=$(python3 -c "import json;print(json.dumps({'name':'${RECIPE}','private':True,'default_branch':'main','auto_init':False}))")
|
BODY=$(jq -n --arg name "${RECIPE}" '{name:$name,private:true,default_branch:"main",auto_init:false}')
|
||||||
CS=$(curl -s -o /dev/null -w "%{http_code}" "${AUTH[@]}" -H "Content-Type: application/json" -X POST "${API}/orgs/${NAMESPACE}/repos" -d "${BODY}")
|
CS=$(curl -s -o /dev/null -w "%{http_code}" "${AUTH[@]}" -H "Content-Type: application/json" -X POST "${API}/orgs/${NAMESPACE}/repos" -d "${BODY}")
|
||||||
if [ "${CS}" != "201" ]; then
|
if [ "${CS}" != "201" ]; then
|
||||||
CS=$(curl -s -o /dev/null -w "%{http_code}" "${AUTH[@]}" -H "Content-Type: application/json" -X POST "${API}/user/repos" -d "${BODY}")
|
CS=$(curl -s -o /dev/null -w "%{http_code}" "${AUTH[@]}" -H "Content-Type: application/json" -X POST "${API}/user/repos" -d "${BODY}")
|
||||||
@@ -96,7 +96,7 @@ close_pr() { # <index> <reason>
|
|||||||
local idx="$1" reason="$2"
|
local idx="$1" reason="$2"
|
||||||
curl -s -o /dev/null "${AUTH[@]}" -H "Content-Type: application/json" -X POST \
|
curl -s -o /dev/null "${AUTH[@]}" -H "Content-Type: application/json" -X POST \
|
||||||
"${API}/repos/${NAMESPACE}/${RECIPE}/issues/${idx}/comments" \
|
"${API}/repos/${NAMESPACE}/${RECIPE}/issues/${idx}/comments" \
|
||||||
-d "$(python3 -c "import json,sys;print(json.dumps({'body':sys.argv[1]}))" "Auto-closed by /recipe-upgrade: ${reason}")" || true
|
-d "$(jq -n --arg body "Auto-closed by /recipe-upgrade: ${reason}" '{body:$body}')" || true
|
||||||
curl -s -o /dev/null "${AUTH[@]}" -H "Content-Type: application/json" -X PATCH \
|
curl -s -o /dev/null "${AUTH[@]}" -H "Content-Type: application/json" -X PATCH \
|
||||||
"${API}/repos/${NAMESPACE}/${RECIPE}/pulls/${idx}" -d '{"state":"closed"}' || true
|
"${API}/repos/${NAMESPACE}/${RECIPE}/pulls/${idx}" -d '{"state":"closed"}' || true
|
||||||
echo " ✗ closed PR #${idx} — ${reason}"
|
echo " ✗ closed PR #${idx} — ${reason}"
|
||||||
@@ -125,13 +125,7 @@ while IFS=$'\t' read -r IDX HEAD_REF; do
|
|||||||
else
|
else
|
||||||
echo " • PR #${IDX} (${HEAD_REF}) still open vs upstream main — left as-is (reconcile-only)"
|
echo " • PR #${IDX} (${HEAD_REF}) still open vs upstream main — left as-is (reconcile-only)"
|
||||||
fi
|
fi
|
||||||
done < <(echo "${OPEN_PRS}" | python3 -c "
|
done < <(echo "${OPEN_PRS}" | jq -r '.[] | [(.number | tostring), .head.ref] | @tsv' 2>/dev/null || true)
|
||||||
import json,sys
|
|
||||||
try: data=json.load(sys.stdin)
|
|
||||||
except Exception: data=[]
|
|
||||||
for pr in data:
|
|
||||||
print(f\"{pr['number']}\t{pr['head']['ref']}\")
|
|
||||||
")
|
|
||||||
|
|
||||||
if [ "${MODE}" = "--reconcile-only" ]; then
|
if [ "${MODE}" = "--reconcile-only" ]; then
|
||||||
echo "✓ reconcile-only done for ${NAMESPACE}/${RECIPE} (main synced; merged-upstream PRs closed)."
|
echo "✓ reconcile-only done for ${NAMESPACE}/${RECIPE} (main synced; merged-upstream PRs closed)."
|
||||||
@@ -148,15 +142,16 @@ PR_BODY="${PR_BODY}
|
|||||||
Tested green on the cc-ci recipe CI server (full suite, cold, against this PR head). NOT merged — for operator review.
|
Tested green on the cc-ci recipe CI server (full suite, cold, against this PR head). NOT merged — for operator review.
|
||||||
|
|
||||||
cc @trav @notplants"
|
cc @trav @notplants"
|
||||||
PAYLOAD=$(python3 -c "
|
PAYLOAD=$(jq -n \
|
||||||
import json,sys
|
--arg title "${LATEST_MSG}" \
|
||||||
print(json.dumps({'title':sys.argv[1],'body':sys.argv[2],'head':sys.argv[3],'base':'main','reviewers':['trav','notplants']}))" \
|
--arg body "${PR_BODY}" \
|
||||||
"${LATEST_MSG}" "${PR_BODY}" "${BRANCH}")
|
--arg head "${BRANCH}" \
|
||||||
|
'{title:$title,body:$body,head:$head,base:"main",reviewers:["trav","notplants"]}')
|
||||||
|
|
||||||
RESP=$(mktemp)
|
RESP=$(mktemp)
|
||||||
PS=$(curl -s -o "${RESP}" -w "%{http_code}" "${AUTH[@]}" -H "Content-Type: application/json" -X POST "${API}/repos/${NAMESPACE}/${RECIPE}/pulls" -d "${PAYLOAD}")
|
PS=$(curl -s -o "${RESP}" -w "%{http_code}" "${AUTH[@]}" -H "Content-Type: application/json" -X POST "${API}/repos/${NAMESPACE}/${RECIPE}/pulls" -d "${PAYLOAD}")
|
||||||
if [ "${PS}" = "201" ]; then
|
if [ "${PS}" = "201" ]; then
|
||||||
echo "PR_URL=$(python3 -c "import json;print(json.load(open('${RESP}'))['html_url'])")"
|
echo "PR_URL=$(jq -r '.html_url' "${RESP}")"
|
||||||
elif [ "${PS}" = "409" ] || grep -q "pull request already exists" "${RESP}" 2>/dev/null; then
|
elif [ "${PS}" = "409" ] || grep -q "pull request already exists" "${RESP}" 2>/dev/null; then
|
||||||
echo "PR_URL=https://${GITEA_URL}/${NAMESPACE}/${RECIPE}/pulls (branch ${BRANCH} already has a PR — updated by force-push)"
|
echo "PR_URL=https://${GITEA_URL}/${NAMESPACE}/${RECIPE}/pulls (branch ${BRANCH} already has a PR — updated by force-push)"
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user