167 lines
6.5 KiB
Bash
Executable File
167 lines
6.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Crée les issues GitHub du plan « Backlog GitHub, domaines et suite prod »
|
||
# si aucune issue ouverte du même titre n’existe déjà.
|
||
# Prérequis : GitHub CLI (`gh`) authentifié, `jq` installé.
|
||
set -euo pipefail
|
||
|
||
REPO="${1:-kazerlelutin/ben-to}"
|
||
|
||
issue_exists() {
|
||
local title="$1"
|
||
local n
|
||
n="$(gh issue list -R "$REPO" --state open --limit 500 --json title | jq --arg t "$title" '[.[] | select(.title == $t)] | length')"
|
||
[[ "${n:-0}" -gt 0 ]]
|
||
}
|
||
|
||
create_if_absent() {
|
||
local title="$1"
|
||
local body_file="$2"
|
||
if issue_exists "$title"; then
|
||
echo "SKIP (déjà ouvert): $title"
|
||
return 0
|
||
fi
|
||
gh issue create -R "$REPO" -t "$title" -F "$body_file" -l enhancement
|
||
echo "OK: $title"
|
||
}
|
||
|
||
TMP="$(mktemp -d)"
|
||
trap 'rm -rf "$TMP"' EXIT
|
||
|
||
# --- Meta audit ---
|
||
cat >"$TMP/meta.md" <<'EOF'
|
||
## Synthèse audit backlog (scripts/github/BACKLOG-AUDIT.md)
|
||
|
||
Voir le fichier **BACKLOG-AUDIT.md** dans `scripts/github/` du dépôt pour le tableau détaillé des issues #1–#6 et l’architecture `app` / `book` / contenus (`ressources/`).
|
||
|
||
**Résumé :** #1 et #2 fermées ; #3–#6 ouvertes — interprétation : builder et CI largement avancés côté code ; PocketBase à reclarifier ; delivery mobile à compléter (signing / Gradle).
|
||
|
||
Prochaine étape : traiter les nouvelles issues « API assets » et « Play » créées par le même plan.
|
||
EOF
|
||
create_if_absent "[Meta] Audit backlog prod — avril 2026" "$TMP/meta.md"
|
||
|
||
# --- API / assets ---
|
||
cat >"$TMP/api-bases.md" <<'EOF'
|
||
## Contexte
|
||
|
||
Recettes et sprites sont **versionnés dans le dépôt** (`ressources/bentext`, `ressources/public/ingredient-sprites.bentext`). Il manque encore des tuiles cohérentes pour certaines bases canoniques.
|
||
|
||
## À faire
|
||
|
||
- Fournir ou ajuster les **sprites / alias** pour les bases : **mandu**, **dan bing**, **muffin**, **madeleine** (même pipeline que les autres bases dans le catalogue).
|
||
- Vérifier que `ingredient-sprites.bentext` et `npm run pipeline:recipes` reflètent les slugs / alias attendus.
|
||
|
||
## Critères
|
||
|
||
- Les bases concernées affichent une icône correcte dans le builder après `npm run pipeline:recipes`.
|
||
EOF
|
||
create_if_absent "Catalogue — icônes bases manquantes (mandu, dan bing, muffin, madeleine)" "$TMP/api-bases.md"
|
||
|
||
cat >"$TMP/api-variants.md" <<'EOF'
|
||
## Contexte
|
||
|
||
Le catalogue expose de nombreuses variantes ; les icônes d’ingrédients / tuiles doivent être cohérentes pour toutes.
|
||
|
||
## À faire
|
||
|
||
- Inventaire dans le dépôt des variantes / alias d’ingrédients nécessitant une entrée dans `ingredient-sprites.bentext`.
|
||
- Couvrir **toutes les variantes** ou documenter une **règle de fallback** (placeholder, sprite générique) lorsque aucune tuile ne correspond.
|
||
|
||
## Critères
|
||
|
||
- Aucune variante « cassée » visuellement dans le builder ; fallback explicite documenté.
|
||
EOF
|
||
create_if_absent "Catalogue — icônes pour toutes les variantes (+ fallback)" "$TMP/api-variants.md"
|
||
|
||
cat >"$TMP/placeholders.md" <<'EOF'
|
||
## Contexte
|
||
|
||
Certaines recettes n’ont pas encore de visuel final ; le build gère déjà des placeholders (`ressources/recipe-placeholder-covers`, logique dans `scripts/build-recipes.mjs`).
|
||
|
||
## À faire
|
||
|
||
- Définir la **convention** (nommage, par locale ou unique) pour les couvertures manquantes.
|
||
- Produire / brancher les **placeholders** dans le dépôt pour toutes les recettes sans image finale.
|
||
|
||
## Critères
|
||
|
||
- Build sans trou visuel critique ; liste des recettes encore en placeholder documentée.
|
||
EOF
|
||
create_if_absent "Assets — placeholders couvertures recettes manquantes" "$TMP/placeholders.md"
|
||
|
||
# --- Play / Android ---
|
||
cat >"$TMP/play-account.md" <<'EOF'
|
||
## À faire
|
||
|
||
- Créer le **compte développeur Google Play** (frais d’enregistrement one-shot).
|
||
- Accepter les accords distributeur ; définir pays / zones de distribution.
|
||
|
||
## Références
|
||
|
||
- `appId` : `com.kazerlelutin.bento` (`apps/mobile/capacitor.config.ts`).
|
||
EOF
|
||
create_if_absent "Play Store — compte développeur Google Play" "$TMP/play-account.md"
|
||
|
||
cat >"$TMP/play-listing.md" <<'EOF'
|
||
## À faire
|
||
|
||
- Fiche **Play Console** : nom, descriptions courte/longue, captures d’écran, icône haute résolution.
|
||
- **Classification du contenu** (questionnaire Play).
|
||
- Alignement avec la marque **Bento** / Ben-to.
|
||
|
||
## Package
|
||
|
||
- `com.kazerlelutin.bento` — vérifier cohérence avec la fiche avant publication.
|
||
EOF
|
||
create_if_absent "Play Store — fiche produit (captures, descriptions, classement)" "$TMP/play-listing.md"
|
||
|
||
cat >"$TMP/play-privacy.md" <<'EOF'
|
||
## À faire
|
||
|
||
- Publier une **URL HTTPS** de politique de confidentialité (obligatoire Play).
|
||
- Cohérence avec les mentions légales / confidentialité de l’app (`packages/shared/i18n`, pages statiques).
|
||
|
||
## Notes
|
||
|
||
- Peut être servie depuis `ben-to.fr` (domaine apex de l’app) ou autre sous-domaine stable.
|
||
EOF
|
||
create_if_absent "Play Store — URL politique de confidentialité (HTTPS)" "$TMP/play-privacy.md"
|
||
|
||
cat >"$TMP/play-data-safety.md" <<'EOF'
|
||
## À faire
|
||
|
||
- Remplir le formulaire **Data safety** (données collectées, partagées, chiffrement, etc.).
|
||
- Aligner sur le comportement réel : stockage local (constructeur), catalogue embarqué, mesure d’audience optionnelle (Matomo).
|
||
|
||
## Fichiers utiles
|
||
|
||
- `apps/web/index.html`, `apps/web/src/infra/analytics.ts`
|
||
EOF
|
||
create_if_absent "Play Store — déclaration Data safety" "$TMP/play-data-safety.md"
|
||
|
||
cat >"$TMP/play-signing.md" <<'EOF'
|
||
## À faire
|
||
|
||
- **Keystore** upload / **Play App Signing**.
|
||
- Pipeline **AAB** (`bundleRelease`) — aujourd’hui `.github/workflows/mobile-release.yml` ne fait qu’un placeholder après `mobile:sync`.
|
||
|
||
## Critères
|
||
|
||
- Documenter release locale (Android Studio) ou CI avec secrets (`KEYSTORE_*`, etc.).
|
||
EOF
|
||
create_if_absent "Android — signature release + CI (remplacer placeholder mobile-release)" "$TMP/play-signing.md"
|
||
|
||
# --- Optionnel (regroupement plan §4) ---
|
||
cat >"$TMP/optional-infra.md" <<'EOF'
|
||
## Périmètre (optionnel / dette)
|
||
|
||
- **i18n** : formulations `ben-to.fr` vs `book.ben-to.fr` dans `packages/shared/i18n/src/dictionary.ts` (depuis la migration vers le domaine apex, l’app n’est plus servie sur `app.ben-to.fr`).
|
||
- **CORS** : pertinent seulement si un jour le catalogue ou des assets sont chargés en runtime depuis un autre domaine (hors périmètre actuel : tout est embarqué au build).
|
||
- **Redirects** : migration utilisateurs `ben-to.fr` → `book.ben-to.fr` (SEO, signets).
|
||
- **Matomo** : si activation du tracker complet → bandeau cookies + mise à jour privacy.
|
||
|
||
Découper en sous-tickets si besoin.
|
||
EOF
|
||
create_if_absent "Tech — i18n domaines, CORS bentext runtime, redirects book, Matomo/cookies" "$TMP/optional-infra.md"
|
||
|
||
echo "Terminé."
|