From a217565d716afb3d7ca895c7af99a17b0005a1a9 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Mon, 27 Apr 2026 23:59:30 +0300 Subject: [PATCH] all: more test fixes --- .github/workflows/bootstrapping_ci.yml | 32 +++++++++++++++++++++----- cmd/tools/vdownload.v | 8 +++++++ vlib/v/gen/c/cgen.v | 4 ++++ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/.github/workflows/bootstrapping_ci.yml b/.github/workflows/bootstrapping_ci.yml index f76cc97f2..701f7ec94 100644 --- a/.github/workflows/bootstrapping_ci.yml +++ b/.github/workflows/bootstrapping_ci.yml @@ -80,18 +80,34 @@ jobs: # The workflow used below is `Path Testing CI` (18477644). # Fetch several successful runs and pick the first commit that is actually reachable on master. # Some runs may reference commits from force-pushed branches that are no longer on master. + fetch_page() { + local page="$1" + local body="" + for attempt in 1 2 3; do + body=$(curl -sL --max-time 30 \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "https://api.github.com/repos/vlang/v/actions/workflows/18477644/runs?branch=master&status=success&event=push&per_page=10&page=$page") + if [ -n "$body" ] && echo "$body" | jq -e '.workflow_runs' >/dev/null 2>&1; then + echo "$body" | jq -r '.workflow_runs[].head_sha' + return 0 + fi + echo "::warning::page $page attempt $attempt failed, retrying..." >&2 + sleep 5 + done + return 1 + } recent_good_commit="" valid_count=0 for page in 1 2 3; do - commits=$(curl -sL \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - "https://api.github.com/repos/vlang/v/actions/workflows/18477644/runs?branch=master&status=success&event=push&per_page=10&page=$page" \ - | jq -r '.workflow_runs[].head_sha') + commits=$(fetch_page "$page" || true) + commit_count=$(printf '%s\n' "$commits" | grep -c . || true) + echo "page $page: fetched $commit_count commits" for sha in $commits; do if git merge-base --is-ancestor "$sha" master 2>/dev/null; then valid_count=$((valid_count + 1)) + echo " valid #$valid_count: $sha" # Skip the first few valid commits to get an older one for testing upgrades. if [ "$valid_count" -ge 5 ]; then recent_good_commit="$sha" @@ -100,6 +116,10 @@ jobs: fi done done + if [ -z "$recent_good_commit" ]; then + echo "Path Testing CI lookup yielded only $valid_count valid commits; falling back to git log." + recent_good_commit=$(git log master --first-parent --format=%H --before='14 days ago' -n 1) + fi if [ -z "$recent_good_commit" ]; then echo "Could not find a valid recent good commit on master" exit 1 diff --git a/cmd/tools/vdownload.v b/cmd/tools/vdownload.v index ab063eed6..d6d5e8fe6 100644 --- a/cmd/tools/vdownload.v +++ b/cmd/tools/vdownload.v @@ -94,6 +94,14 @@ fn main() { time.sleep(ctx.delay) continue } + if fs := os.stat(fname) { + if fs.size == 0 { + log.error(' retry ${retry + 1}/${ctx.retries}, got an empty (0 byte) file from url: ${url}.') + file_errors++ + time.sleep(ctx.delay) + continue + } + } downloaded++ break } diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 31f50c425..6bfe27255 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -11905,6 +11905,10 @@ fn (mut g Gen) type_default_impl(typ_ ast.Type, decode_sumtype bool) string { // Imported C aggregate types can be opaque in V, but still need a valid C zero initializer. return '{0}' } + if info.is_union { + // C unions can only have one initialized member; zero-init covers all of them. + return '{0}' + } mut has_none_zero := info.fields.len == 0 mut init_str := if info.is_anon && !g.inside_global_decl { -- 2.39.5