Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
c3357de203 | |||
df9bc0d971 | |||
2e61d7bc21 | |||
2fd5b9933d | |||
8cbe9c7654 | |||
2cdc059810 | |||
927915093a |
@ -1,3 +1,5 @@
|
|||||||
|
## Release 0.4.0p82 du 14/03/2025-15:24
|
||||||
|
|
||||||
## Release 0.4.0p74 du 14/03/2025-15:23
|
## Release 0.4.0p74 du 14/03/2025-15:23
|
||||||
|
|
||||||
* `cf9fab5` maj src/php
|
* `cf9fab5` maj src/php
|
||||||
|
@ -19,7 +19,8 @@ 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'
|
Si \$2 n'est pas spécifié, on assume que \$1 est de la forme '.file.ext'
|
||||||
et \$2 vaudra alors 'file'
|
et \$2 vaudra alors 'file'
|
||||||
|
|
||||||
si un fichier \${2#.}.local existe, prendre ce fichier à la place comme source
|
si un fichier \${2#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
|
||||||
|
la place comme source
|
||||||
|
|
||||||
Ajouter file au tableau userfiles"
|
Ajouter file au tableau userfiles"
|
||||||
function template_copy_replace() {
|
function template_copy_replace() {
|
||||||
@ -47,7 +48,8 @@ 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'
|
Si \$2 n'est pas spécifié, on assume que \$1 est de la forme '.file.ext'
|
||||||
et \$2 vaudra alors 'file'
|
et \$2 vaudra alors 'file'
|
||||||
|
|
||||||
si un fichier \${2#.}.local existe, prendre ce fichier à la place comme source
|
si un fichier \${1#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
|
||||||
|
la place comme source
|
||||||
|
|
||||||
Ajouter file au tableau userfiles"
|
Ajouter file au tableau userfiles"
|
||||||
function template_copy_missing() {
|
function template_copy_missing() {
|
||||||
@ -205,6 +207,18 @@ function template_generate_scripts() {
|
|||||||
#etitle "sedscript" cat "$sedscript"
|
#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() {
|
function template_process_userfiles() {
|
||||||
local awkscript sedscript workfile userfile
|
local awkscript sedscript workfile userfile
|
||||||
ac_set_tmpfile awkscript
|
ac_set_tmpfile awkscript
|
||||||
@ -213,6 +227,7 @@ function template_process_userfiles() {
|
|||||||
|
|
||||||
ac_set_tmpfile workfile
|
ac_set_tmpfile workfile
|
||||||
for userfile in "${userfiles[@]}"; do
|
for userfile in "${userfiles[@]}"; do
|
||||||
|
_template_can_process "$userfile" || continue
|
||||||
if cat "$userfile" | awk -f "$awkscript" | sed -rf "$sedscript" >"$workfile"; then
|
if cat "$userfile" | awk -f "$awkscript" | sed -rf "$sedscript" >"$workfile"; then
|
||||||
if testdiff "$workfile" "$userfile"; then
|
if testdiff "$workfile" "$userfile"; then
|
||||||
# n'écrire le fichier que s'il a changé
|
# n'écrire le fichier que s'il a changé
|
||||||
|
@ -15,9 +15,9 @@ class StateException extends LogicException {
|
|||||||
return new static($prefix.$message);
|
return new static($prefix.$message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static final function unexpected_state(?string $prefix=null): self {
|
static final function unexpected_state(?string $suffix=null): self {
|
||||||
$message = "unexpected state";
|
$message = "unexpected state";
|
||||||
if ($prefix) $prefix = "$prefix: ";
|
if ($suffix) $suffix = ": $suffix";
|
||||||
return new static($prefix.$message);
|
return new static($message.$suffix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,20 +4,15 @@ namespace nulib\ref\schema;
|
|||||||
class ref_schema {
|
class ref_schema {
|
||||||
/** @var array schéma des natures de schéma */
|
/** @var array schéma des natures de schéma */
|
||||||
const NATURE_METASCHEMA = [
|
const NATURE_METASCHEMA = [
|
||||||
"nature" => ["string", null, "nature du schéma",
|
0 => ["string", null, "nature du schéma",
|
||||||
"pkey" => 0,
|
|
||||||
"allowed_values" => ["scalar", "assoc", "list"],
|
"allowed_values" => ["scalar", "assoc", "list"],
|
||||||
],
|
],
|
||||||
"title" => ["?string", null, "libellé de la valeur"],
|
"compute_func" => ["?callable", null, "fonction qui calcule les valeurs des champs computed"],
|
||||||
"required" => ["bool", false, "la valeur est-elle requise?"],
|
"validate_func" => ["?callable", null, "fonction qui vérifie la conformité de l'objet dans son ensemble"],
|
||||||
"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-schema d'un schéma de nature scalaire */
|
/** @var array meta-schéma d'une valeur */
|
||||||
const SCALAR_METASCHEMA = [
|
const VALUE_METASCHEMA = [
|
||||||
"type" => ["array", null, "types possibles de la valeur", "required" => true],
|
"type" => ["array", null, "types possibles de la valeur", "required" => true],
|
||||||
"default" => [null, null, "valeur par défaut si la valeur n'existe pas"],
|
"default" => [null, null, "valeur par défaut si la valeur n'existe pas"],
|
||||||
"title" => ["?string", null, "libellé de la valeur"],
|
"title" => ["?string", null, "libellé de la valeur"],
|
||||||
@ -38,22 +33,29 @@ class ref_schema {
|
|||||||
"name" => ["?string", null, "identifiant de la valeur"],
|
"name" => ["?string", null, "identifiant de la valeur"],
|
||||||
"pkey" => ["?pkey", null, "chemin de clé de la valeur dans un tableau associatif"],
|
"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"],
|
"header" => ["?string", null, "nom de l'en-tête s'il faut présenter cette donnée dans un tableau"],
|
||||||
"composite" => ["?bool", null, "ce champ fait-il partie d'une valeur composite?"],
|
"computed" => ["?bool", null, "ce champ est-il calculé? si oui, il n'est pas demandé en entrée ni validé"],
|
||||||
];
|
];
|
||||||
|
|
||||||
const MESSAGES = [
|
const MESSAGES = [
|
||||||
"missing" => "{key}: Vous devez spécifier cette valeur",
|
"missing" => "Vous devez spécifier cette valeur",
|
||||||
"unavailable" => "{key}: Vous devez spécifier cette valeur",
|
"unavailable" => "Vous devez spécifier cette valeur",
|
||||||
"null" => "{key}: cette valeur ne doit pas être nulle",
|
"null" => "Cette valeur ne doit pas être nulle",
|
||||||
"empty" => "{key}: cette valeur ne doit pas être vide",
|
"empty" => "Cette valeur ne doit pas être vide",
|
||||||
"invalid" => "{key}: {orig}: cette valeur est invalide",
|
"invalid" => "Cette valeur est invalide",
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var array meta-schema d'un schéma de nature associative */
|
/** @var array clés supplémentaires de schéma de la nature scalaire */
|
||||||
const ASSOC_METASCHEMA = [
|
const SCALAR_NATURE_METASCHEMA = [
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var array meta-schema d'un schéma de nature liste */
|
/** @var array clés supplémentaires de schéma de la nature associative */
|
||||||
const LIST_METASCHEMA = [
|
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 = [
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
72
runphp/build
72
runphp/build
@ -6,7 +6,7 @@ RUNPHP="$MYDIR/runphp"
|
|||||||
RUNPHP_STANDALONE=
|
RUNPHP_STANDALONE=
|
||||||
PROJDIR=; COMPOSERDIR=; COMPOSERPHAR=; VENDORDIR=; BUILDENV0=; BUILDENV=
|
PROJDIR=; COMPOSERDIR=; COMPOSERPHAR=; VENDORDIR=; BUILDENV0=; BUILDENV=
|
||||||
BUILD_IMAGES=(php-apache mariadb10); export BUILD_FLAVOUR=; DIST=; IMAGENAME=
|
BUILD_IMAGES=(php-apache mariadb10); export BUILD_FLAVOUR=; DIST=; IMAGENAME=
|
||||||
DISTFILES=()
|
DISTFILES=(); TEMPLATEFILES=(); VARFILES=()
|
||||||
source "$RUNPHP" || exit 1
|
source "$RUNPHP" || exit 1
|
||||||
source "$PROJDIR/$VENDORDIR/nulib/php/load.sh" || exit 1
|
source "$PROJDIR/$VENDORDIR/nulib/php/load.sh" || exit 1
|
||||||
require: template
|
require: template
|
||||||
@ -56,49 +56,59 @@ function dcrunning() {
|
|||||||
|
|
||||||
function build_check_env() {
|
function build_check_env() {
|
||||||
eval "$(template_locals)"
|
eval "$(template_locals)"
|
||||||
local updatedenv distfile distname
|
local updatedenv file name
|
||||||
local -a updatedfiles distfiles
|
local -a updatedfiles files
|
||||||
|
|
||||||
if template_copy_missing "$PROJDIR/$BUILDENV0"; then
|
if template_copy_missing "$PROJDIR/$BUILDENV0"; then
|
||||||
updated=1
|
updated=1
|
||||||
updatedenv=1
|
updatedenv=1
|
||||||
fi
|
fi
|
||||||
for distfile in "${DISTFILES[@]}"; do
|
for file in "${DISTFILES[@]}"; do
|
||||||
if [ -f "$PROJDIR/$distfile" ]; then
|
if [ -f "$PROJDIR/$file" ]; then
|
||||||
if template_copy_missing "$PROJDIR/$distfile"; then
|
if template_copy_missing "$PROJDIR/$file"; then
|
||||||
updated=1
|
updated=1
|
||||||
setx distname=basename -- "$distfile"
|
setx name=basename -- "$file"
|
||||||
distname="${distname#.}"; distname="${distname%.dist}"
|
name="${name#.}"; name="${name%.}"
|
||||||
setx distfile=dirname -- "$distfile"
|
setx file=dirname -- "$file"
|
||||||
distfile="$distfile/$distname"
|
file="$file/$name"
|
||||||
updatedfiles+=("$distfile")
|
updatedfiles+=("$file")
|
||||||
fi
|
fi
|
||||||
elif [ -d "$PROJDIR/$distfile" ]; then
|
elif [ -d "$PROJDIR/$file" ]; then
|
||||||
local distdir="$PROJDIR/$distfile"
|
local dir="$PROJDIR/$file"
|
||||||
setx -a distfiles=find "$distdir" -type f -name ".*.dist"
|
setx -a files=find "$dir" -type f -name ".*.dist"
|
||||||
for distfile in "${distfiles[@]}"; do
|
for file in "${files[@]}"; do
|
||||||
if template_copy_missing "$distfile"; then
|
if template_copy_missing "$file"; then
|
||||||
updated=1
|
updated=1
|
||||||
setx distname=basename -- "$distfile"
|
setx name=basename -- "$file"
|
||||||
distname="${distname#.}"; distname="${distname%.dist}"
|
name="${name#.}"; name="${name%.}"
|
||||||
# ignorer les fichiers binaires
|
setx file=dirname -- "$file"
|
||||||
#XXX remplacer par un code plus robuste, peut-être à
|
file="$file/$name"
|
||||||
# intégrer directement dans template:
|
updatedfiles+=("${file#$PROJDIR/}")
|
||||||
case "$distname" in
|
|
||||||
*.png|*.jpg) ;;
|
|
||||||
*)
|
|
||||||
setx distfile=dirname -- "$distfile"
|
|
||||||
distfile="$distfile/$distname"
|
|
||||||
updatedfiles+=("${distfile#$PROJDIR/}")
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
ewarn "$distfile: fichier introuvable"
|
ewarn "$file: fichier dist introuvable"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
template_process_userfiles
|
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[@]}"
|
||||||
|
|
||||||
if [ -n "$updated" ]; then
|
if [ -n "$updated" ]; then
|
||||||
enote "IMPORTANT: vous devez paramétrer certains fichiers avant de pouvoir construire les images"
|
enote "IMPORTANT: vous devez paramétrer certains fichiers avant de pouvoir construire les images"
|
||||||
|
@ -47,14 +47,27 @@ DIST=
|
|||||||
# Nom de base de l'image (sans le registry), e.g prefix/
|
# Nom de base de l'image (sans le registry), e.g prefix/
|
||||||
IMAGENAME=
|
IMAGENAME=
|
||||||
|
|
||||||
## Fichiers .dist
|
## Fichiers .dist et .template
|
||||||
## Lors du build, les fichiers de la forme .name.dist sont copiés vers un
|
# Lors du build, les fichiers de la forme .name.dist sont copiés vers un
|
||||||
## fichier name sauf s'il existe déjà
|
# 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
|
||||||
|
|
||||||
# Liste de fichiers (ou de répertoirs à considérer). Pour chaque répertoire, les
|
# Liste de fichiers (ou de répertoires à considérer). Pour chaque répertoire,
|
||||||
# fichiers .*.dist dans l'arborescence du répertoire sont recherchés
|
# les fichiers .*.dist dans l'arborescence du répertoire sont recherchés
|
||||||
DISTFILES=()
|
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
|
#EOF:runphp.userconf:ne pas modifier cette ligne
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user