mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-11-14 02:50:51 +08:00
Repos need not carry a `xyz.radicle.project` payload; the default branch can come from `xyz.radicle.crefs` alone. Such repos got no counts and no default branch, and failed schema validation in explorer, which broke the parse of a whole listing. httpd: - Add top-level `cobs` with issue, patch and bucketed release counts - Add top-level `defaultBranch`, qualified like the crefs payload - Omit a count the node cannot determine instead of reporting zero - Drop `head`: the tip is `refs[defaultBranch]` - Keep counts in the project payload for older clients until a major release - Keep the project payload when a COB read fails - Keep `meta.releases` a single count: delegate + other - Log and skip canonical ref rules and refs that fail to read, so one bad ref doesn't drop the default branch tip explorer: - Model `cobs` and `defaultBranch`, adapting older nodes to one shape - Resolve the default branch from the crefs HEAD on older nodes - Collect the shims for older httpd in http-client/lib/compat.ts, each naming the httpd release that the client can drop it with - Add `defaultBranchTip`, replacing `head`, with a fallback to the legacy `meta.head` - Make the project payload and its legacy meta optional - Fall back to the RID for the repo name, and show a placeholder for a missing name in repo cards and the header - Hide a counter instead of reading a missing count as zero - Fall back to a full-page check for "More" without counts - Add a `repo.sourceUnavailable` route for repos without a default branch or tip - Browse explicit revisions and offer the branch selector without a default branch - List these repos in repo grids and on the landing page - Say the node is older or built without releases - Scope release pages in the client, so views never call the shims - Read OG worker repos through the same compat shims - Share the repo name and default branch helpers with the OG worker CI: - Add check:open-graph, a wrangler deploy dry run - Run it in GitHub CI, Buildkite and check:ci - Install explorer's dependencies first: the worker resolves compat.ts imports, such as zod, from there Tests: - Test that a build without releases omits the count - Test that one failing rule keeps the others - Test the repo shape across httpd versions and the release shims - Test `hasMorePages` and `repoName` - Test repos without a project payload end to end
96 lines
3.4 KiB
Bash
Executable File
96 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Runs the same checks as the explorer's GitHub workflows (.github/workflows/
|
|
# explorer-*.yml) and keeps the full output with per-step timings in
|
|
# tests/tmp/check-ci.log. That log lives outside tests/artifacts, which
|
|
# Playwright clears when the e2e run starts.
|
|
#
|
|
# Leaves out explorer-visual.yml: its baselines exist only as CI artifacts. The
|
|
# desktop app in desktop/ has its own desktop/scripts/check-ci.
|
|
set -uo pipefail
|
|
|
|
cd "$(dirname "$0")/.." || exit
|
|
|
|
log=tests/tmp/check-ci.log
|
|
mkdir -p "$(dirname "$log")"
|
|
echo "check-ci started $(date -u +%Y-%m-%dT%H:%M:%SZ) at $(git rev-parse --short HEAD)" >"$log"
|
|
|
|
if [ -t 1 ]; then
|
|
bold=$'\e[1m' dim=$'\e[2m' green=$'\e[32m' red=$'\e[31m' reset=$'\e[0m'
|
|
else
|
|
bold="" dim="" green="" red="" reset=""
|
|
fi
|
|
|
|
# Prints to the terminal with styling and to the log without.
|
|
say() {
|
|
printf '%s\n' "$1"
|
|
printf '%s\n' "$2" >>"$log"
|
|
}
|
|
|
|
width=$(tput cols 2>/dev/null || echo 80)
|
|
[ "$width" -gt 100 ] && width=100
|
|
|
|
# A full-width rule with a title, like "━━ check-js ━━━━━━".
|
|
rule() {
|
|
local text="━━ $1 "
|
|
local fill=$((width - ${#text}))
|
|
[ "$fill" -lt 3 ] && fill=3
|
|
printf '%s%s' "$text" "$(printf '━%.0s' $(seq 1 "$fill"))"
|
|
}
|
|
|
|
steps=(
|
|
"check|npm run check"
|
|
"unit-test|npm run test:unit"
|
|
"install-binaries|mkdir -p tests/artifacts && scripts/install-binaries"
|
|
"http-client-unit-test|npm run test:http-client:unit"
|
|
"rust build|RUSTFLAGS='-D warnings' cargo build --workspace --all-features"
|
|
"rust test|cargo test --workspace --all-features && cargo test -p radicle-httpd"
|
|
"rust lint|RUSTFLAGS='-D warnings' cargo clippy --workspace --all-features --tests && RUSTFLAGS='-D warnings' cargo clippy -p radicle-httpd --no-default-features --tests && cargo fmt --all -- --check"
|
|
"playwright install|npx playwright install chromium"
|
|
"build|npm run build && npm run test:e2e -- --project chromium --config playwright.buildSmoke.config.ts"
|
|
"open-graph|npm ci --prefix workers/open-graph && npm run check:open-graph"
|
|
"e2e|npm run test:e2e -- --project chromium"
|
|
)
|
|
summary=()
|
|
status=0
|
|
total_start=$SECONDS
|
|
|
|
for step in "${steps[@]}"; do
|
|
name=${step%%|*}
|
|
command=${step#*|}
|
|
if [ "$status" -ne 0 ]; then
|
|
summary+=("$(printf '%s- %-18s skipped%s' "$dim" "$name" "$reset")|$(printf -- '- %-18s skipped' "$name")")
|
|
continue
|
|
fi
|
|
|
|
say "" ""
|
|
say "${bold}$(rule "$name")${reset}" "$(rule "$name")"
|
|
say "${dim} \$ $command${reset}" " \$ $command"
|
|
say "" ""
|
|
start=$SECONDS
|
|
bash -c "$command" 2>&1 | awk '{ print " " $0; fflush() }' | tee -a "$log"
|
|
status=${PIPESTATUS[0]}
|
|
took=$((SECONDS - start))
|
|
|
|
if [ "$status" -eq 0 ]; then
|
|
summary+=("$(printf '%s✓%s %-18s %4ss' "$green" "$reset" "$name" "$took")|$(printf '✓ %-18s %4ss' "$name" "$took")")
|
|
else
|
|
summary+=("$(printf '%s✗ %-18s %4ss exit %s%s' "$red" "$name" "$took" "$status" "$reset")|$(printf '✗ %-18s %4ss exit %s' "$name" "$took" "$status")")
|
|
fi
|
|
done
|
|
|
|
say "" ""
|
|
say "${bold}$(rule summary)${reset}" "$(rule summary)"
|
|
say "" ""
|
|
for line in "${summary[@]}"; do
|
|
say " ${line%%|*}" " ${line#*|}"
|
|
done
|
|
say "" ""
|
|
|
|
took=$((SECONDS - total_start))
|
|
if [ "$status" -eq 0 ]; then
|
|
say " ${bold}${green}All checks passed in ${took}s${reset} ${dim}· log: $log${reset}" " All checks passed in ${took}s"
|
|
else
|
|
say " ${bold}${red}Checks failed after ${took}s${reset} ${dim}· log: $log${reset}" " Checks failed after ${took}s"
|
|
fi
|
|
exit "$status"
|