Release de plugin

Feuille emblématique de Dotclear, oct. 2022
Feuille emblématique de Dotclear

À l’image de ce que j’avais pondu pour les modèles de plugin l’autre jour, je me suis fait un petit script pour automatiser ce que je pouvais de la génération de release sur Github, et ouais :-)

Ça s’exécute depuis le même endroit que le do_src.sh de l’autre fois et je l’ai appelé do_release.sh, tavu ? C’est original comme nom ;-)

Son code :

#!/bin/bash

# Check 1st parameter (module name = directory)
if [ -z "$1" ]; then
  echo "You must give the module name = module directory"
  exit 1
fi

# Check module existance
if [ ! -d "$1" ]; then
  echo "The module $1 does not exists"
  exit 1
fi
MODULE="$1"

# Check 2nd parameter (tag = version)

if [ -z "$2" ]; then
  # Try to find last version from _define.php
  FILE="$MODULE/_define.php"

  # Check _define.php
  if [ ! -f "$FILE" ]; then
    echo "No _define.php in module $MODULE"
    exit 1
  fi

  # Extract version
  REGEX="registerModule\([[:space:]]*'([^']*)',[[:space:]]*'([^']*)',[[:space:]]*'([^']*)',[[:space:]]*'([^']*)',"
  DEFINE=$(<"$FILE")
  if [[ $DEFINE =~ $REGEX ]]; then
    MATCH="${BASH_REMATCH[4]}"
    TAG="$(echo "$MATCH" | tr -d \'\" | tr -d '\n\t\r ')"
  else
    echo "You must give the tag name = version"
    exit 1
  fi
else
  TAG="$2"
fi

# Check if asset exists
ASSET=~/Documents/EGO/Geekeries/Projets/Dotclear-2/soumissions/plugin-$MODULE-$TAG.zip
if [ ! -f "$ASSET" ]; then
  echo "The zip package of $MODULE $TAG is not created"
  exit 1
fi

# Process release

# Run next commands inside plugin folder
cd "$MODULE" || exit

# Check if release already exist
TAGVIEW="$(gh release view "$TAG" 2>&1 1>/dev/null)"
if [ ! "$TAGVIEW" = "release not found" ]; then
  echo "The release $TAG of $MODULE plugin has already been created!"
  echo "---"
  TAGLIST="$(gh release list)"
  echo "$TAGLIST"
  exit 1
fi

echo "Creating relase $TAG for $MODULE"

# Create local tag if necessary
if [ ! "$(git tag -l "$TAG")" ]; then
  git tag "$TAG"
fi

git push origin
git push origin "$TAG"
gh release create "$TAG" "$ASSET" --generate-notes --latest

echo "Release $TAG of $MODULE has been created"
echo "---"
TAGLIST="$(gh release list)"
echo "$TAGLIST"

À lancer depuis le répertoire qui contient tous les plugins et il faut fournir deux infos :

  1. Le nom du dossier qui contient le plugin, qui est aussi le nom du plugin
  2. La version

Ce qu’il fait :

  1. Il vérifie que le nom du plugin est fourni et que le dossier existe.
  2. Si le 2e paramètre (numéro de version) n’est pas fourni il va essayer d’extraire celle-ci du fichier _define.php du plugin.
  3. Il vérifie que le fichier plugin-<nom>-<version>.zip existe ; comme j’utilise pacKman j’ai indiqué le dossier idoine dans le script, il faudra probablement que vous l’adaptiez.
  4. Il vérifie sur Github que la release de cette version n’a pas déjà été créée, sinon il affichera la liste de celles existantes.
  5. Si le tag n’existe pas il le crée dans le dépôt local (tag = version).
  6. Il pousse la branche courante (a priori ça devrait être main) et le tag sur le dépôt Github.
  7. Il crée la release sur Github en mettant le fichier zip en annexe de celle-ci et affiche la liste des releases existantes.

Exemple :

./do_release.sh legacyMarkdown 4.5

À noter :

PS : Je mets le script en pièce jointe si vous voulez l’adapter et l’utiliser chez vous.

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15714

Haut de page