release/1.0.6 #28
1 changed files with 8 additions and 4 deletions
ci(forgejo): limit json_field extraction to top-level keys
L'API Forgejo renvoie pour /releases/tags/<tag> un objet JSON pretty-printed où l'id racine (release.id, ex. 10706) est sur la première ligne, mais l'objet author contient aussi un id (souvent 1 pour le premier user du repo). L'ancienne regex sed matchait la première occurrence globale de "id" dans le fichier, donc elle retombait sur author.id=1 et le PATCH /releases/1 tombait en 404 'The target couldn't be found'. Fix : on pipe le fichier dans 'head -3' pour ne matcher que les premières lignes (couvre largement le préambule de l'objet release). Si Forgejo renvoie du JSON minifié (une seule ligne), head -3 renvoie toute la ligne et la regex matche le premier id (la racine, parce que les champs auteur sont après les champs racine).
commit
5186ffb7c8
|
|
@ -236,12 +236,16 @@ jobs:
|
|||
printf '%s' "$s"
|
||||
}
|
||||
|
||||
# Extraction d'un champ JSON scalaire (string ou number) depuis
|
||||
# un fichier. Utilise sed basique, suffisant pour les champs
|
||||
# id / tag_name que l'API renvoie en clair.
|
||||
# Extraction d'un champ JSON scalaire de premier niveau depuis un
|
||||
# fichier. On ne lit que les premières lignes pour éviter de
|
||||
# matcher un champ homonyme dans un objet imbriqué (par ex.
|
||||
# le champ "id" de l'auteur d'une release Forgejo, qui vaut
|
||||
# typiquement 1 pour le premier user du repo). Sans cette
|
||||
# restriction, le PATCH sur /releases/<id extrait> tombe en
|
||||
# 404 "The target couldn't be found".
|
||||
json_field() {
|
||||
local file="$1" field="$2"
|
||||
sed -n "s/.*\"$field\"[[:space:]]*:[[:space:]]*\"\?\([^\",}]*\)\"\?.*/\1/p" "$file" | head -1
|
||||
head -3 "$file" | sed -n "s/.*\"$field\"[[:space:]]*:[[:space:]]*\"\?\([0-9][0-9]*\)\"\?.*/\1/p" | head -1
|
||||
}
|
||||
|
||||
# 1. Vérifier si la release existe déjà pour ce tag.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue