repowarden 4.1.1 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/proteger CHANGED
@@ -14,7 +14,7 @@
14
14
  # [--sans-tags] [--dry-run]
15
15
  # --sans-tags : dépôt qui déplace lui-même un tag (tag majeur flottant v2…).
16
16
  # Réglages équivalents dans .repowarden.conf (requiredReviews, codeOwnerReview,
17
- # environment, environmentReviewers). Demande un gh connecté, admin du dépôt.
17
+ # unattributedApproval, environment, environmentReviewers). Demande un gh connecté, admin du dépôt.
18
18
  set -euo pipefail
19
19
 
20
20
  ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
@@ -25,6 +25,12 @@ cfg_r requiredReviews 0
25
25
  REVIEWS="$REPLY"
26
26
  cfg_r codeOwnerReview false
27
27
  CODEOWNERS="$REPLY"
28
+ # Approbation supplémentaire des changements non attribués : GitHub l'active
29
+ # d'office si elle n'est pas posée, et une PR ouverte par une application
30
+ # (jeton des Actions : PR de livraison, PR brouillon des tickets) attend alors
31
+ # un humain, même sans approbation exigée. Posée explicitement, false par défaut.
32
+ cfg_r unattributedApproval false
33
+ UNATTRIBUTED="$REPLY"
28
34
  cfg_r environment ""
29
35
  ENVIRONMENT="$REPLY"
30
36
  cfg_r environmentReviewers ""
@@ -51,6 +57,7 @@ done
51
57
  [ -n "$REPO" ] || REPO="$(gh repo view --json nameWithOwner -q .nameWithOwner)"
52
58
  [[ "$REVIEWS" =~ ^[0-9]$ ]] || { err_t ci.proteger.reviews_invalid; exit 1; }
53
59
  [[ "$CODEOWNERS" =~ ^(true|false)$ ]] || { err_t ci.proteger.codeowners_invalid; exit 1; }
60
+ [[ "$UNATTRIBUTED" =~ ^(true|false)$ ]] || { err_t ci.proteger.unattributed_invalid; exit 1; }
54
61
  # Avec relecture : le dernier à pousser ne peut pas approuver son propre push
55
62
  last_push=false
56
63
  [ "$REVIEWS" = 0 ] || last_push=true
@@ -104,6 +111,7 @@ branch_ruleset() {
104
111
  "allowed_merge_methods": [$3],
105
112
  "dismiss_stale_reviews_on_push": true,
106
113
  "require_code_owner_review": $CODEOWNERS,
114
+ "require_extra_approval_for_unattributed_changes": $UNATTRIBUTED,
107
115
  "require_last_push_approval": ${6:-$last_push},
108
116
  "required_approving_review_count": ${5:-$REVIEWS},
109
117
  "required_review_thread_resolution": true}},
@@ -206,7 +214,7 @@ echo_t ci.proteger.4 "$methods" "$delete_on_merge"
206
214
  [ -z "$integration" ] || echo_t ci.proteger.delivery "$livraison"
207
215
  echo_t ci.proteger.5 "$tags_msg"
208
216
  [ -z "$integration" ] || echo_t ci.proteger.6 "$integration"
209
- echo_t ci.proteger.7 "$REVIEWS" "$CODEOWNERS"
217
+ echo_t ci.proteger.7 "$REVIEWS" "$CODEOWNERS" "$UNATTRIBUTED"
210
218
  if [ "$REVIEWS" != 0 ] || [ "$CODEOWNERS" = true ]; then
211
219
  echo_t ci.proteger.8
212
220
  fi
@@ -254,7 +254,7 @@ _msg_en() {
254
254
  ci.proteger.4) _M=" merges: %s; automatic branch deletion: %s" ;;
255
255
  ci.proteger.5) _M=" v* tags: %s" ;;
256
256
  ci.proteger.6) _M=" default branch: %s" ;;
257
- ci.proteger.7) _M=" required approvals: %s; CODEOWNERS review: %s" ;;
257
+ ci.proteger.7) _M=" required approvals: %s; CODEOWNERS review: %s; approval of unattributed changes: %s" ;;
258
258
  ci.proteger.8) _M=" (admins keep an explicit bypass, recorded in the PR history)" ;;
259
259
  ci.proteger.9) _M=" \"%s\" environment: approval by %s; protected branches and v* tags" ;;
260
260
  ci.proteger.10) _M="Ruleset \"%s\" updated." ;;
@@ -263,6 +263,7 @@ _msg_en() {
263
263
  ci.proteger.13) _M="Settings applied." ;;
264
264
  ci.proteger.reviews_invalid) _M="--relecteurs: a number from 0 to 9 is expected." ;;
265
265
  ci.proteger.codeowners_invalid) _M="codeOwnerReview: true or false." ;;
266
+ ci.proteger.unattributed_invalid) _M="unattributedApproval: true or false." ;;
266
267
  ci.proteger.no_branch) _M="None of the branches \"%s\" exists on %s." ;;
267
268
  ci.proteger.no_cleanup) _M="Automatic branch deletion disabled (it would delete develop): add a workflow calling nettoyage-branches.yml, otherwise merged branches remain (see In an organisation)." ;;
268
269
  ci.proteger.delivery) _M=" delivery into main: %s approval(s) required (moving to a new version); auto-merge disabled" ;;
@@ -254,7 +254,7 @@ _msg_fr() {
254
254
  ci.proteger.4) _M=" merges : %s ; suppression auto des branches : %s" ;;
255
255
  ci.proteger.5) _M=" tags v* : %s" ;;
256
256
  ci.proteger.6) _M=" branche par défaut : %s" ;;
257
- ci.proteger.7) _M=" approbations exigées : %s ; revue des CODEOWNERS : %s" ;;
257
+ ci.proteger.7) _M=" approbations exigées : %s ; revue des CODEOWNERS : %s ; approbation des changements non attribués : %s" ;;
258
258
  ci.proteger.8) _M=" (les admins gardent un contournement explicite, tracé dans l'historique de la PR)" ;;
259
259
  ci.proteger.9) _M=" environnement « %s » : approbation de %s ; branches protégées et tags v*" ;;
260
260
  ci.proteger.10) _M="Ruleset « %s » mis à jour." ;;
@@ -263,6 +263,7 @@ _msg_fr() {
263
263
  ci.proteger.13) _M="Réglages appliqués." ;;
264
264
  ci.proteger.reviews_invalid) _M="--relecteurs : nombre de 0 à 9 attendu." ;;
265
265
  ci.proteger.codeowners_invalid) _M="codeOwnerReview : true ou false." ;;
266
+ ci.proteger.unattributed_invalid) _M="unattributedApproval : true ou false." ;;
266
267
  ci.proteger.no_branch) _M="Aucune des branches « %s » n'existe sur %s." ;;
267
268
  ci.proteger.no_cleanup) _M="Suppression automatique des branches désactivée (elle supprimerait develop) : ajouter un workflow qui appelle nettoyage-branches.yml, sinon les branches mergées restent (voir En organisation)." ;;
268
269
  ci.proteger.delivery) _M=" livraison vers main : %s approbation(s) exigée(s) (passage à une nouvelle version) ; merge automatique désactivé" ;;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "repowarden",
3
- "version": "4.1.1",
3
+ "version": "4.1.2",
4
4
  "description": "Hooks git et CI multi-langages : messages de commit, nommage des branches, secrets, formatage, tests ciblés, code mort, releases.",
5
5
  "keywords": [
6
6
  "git-hooks",