Compare commits

..

13 Commits
dev74 ... dev82

8 changed files with 72 additions and 112 deletions

View File

@ -1,11 +1,11 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
UPSTREAM=
DEVELOP=dev74
FEATURE=wip74/
RELEASE=rel74-
MAIN=dist74
TAG_SUFFIX=p74
HOTFIX=hotf74-
UPSTREAM=dev74
DEVELOP=dev82
FEATURE=wip82/
RELEASE=rel82-
MAIN=dist82
TAG_SUFFIX=p82
HOTFIX=hotf82-
DIST=
NOAUTO=

View File

@ -4,5 +4,5 @@
RUNPHP=
# Si RUNPHP n'est pas défini, les variables suivantes peuvent être définies
DIST=d11
DIST=d12
#REGISTRY=pubdocker.univ-reunion.fr/dist

View File

@ -19,8 +19,7 @@ Copier \$1 vers \$2 de façon inconditionnelle
Si \$2 n'est pas spécifié, on assume que \$1 est de la forme '.file.ext'
et \$2 vaudra alors 'file'
si un fichier \${2#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
la place comme source
si un fichier \${2#.}.local existe, prendre ce fichier à la place comme source
Ajouter file au tableau userfiles"
function template_copy_replace() {
@ -48,8 +47,7 @@ Copier \$1 vers \$2 si ce fichier n'existe pas déjà
Si \$2 n'est pas spécifié, on assume que \$1 est de la forme '.file.ext'
et \$2 vaudra alors 'file'
si un fichier \${1#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
la place comme source
si un fichier \${2#.}.local existe, prendre ce fichier à la place comme source
Ajouter file au tableau userfiles"
function template_copy_missing() {
@ -207,18 +205,6 @@ function template_generate_scripts() {
#etitle "sedscript" cat "$sedscript"
}
function: _template_can_process "\
Indiquer si \$1 est un fichier texte, qui peut être traité par
template_process_userfiles"
function _template_can_process() {
case "$1" in
*.png|*.jpg|*.gif|*.bmp) return 1;;
*.zip|*.jar|*.war|*.ear) return 1;;
*.tar|*.gz|*.tgz|*.bz2|*.tbz2) return 1;;
*) return 0;;
esac
}
function template_process_userfiles() {
local awkscript sedscript workfile userfile
ac_set_tmpfile awkscript
@ -227,7 +213,6 @@ function template_process_userfiles() {
ac_set_tmpfile workfile
for userfile in "${userfiles[@]}"; do
_template_can_process "$userfile" || continue
if cat "$userfile" | awk -f "$awkscript" | sed -rf "$sedscript" >"$workfile"; then
if testdiff "$workfile" "$userfile"; then
# n'écrire le fichier que s'il a changé

View File

@ -15,12 +15,12 @@
}
},
"require": {
"symfony/yaml": "^5.0",
"symfony/yaml": "^7.1",
"ext-json": "*",
"php": "^7.4"
"php": "^8.2"
},
"require-dev": {
"nulib/tests": "^7.4",
"nulib/tests": "^8.2",
"ext-posix": "*",
"ext-pcntl": "*",
"ext-curl": "*",

View File

@ -15,9 +15,9 @@ class StateException extends LogicException {
return new static($prefix.$message);
}
static final function unexpected_state(?string $suffix=null): self {
static final function unexpected_state(?string $prefix=null): self {
$message = "unexpected state";
if ($suffix) $suffix = ": $suffix";
return new static($message.$suffix);
if ($prefix) $prefix = "$prefix: ";
return new static($prefix.$message);
}
}

View File

@ -4,15 +4,20 @@ namespace nulib\ref\schema;
class ref_schema {
/** @var array schéma des natures de schéma */
const NATURE_METASCHEMA = [
0 => ["string", null, "nature du schéma",
"nature" => ["string", null, "nature du schéma",
"pkey" => 0,
"allowed_values" => ["scalar", "assoc", "list"],
],
"compute_func" => ["?callable", null, "fonction qui calcule les valeurs des champs computed"],
"validate_func" => ["?callable", null, "fonction qui vérifie la conformité de l'objet dans son ensemble"],
"title" => ["?string", null, "libellé de la valeur"],
"required" => ["bool", false, "la valeur est-elle requise?"],
"nullable" => ["?bool", null, "la valeur peut-elle être nulle?"],
"desc" => ["?content", null, "description de la valeur"],
"name" => ["?key", null, "identifiant de la valeur"],
"schema" => ["?array", null, "définition du schéma"],
];
/** @var array meta-schéma d'une valeur */
const VALUE_METASCHEMA = [
/** @var array meta-schema d'un schéma de nature scalaire */
const SCALAR_METASCHEMA = [
"type" => ["array", null, "types possibles de la valeur", "required" => true],
"default" => [null, null, "valeur par défaut si la valeur n'existe pas"],
"title" => ["?string", null, "libellé de la valeur"],
@ -33,29 +38,22 @@ class ref_schema {
"name" => ["?string", null, "identifiant de la valeur"],
"pkey" => ["?pkey", null, "chemin de clé de la valeur dans un tableau associatif"],
"header" => ["?string", null, "nom de l'en-tête s'il faut présenter cette donnée dans un tableau"],
"computed" => ["?bool", null, "ce champ est-il calculé? si oui, il n'est pas demandé en entrée ni validé"],
"composite" => ["?bool", null, "ce champ fait-il partie d'une valeur composite?"],
];
const MESSAGES = [
"missing" => "Vous devez spécifier cette valeur",
"unavailable" => "Vous devez spécifier cette valeur",
"null" => "Cette valeur ne doit pas être nulle",
"empty" => "Cette valeur ne doit pas être vide",
"invalid" => "Cette valeur est invalide",
"missing" => "{key}: Vous devez spécifier cette valeur",
"unavailable" => "{key}: Vous devez spécifier cette valeur",
"null" => "{key}: cette valeur ne doit pas être nulle",
"empty" => "{key}: cette valeur ne doit pas être vide",
"invalid" => "{key}: {orig}: cette valeur est invalide",
];
/** @var array clés supplémentaires de schéma de la nature scalaire */
const SCALAR_NATURE_METASCHEMA = [
/** @var array meta-schema d'un schéma de nature associative */
const ASSOC_METASCHEMA = [
];
/** @var array clés supplémentaires de schéma de la nature associative */
const ASSOC_NATURE_METASCHEMA = [
"ensure_array" => ["bool", false, "faut-il s'assurer que le tableau destination est non nul?"],
"ensure_keys" => ["bool", true, "faut-il s'assurer que toutes les clés existent?"],
"ensure_order" => ["bool", true, "faut-il s'assurer que les clés soient dans l'ordre?"],
];
/** @var array clés supplémentaires de schéma de la nature liste */
const LIST_NATURE_METASCHEMA = [
/** @var array meta-schema d'un schéma de nature liste */
const LIST_METASCHEMA = [
];
}

View File

@ -6,7 +6,7 @@ RUNPHP="$MYDIR/runphp"
RUNPHP_STANDALONE=
PROJDIR=; COMPOSERDIR=; COMPOSERPHAR=; VENDORDIR=; BUILDENV0=; BUILDENV=
BUILD_IMAGES=(php-apache mariadb10); export BUILD_FLAVOUR=; DIST=; IMAGENAME=
DISTFILES=(); TEMPLATEFILES=(); VARFILES=()
DISTFILES=()
source "$RUNPHP" || exit 1
source "$PROJDIR/$VENDORDIR/nulib/php/load.sh" || exit 1
require: template
@ -56,59 +56,49 @@ function dcrunning() {
function build_check_env() {
eval "$(template_locals)"
local updatedenv file name
local -a updatedfiles files
local updatedenv distfile distname
local -a updatedfiles distfiles
if template_copy_missing "$PROJDIR/$BUILDENV0"; then
updated=1
updatedenv=1
fi
for file in "${DISTFILES[@]}"; do
if [ -f "$PROJDIR/$file" ]; then
if template_copy_missing "$PROJDIR/$file"; then
for distfile in "${DISTFILES[@]}"; do
if [ -f "$PROJDIR/$distfile" ]; then
if template_copy_missing "$PROJDIR/$distfile"; then
updated=1
setx name=basename -- "$file"
name="${name#.}"; name="${name%.}"
setx file=dirname -- "$file"
file="$file/$name"
updatedfiles+=("$file")
setx distname=basename -- "$distfile"
distname="${distname#.}"; distname="${distname%.dist}"
setx distfile=dirname -- "$distfile"
distfile="$distfile/$distname"
updatedfiles+=("$distfile")
fi
elif [ -d "$PROJDIR/$file" ]; then
local dir="$PROJDIR/$file"
setx -a files=find "$dir" -type f -name ".*.dist"
for file in "${files[@]}"; do
if template_copy_missing "$file"; then
elif [ -d "$PROJDIR/$distfile" ]; then
local distdir="$PROJDIR/$distfile"
setx -a distfiles=find "$distdir" -type f -name ".*.dist"
for distfile in "${distfiles[@]}"; do
if template_copy_missing "$distfile"; then
updated=1
setx name=basename -- "$file"
name="${name#.}"; name="${name%.}"
setx file=dirname -- "$file"
file="$file/$name"
updatedfiles+=("${file#$PROJDIR/}")
setx distname=basename -- "$distfile"
distname="${distname#.}"; distname="${distname%.dist}"
# ignorer les fichiers binaires
#XXX remplacer par un code plus robuste, peut-être à
# intégrer directement dans template:
case "$distname" in
*.png|*.jpg) ;;
*)
setx distfile=dirname -- "$distfile"
distfile="$distfile/$distname"
updatedfiles+=("${distfile#$PROJDIR/}")
;;
esac
fi
done
else
ewarn "$file: fichier dist introuvable"
ewarn "$distfile: fichier introuvable"
fi
done
for file in "${TEMPLATEFILES[@]}"; do
if [ -f "$PROJDIR/$file" ]; then
template_copy_replace "$PROJDIR/$file"
elif [ -d "$PROJDIR/$file" ]; then
local dir="$PROJDIR/$file"
setx -a files=find "$dir" -type f -name ".*.template"
for file in "${files[@]}"; do
template_copy_replace "$file"
done
else
ewarn "$file: fichier template introuvable"
fi
done
local -a varfiles
for file in "${VARFILES[@]}"; do
varfiles+=("$PROJDIR/$file")
done
template_process_userfiles "${varfiles[@]}"
template_process_userfiles
if [ -n "$updated" ]; then
enote "IMPORTANT: vous devez paramétrer certains fichiers avant de pouvoir construire les images"

View File

@ -47,27 +47,14 @@ DIST=
# Nom de base de l'image (sans le registry), e.g prefix/
IMAGENAME=
## Fichiers .dist et .template
# Lors du build, les fichiers de la forme .name.dist sont copiés vers un
# fichier name sauf s'il existe déjà. Si un fichier name.dist.local existe, il
# est utilisé à la place de .name.dist
# Les fichiers de la forme .name.template sont copiés *systématiquement* vers
# le fichier name. Si un fichier name.template.local existe, il est utilisé à
# la place de .name.template
## Fichiers .dist
## Lors du build, les fichiers de la forme .name.dist sont copiés vers un
## fichier name sauf s'il existe déjà
# Liste de fichiers (ou de répertoires à considérer). Pour chaque répertoire,
# les fichiers .*.dist dans l'arborescence du répertoire sont recherchés
# Liste de fichiers (ou de répertoirs à considérer). Pour chaque répertoire, les
# fichiers .*.dist dans l'arborescence du répertoire sont recherchés
DISTFILES=()
# Liste de fichiers (ou de répertoires à considérer). Pour chaque répertoire,
# les fichiers .*.template dans l'arborescence du répertoire sont recherchés
TEMPLATEFILES=()
# Fichiers contenant les valeurs des variables utilisées pour l'interpolation
# des fichiers dist et template. Seules les variables définies dans ces fichiers
# sont interpolées.
VARFILES=()
#EOF:runphp.userconf:ne pas modifier cette ligne
################################################################################