first commit.
This commit is contained in:
Executable
+37
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
# Construye el instalador autocontenido `duckbrain.phar` y publica su sha256.
|
||||
# Salida en `dist/` (o $DUCKBRAIN_DIST). Uso: scripts/build-phar
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
OUT="${DUCKBRAIN_DIST:-$ROOT/dist}"
|
||||
PHAR="$OUT/duckbrain.phar"
|
||||
|
||||
mkdir -p "$OUT"
|
||||
|
||||
php -d phar.readonly=0 -r '
|
||||
$root = $argv[1];
|
||||
$pharPath = $argv[2];
|
||||
@unlink($pharPath);
|
||||
|
||||
$phar = new Phar($pharPath);
|
||||
$phar->startBuffering();
|
||||
$phar->setStub("#!/usr/bin/env php\n<?php Phar::mapPhar(\"duckbrain.phar\"); require \"phar://duckbrain.phar/bin/duckbrain\"; __HALT_COMPILER();");
|
||||
|
||||
$skip = [".git/", "dist/", "tests/", "openspec/", ".opencode/", "node_modules/"];
|
||||
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($root, FilesystemIterator::SKIP_DOTS));
|
||||
foreach ($iterator as $file) {
|
||||
if ($file->isDir()) { continue; }
|
||||
$rel = substr($file->getPathname(), strlen($root) + 1);
|
||||
foreach ($skip as $prefix) {
|
||||
if (str_starts_with($rel, $prefix)) { continue 2; }
|
||||
}
|
||||
$phar->addFile($file->getPathname(), $rel);
|
||||
}
|
||||
$phar->stopBuffering();
|
||||
echo "built {$pharPath}\n";
|
||||
' "$ROOT" "$PHAR"
|
||||
|
||||
chmod +x "$PHAR"
|
||||
sha256sum "$PHAR" | awk '{print $1}' > "$PHAR.sha256"
|
||||
echo "sha256: $(cat "$PHAR.sha256")"
|
||||
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# Escritor único de versión + tag de un paquete del toolbox.
|
||||
# Uso: scripts/release <paquete> <patch|minor|major>
|
||||
set -euo pipefail
|
||||
|
||||
if [ "$#" -lt 2 ]; then
|
||||
echo "Uso: scripts/release <paquete> <patch|minor|major>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PACKAGE="$1"
|
||||
TYPE="$2"
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
MANIFEST="$ROOT/packages/$PACKAGE/duckbrain.json"
|
||||
|
||||
if [ ! -f "$MANIFEST" ]; then
|
||||
echo "No existe el paquete '$PACKAGE' ($MANIFEST)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$TYPE" in
|
||||
patch|minor|major) ;;
|
||||
*) echo "Incremento inválido: '$TYPE' (usa patch|minor|major)" >&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
VERSION="$(php -r '$d=json_decode(file_get_contents($argv[1]),true); echo $d["version"] ?? "";' "$MANIFEST")"
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "El manifiesto no declara 'version': $MANIFEST" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
NEW_VERSION="$(php -r '
|
||||
$v = ltrim($argv[1], "vV");
|
||||
$type = $argv[2];
|
||||
$p = explode(".", preg_replace("/[-+].*/", "", $v));
|
||||
$p = array_pad($p, 3, 0);
|
||||
$p = array_map("intval", $p);
|
||||
if ($type === "major") { $p[0]++; $p[1] = 0; $p[2] = 0; }
|
||||
elseif ($type === "minor") { $p[1]++; $p[2] = 0; }
|
||||
else { $p[2]++; }
|
||||
echo implode(".", $p);
|
||||
' "$VERSION" "$TYPE")"
|
||||
|
||||
php -r '
|
||||
$file = $argv[1];
|
||||
$data = json_decode(file_get_contents($file), true);
|
||||
$data["version"] = $argv[2];
|
||||
file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n");
|
||||
' "$MANIFEST" "$NEW_VERSION"
|
||||
|
||||
TAG="$PACKAGE-v$NEW_VERSION"
|
||||
|
||||
git -C "$ROOT" add -- "$MANIFEST"
|
||||
git -C "$ROOT" commit -q -m "release($PACKAGE): v$NEW_VERSION"
|
||||
git -C "$ROOT" tag -a "$TAG" -m "release($PACKAGE): v$NEW_VERSION"
|
||||
|
||||
if git -C "$ROOT" remote get-url origin >/dev/null 2>&1; then
|
||||
git -C "$ROOT" push -q origin HEAD --follow-tags
|
||||
fi
|
||||
|
||||
echo "release $PACKAGE v$NEW_VERSION ($TAG)"
|
||||
Reference in New Issue
Block a user