Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
559feda663 | |||
d4d51ffcea | |||
27567166aa | |||
2dab39a35c | |||
a1238f044a |
@ -1,5 +1,3 @@
|
||||
## Release 0.4.0p82 du 14/03/2025-15:24
|
||||
|
||||
## Release 0.4.0p74 du 14/03/2025-15:23
|
||||
|
||||
* `cf9fab5` maj src/php
|
||||
|
@ -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é
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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 = [
|
||||
];
|
||||
}
|
||||
|
72
runphp/build
72
runphp/build
@ -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"
|
||||
|
@ -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
|
||||
################################################################################
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user