Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
31649e5
Add standalone install.sh and sync install.ps1
crisdosaygo Dec 27, 2025
0b236f1
Sync installers and bbx scripts
crisdosaygo Dec 27, 2025
97fa050
Allow install.ps1 to bootstrap bbx.ps1
crisdosaygo Dec 27, 2025
f84e27e
ok
crisdosaygo Dec 27, 2025
19553bf
Fix installer bootstrap temp path handling
crisdosaygo Dec 27, 2025
afbc478
Require xxd for install signature handling
crisdosaygo Dec 27, 2025
c7a23af
Always enable install.sh debug logging
crisdosaygo Dec 27, 2025
5c3d740
Write install debug logs per runner/job
crisdosaygo Dec 27, 2025
af2f9cd
Stabilize installer tracing and add cho fallback
crisdosaygo Dec 27, 2025
6bc51ec
Simplify installer tracing and drop failing echo
crisdosaygo Dec 27, 2025
5fa5fca
Handle stdin install by redownloading script
crisdosaygo Dec 27, 2025
691e8a3
Use script source for root handoff
crisdosaygo Dec 27, 2025
0f8d92c
Fix stdin installer handoff permissions
crisdosaygo Dec 27, 2025
b05f2aa
Allow shared debug dir for handoff
crisdosaygo Dec 27, 2025
e8a7cc7
Allow shared OS debug dir
crisdosaygo Dec 27, 2025
8216f86
Isolate debug logs per user
crisdosaygo Dec 27, 2025
c5626f5
Pass BBX_TEST_AGREEMENT on root handoff
crisdosaygo Dec 27, 2025
5102cc5
Improve install debug log labeling
crisdosaygo Dec 27, 2025
b809eeb
Fix Windows installer bootstrap
crisdosaygo Dec 27, 2025
9acc90a
Make Windows installer self-contained
crisdosaygo Dec 27, 2025
d13f11b
Fix Windows manifest verification on PS5.1
crisdosaygo Dec 27, 2025
3c9d49c
Handle install_deps when install.ps1 runs via iex
crisdosaygo Dec 27, 2025
842ab64
Add Windows deps installer
crisdosaygo Dec 27, 2025
aecbb2a
Simplify Windows install and add PATH helper
crisdosaygo Dec 27, 2025
cb50841
ok
crisdosaygo Dec 27, 2025
276b4d7
Fix public saga + add retrigger helper
crisdosaygo Dec 29, 2025
2fda45d
CI: allow longer CF verify in containers
crisdosaygo Dec 29, 2025
a3cf8cb
Docs: public saga debugging guide
crisdosaygo Dec 29, 2025
f6c40ad
CI: don't fail CF link check in containers
crisdosaygo Dec 29, 2025
eda1816
bbx: default Cloudflare edge IPv4
crisdosaygo Dec 29, 2025
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
1,388 changes: 1,388 additions & 0 deletions .github/scripts/test-bbx.sh

Large diffs are not rendered by default.

260 changes: 174 additions & 86 deletions .github/workflows/bbx-saga.yaml

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Agent Notes (BrowserBox public repo)

## Scope

This repo (`BrowserBox/BrowserBox`) contains the public release surface: installers, workflows, and public documentation.

## CI / saga iteration

- Primary workflow: `.github/workflows/bbx-saga.yaml`
- Debugging guide: `docs/ci-saga-debugging.md`
- Trigger one matrix slice at a time: `admin-tools/retrigger-public-saga.sh`

11 changes: 11 additions & 0 deletions INDEX.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# BrowserBox Index

## Release & CI

- Release flow (private → public): `docs/release-flow.md`
- Public saga debugging loop: `docs/ci-saga-debugging.md`

## Admin tools

- Public saga retrigger helper: `admin-tools/retrigger-public-saga.sh`

4 changes: 4 additions & 0 deletions admin-tools/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Admin tools (public)

- `admin-tools/retrigger-public-saga.sh`: triggers `.github/workflows/bbx-saga.yaml` with a single OS/container slice.

133 changes: 133 additions & 0 deletions admin-tools/retrigger-public-saga.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#!/usr/bin/env bash
set -euo pipefail

usage() {
cat <<'USAGE'
Usage: admin-tools/retrigger-public-saga.sh <release_tag> [options]

Triggers the public saga workflow (`.github/workflows/bbx-saga.yaml`) in BrowserBox/BrowserBox
with a narrowed matrix (one OS, optionally one or more container images).

Options:
--repo <owner/repo> Default: BrowserBox/BrowserBox
--ref <git-ref> Default: main
--os <runner> Default: ubuntu-latest
--containers <csv> Container images csv; use "native" for no container. Default: native
--no-tmate Disable tmate debug steps
--watch Watch the run until completion (saves failed logs to /tmp)

Examples:
admin-tools/retrigger-public-saga.sh v15.10.2 --os ubuntu-latest --containers debian:latest --no-tmate --watch
admin-tools/retrigger-public-saga.sh v15.10.2 --os ubuntu-latest --containers native --no-tmate --watch
admin-tools/retrigger-public-saga.sh v15.10.2 --os macos-latest --no-tmate --watch
admin-tools/retrigger-public-saga.sh v15.10.2 --os windows-latest --no-tmate --watch
USAGE
}

if [[ $# -lt 1 ]]; then
usage
exit 2
fi

release_tag="$1"
shift

repo="BrowserBox/BrowserBox"
ref="main"
os="ubuntu-latest"
containers_csv="native"
disable_tmate="false"
watch="false"

while [[ $# -gt 0 ]]; do
case "$1" in
--repo)
repo="${2:?missing value for --repo}"
shift 2
;;
--ref)
ref="${2:?missing value for --ref}"
shift 2
;;
--os)
os="${2:?missing value for --os}"
shift 2
;;
--containers)
containers_csv="${2:?missing value for --containers}"
shift 2
;;
--no-tmate)
disable_tmate="true"
shift 1
;;
--watch)
watch="true"
shift 1
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown arg: $1" >&2
usage
exit 2
;;
esac
done

if ! command -v gh >/dev/null 2>&1; then
echo "gh CLI is required." >&2
exit 1
fi
if ! command -v jq >/dev/null 2>&1; then
echo "jq is required." >&2
exit 1
fi

readarray -t containers < <(printf '%s' "$containers_csv" | tr ',' '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | awk 'NF')
if [[ "${#containers[@]}" -eq 0 ]]; then
containers=("native")
fi

containers_json="$(printf '%s\n' "${containers[@]}" | jq -Rsc 'split("\n")[:-1] | map(if . == "native" then "" else . end)')"
matrix_json="$(jq -cn --arg os "$os" --argjson containers "$containers_json" '{os:[$os], container_image:$containers, exclude:[] }')"

prev_id="$(gh run list --repo "$repo" --workflow bbx-saga.yaml --limit 1 --json databaseId --jq '.[0].databaseId // empty' 2>/dev/null || true)"

echo "Triggering bbx-saga.yaml on ${repo}@${ref} for ${release_tag}..."
gh workflow run bbx-saga.yaml \
--repo "$repo" \
--ref "$ref" \
-f "release_tag=${release_tag}" \
-f "disable_tmate=${disable_tmate}" \
-f "matrix_json=${matrix_json}" >/dev/null

echo "Waiting for run to register..."
run_id=""
for _ in {1..60}; do
run_id="$(gh run list --repo "$repo" --workflow bbx-saga.yaml --limit 5 --json databaseId --jq '.[0].databaseId // empty' 2>/dev/null || true)"
if [[ -n "$run_id" && "$run_id" != "$prev_id" ]]; then
break
fi
sleep 2
done

if [[ -z "$run_id" || "$run_id" == "$prev_id" ]]; then
echo "Failed to detect new run id." >&2
exit 1
fi

echo "Run: https://github.com/${repo}/actions/runs/${run_id}"

if [[ "$watch" == "true" ]]; then
gh run watch "$run_id" --repo "$repo" --exit-status || {
out_dir="/tmp/bbx-public-saga/${run_id}"
mkdir -p "$out_dir"
gh run view "$run_id" --repo "$repo" --log-failed >"${out_dir}/log-failed.txt" 2>&1 || true
echo "Saved failed logs to ${out_dir}/log-failed.txt" >&2
exit 1
}
fi

Loading