Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
fb5079b
y-cluster-provision-k3d: wait for API server before image loading
solsson Mar 14, 2026
a907522
y-cluster-provision: add --skip-image-load flag to all provision scripts
solsson Mar 14, 2026
d7da007
Add backend-neutral API services and standardize namespace management
solsson Mar 15, 2026
0410e93
WIP: y-kustomize in-cluster server for kustomize bases
solsson Mar 15, 2026
3c4e74f
WIP: builds-registry uses y-kustomize HTTP base for bucket setup
solsson Mar 15, 2026
592bef4
Rename served YAML to base-for-annotations.yaml, add OpenAPI spec
solsson Mar 15, 2026
40b6418
converge: add host-side readiness checks for y-kustomize
solsson Mar 15, 2026
05c5063
Two-pass converge: apply gateway resources before ingress hosts
solsson Mar 15, 2026
85bfc8c
ingress-hosts: add --ensure flag and gateway annotation for override-ip
solsson Mar 15, 2026
4ea1c4a
Fix converge for multipass and harden ingress-hosts check
solsson Mar 15, 2026
d078554
Add kafka/setup-topic-job y-kustomize base
solsson Mar 15, 2026
53edc4c
Drop --server-side from provision converge calls
solsson Mar 15, 2026
01f052b
Tries to sort out the different cases for y-cluster-sudoers
solsson Mar 16, 2026
19977cb
Add redpanda to converge and upgrade to v24.2.14
solsson Mar 16, 2026
62e1d38
consistent naming
solsson Mar 16, 2026
bcc0aa0
Move blobs implementations to blobs namespace
solsson Mar 16, 2026
41c640d
Remove CPU limits from all ystack-owned resources
solsson Mar 16, 2026
fc0425c
wip y-cluster-converge-ystac spec
solsson Mar 16, 2026
7b03463
Implement convention-driven converge from k3s/README.md spec
solsson Mar 16, 2026
c40ffb9
Name cross-namespace bases by target: 30-blobs-ystack, 40-kafka-ystack
solsson Mar 16, 2026
c80633e
Move namespace from k3s/ to feature bases, standardize kustomization …
solsson Mar 16, 2026
d390587
Restore individual namespace bases, fix Component schema directive
solsson Mar 16, 2026
3abd5a4
Drop prerender and deferred rendering from converge
solsson Mar 16, 2026
04468d3
amd64 emulation test fails on lima 2 on M1
solsson Mar 16, 2026
d6957fd
Remove y-kustomize restart from converge, simplify curl retries
solsson Mar 16, 2026
90326d8
Use [script-name] prefix for section echos in y-cluster scripts
solsson Mar 16, 2026
a932898
Replace skaffold example with lightweight y-build test in validate
solsson Mar 16, 2026
0d3c495
Remove buildkitd gateway-proxy, Traefik handles GRPCRoute natively
solsson Mar 16, 2026
43f166e
Use y-kustomize bases for builds-registry bucket and topic setup
solsson Mar 16, 2026
d8607d5
Use kubectl apply -k, make render failures fatal
solsson Mar 16, 2026
cd786f3
Single-pass converge with digit-group waits and path renames
solsson Mar 16, 2026
6a48525
Make curl retries more responsive and fix validate registry check
solsson Mar 16, 2026
7e93802
Fix validate registry checks failing under set -e
solsson Mar 16, 2026
8e89120
Add --domain=<context> to kubefwd for non-local contexts
solsson Mar 17, 2026
a1f21cb
extracts registry image tag to component
Mar 17, 2026
331773b
y-k8s-ingress-hosts, y-localhost: drop sudo -E flag
Mar 17, 2026
1ac8c46
Add --exclude and --override-ip flags to converge and provision scripts
Mar 18, 2026
cf045f7
Make converge waits generic, bump k3d default memory to 8G
Mar 18, 2026
449f4fa
adds helper to select provisioner suitable for the current machine
Mar 18, 2026
6b39ae0
Restart y-kustomize after kafka secrets update to avoid kubelet sync …
Mar 18, 2026
4378dc2
y-cluster-provision-qemu: QEMU/KVM provisioner for exportable VMs
Mar 18, 2026
af0e60d
y-cluster-provision: prefer qemu when dependencies are available
Mar 18, 2026
cd80347
fixes y-chrome-devtools-mcp for new versions of the lib
solsson Mar 19, 2026
6811f27
y-cluster-validate-ystack: skip prometheus checks when monitoring not…
Mar 19, 2026
dcbf6b3
y-cluster-validate-ystack: validate y-kustomize bases are online
Mar 19, 2026
f176370
y-cluster-blobs: replace y-cluster-blobs-ls with subcommand interface
Mar 19, 2026
2d59dec
Registry S3 persistence, QEMU port forwarding, validate restart cycle
Mar 19, 2026
0e7acf9
y-cluster-blobs: read VersityGW filesystem directly instead of mc pod
Mar 19, 2026
59f9f2e
Redpanda v25.3.10 with developer_mode, y-cluster-kafka, kafka validation
Mar 20, 2026
2b094dd
Use /bin/sh instead of /bin/bash in redpanda templates
Mar 24, 2026
4229469
reverts redpanda 25.3.10->24.2.14 after local validation
solsson Mar 25, 2026
7a335e2
Add experimental task runner to replace yarn@1-on-nodejs
Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
id: imageRegistryTag
uses: mikefarah/yq@v4.44.1
with:
cmd: yq '.images[0].newTag | sub("(.*)@.*", "${1}")' registry/generic/kustomization.yaml
cmd: yq '.images[0].newTag | sub("(.*)@.*", "${1}")' registry/images/kustomization.yaml
-
name: Mirror registry image from hub
run: |
Expand Down
1 change: 1 addition & 0 deletions bin/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,4 @@ parquet-tools
osv-scanner
chrome-devtools-mcp
static-web-server
yarn
10 changes: 10 additions & 0 deletions bin/y-bin.runner.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,13 @@ turbo:
archive:
tool: tar
path: turbo-${os}-${xarm}64/bin/turbo

yarn:
version: 0.1.0
templates:
download: https://github.com/Yolean/y1/releases/download/v${version}/y1-${os}-${arch}
sha256:
darwin_amd64: bd0310a0578a53d8639b1f480dc6258920a2b063f9270943ffb9eb3d2fa97416
darwin_arm64: 8cb3f050fe85b4bc70a3ed88329ae203b6156ff420dc2e53638c50f6e22143cf
linux_amd64: 6cfe37280da7def39e661a2e48a708007b2ae1b2db206e287a808e38a0b4d2db
linux_arm64: 02a7071e09096992f8bb67b49b16bff43fbfde7af0bdee90a90d54a540d089ae
2 changes: 1 addition & 1 deletion bin/y-build
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ DEFAULT_REGISTRY=builds-registry.ystack.svc.cluster.local
[ -z "$PUSH_REGISTRY" ] && PUSH_REGISTRY=$DEFAULT_REGISTRY
if [ -z "$BUILDKIT_HOST" ]; then
BUILDKIT_HOSTNAME=buildkitd.ystack.svc.cluster.local
# Prefer port 80 (Gateway API) for local clusters, fall back to 8547 (direct service)
# Prefer port 80 (Gateway API) for local clusters, fall back to 8547 (y-kubefwd for remote clusters)
if BUILDKIT_HOST=tcp://$BUILDKIT_HOSTNAME:80 y-buildctl --timeout 2 debug workers >/dev/null 2>&1; then
BUILDKIT_HOST=tcp://$BUILDKIT_HOSTNAME:80
else
Expand Down
3 changes: 2 additions & 1 deletion bin/y-chrome-devtools-mcp
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,5 @@ elif ! echo "$@" | grep -q "\-\-isolated"; then
[ "DEVTOOLS_MCP_ALLOW_NON_ISOLATED" = "1" ] && echo "Overriding due to DEVTOOLS_MCP_ALLOW_NON_ISOLATED=$DEVTOOLS_MCP_ALLOW_NON_ISOLATED" 1>&2 || exit 1
fi

/usr/bin/env node $BIN_DIR/build/src/index.js "$@"
BIN_ENTRY=$(jq -r '.bin["chrome-devtools-mcp"]' "$BIN_DIR/package.json")
/usr/bin/env node "$BIN_DIR/$BIN_ENTRY" "$@"
162 changes: 162 additions & 0 deletions bin/y-cluster-blobs
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
#!/usr/bin/env bash
[ -z "$DEBUG" ] || set -x
set -eo pipefail

YHELP='y-cluster-blobs - List and read objects in cluster blob storage

Usage: y-cluster-blobs SUBCOMMAND [options] [CONTEXT://BUCKET/PATH]

Subcommands:
ls [CONTEXT://BUCKET[/PREFIX]] List buckets or objects
cat CONTEXT://BUCKET/OBJECT Print object contents to stdout
help Show this help

Options:
-l Long listing with size and timestamp (ls only)
-r Recursive listing (ls only)

URL format:
local:// List all buckets
local://BUCKET List objects in bucket
local://BUCKET/PREFIX List objects matching prefix
local://BUCKET/KEY Read object (cat)

The CONTEXT part maps to --context for kubectl (currently only local).
Modeled after gcloud storage ls / gcloud storage cat.
Reads VersityGW filesystem directly via kubectl exec for speed.

Environment:
NAMESPACE Override blob store namespace (default: blobs)

Exit codes:
0 Success
1 Usage error
2 Bucket not found
'

case "${1:-}" in
help|--help) echo "$YHELP"; exit 0 ;;
esac

SUBCMD="${1:-}"
shift || true

case "$SUBCMD" in
ls|cat) ;;
"") echo "ERROR: subcommand required (ls, cat, help)" >&2; exit 1 ;;
*) echo "ERROR: unknown subcommand '$SUBCMD'" >&2; exit 1 ;;
esac

# Parse flags
LONG=false
RECURSIVE=false
while [ $# -gt 0 ]; do
case "$1" in
-l) LONG=true; shift ;;
-r) RECURSIVE=true; shift ;;
-lr|-rl) LONG=true; RECURSIVE=true; shift ;;
-*) echo "ERROR: unknown flag '$1'" >&2; exit 1 ;;
*) break ;;
esac
done

URL="${1:-}"
[ -z "$NAMESPACE" ] && NAMESPACE=blobs

# Parse URL: context://bucket/path
CTX=""
BUCKET=""
OBJPATH=""

if [ -n "$URL" ]; then
case "$URL" in
*://*)
CTX_NAME="${URL%%://*}"
CTX="--context=$CTX_NAME"
rest="${URL#*://}"
BUCKET="${rest%%/*}"
if [ "$rest" = "$BUCKET" ]; then
OBJPATH=""
else
OBJPATH="${rest#*/}"
fi
;;
*)
echo "ERROR: URL must use context:// format, got '$URL'" >&2
exit 1
;;
esac
fi

if [ -z "$CTX" ]; then
echo "ERROR: URL required, e.g. local://" >&2
exit 1
fi

vgw() {
kubectl $CTX -n "$NAMESPACE" exec deploy/versitygw -- "$@"
}

DATA_ROOT="/data"

case "$SUBCMD" in
ls)
PREFIX="$CTX_NAME://"
if [ -z "$BUCKET" ]; then
# List buckets
if [ "$LONG" = "true" ]; then
vgw find "$DATA_ROOT" -mindepth 1 -maxdepth 1 -type d -exec stat -c '%Y %n' {} \; 2>/dev/null \
| while read -r epoch name; do
ts=$(date -d "@$epoch" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "$epoch")
echo "[$ts] 0B ${PREFIX}$(basename "$name")/"
done
else
vgw ls "$DATA_ROOT" 2>/dev/null | while read -r name; do
echo "${PREFIX}$name/"
done
fi
else
PREFIX="$CTX_NAME://$BUCKET/"
BUCKET_PATH="$DATA_ROOT/$BUCKET"
if ! vgw test -d "$BUCKET_PATH" 2>/dev/null; then
echo "ERROR: bucket '$BUCKET' not found" >&2
exit 2
fi
TARGET="$BUCKET_PATH${OBJPATH:+/$OBJPATH}"
DEPTH_ARGS=""
if [ "$RECURSIVE" = "false" ]; then
DEPTH_ARGS="-mindepth 1 -maxdepth 1"
fi
if [ "$LONG" = "true" ]; then
vgw sh -c "find '$TARGET' $DEPTH_ARGS -type d ! -path '$TARGET' -exec stat -c 'd %s %Y %n' {} \\; -o -type f -exec stat -c 'f %s %Y %n' {} \\;" 2>/dev/null \
| while read -r type size epoch name; do
ts=$(date -d "@$epoch" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "$epoch")
rel="${name#$BUCKET_PATH/}"
if [ "$type" = "d" ]; then
echo "[$ts] 0B ${PREFIX}$rel/"
else
echo "[$ts] ${size}B ${PREFIX}$rel"
fi
done
else
vgw sh -c "find '$TARGET' $DEPTH_ARGS -type d ! -path '$TARGET' -exec echo d {} \\; -o -type f -exec echo f {} \\;" 2>/dev/null \
| while read -r type name; do
rel="${name#$BUCKET_PATH/}"
if [ "$type" = "d" ]; then
echo "${PREFIX}$rel/"
else
echo "${PREFIX}$rel"
fi
done
fi
fi
;;
cat)
if [ -z "$BUCKET" ] || [ -z "$OBJPATH" ]; then
echo "ERROR: cat requires a full object path, e.g. local://bucket/key" >&2
exit 1
fi
OBJ_FILE="$DATA_ROOT/$BUCKET/$OBJPATH"
vgw cat "$OBJ_FILE"
;;
esac
28 changes: 0 additions & 28 deletions bin/y-cluster-blobs-ls

This file was deleted.

Loading
Loading