ci: add Linux binary release for loong64, ppc64le, and riscv64 by MingcongBai · Pull Request #14044 · cli/cli · GitHub
Skip to content

ci: add Linux binary release for loong64, ppc64le, and riscv64 - #14044

Draft
MingcongBai wants to merge 1 commit into
cli:trunkfrom
MingcongBai:upstream/new-linux-bin-arch
Draft

MingcongBai wants to merge 1 commit into
cli:trunkfrom
MingcongBai:upstream/new-linux-bin-arch

Conversation

@MingcongBai

@MingcongBai MingcongBai commented Aug 3, 2026 •

Copy link
Copy Markdown

Add Linux binary release targets for loong64, ppc64le, and riscv64, these are architectures that are available both as desktop and server products. It is also reasonable to assume that they are used by developers as host machines, where this CLI tool would have been used.

This commit is made with the understanding that GitHub has no interest in limiting usage of hardware of architectures other than x86, x86-64, Arm32, and Arm64.

Given that GitHub CLI is largely an architecture-agnostic tool (at least with its built-in functionalities), that adding binary releases is rather trivial with GoReleaser, that Golang support is quite mature (and actively maintained) for the three architectures above, and that i386 is still a supported architecture despite host machines of strictly 32-bit x86 architecture likely being even more obscure, so add them.

Link: #14012
Link: #8611
Link: #9410
Link: #8612
Link: #3615
Link: #1724

Authorship and follow-up

Who wrote this:

  • A human wrote it.
  • An agent wrote it under close human direction.
  • An agent wrote it independently, and no human has guided the implementation beyond the initial prompt.

Who answers review comments:

  • @username will read and reply directly. Name the account.
  • An agent will draft replies and @username will read them before they are posted.
  • Nobody has explicitly committed to replying.

Add Linux binary release targets for loong64, ppc64le, and riscv64, these
are architectures that are available both as desktop and server products.
It is also reasonable to assume that they are used by developers as host
machines, where this CLI tool would have been used.

This commit is made with the understanding that GitHub has no interest in
limiting usage of hardware of architectures other than x86, x86-64, Arm32,
and Arm64.

Given that GitHub CLI is largely an architecture-agnostic tool (at least
with its built-in functionalities), that adding binary releases is rather
trivial with GoReleaser, that Golang support is quite mature (and actively
maintained) for the three architectures above, and that i386 is still a
supported architecture despite host machines of strictly 32-bit x86
architecture likely being even more obscure, so add them.

Link: cli#14012
Link: cli#8611
Link: cli#9410
Link: cli#8612
Link: cli#3615
Link: cli#1724
Signed-off-by: Mingcong Bai <jeffbai@aosc.io>
@MingcongBai
MingcongBai requested a review from a team as a code owner August 3, 2026 02:21
@MingcongBai
MingcongBai requested a review from tidy-dev August 3, 2026 02:21
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot added external pull request originating outside of the CLI core team needs-triage needs to be reviewed labels Aug 3, 2026
@williammartin

Copy link
Copy Markdown
Member

@MingcongBai historically, we closed the same PR request for ppc64le purely because we do not have the capacity to support it. We have no development or test infrastructure. All that said, I will take the discussion back to the team again about having a "barely supported" class of architectures. I do appreciate that there is still a lot of value for our users in having an officially built artifact.

@MingcongBai

Copy link
Copy Markdown
Author

@MingcongBai historically, we closed the same PR request for ppc64le purely because we do not have the capacity to support it. We have no development or test infrastructure. All that said, I will take the discussion back to the team again about having a "barely supported" class of architectures. I do appreciate that there is still a lot of value for our users in having an officially built artifact.

Thank you for this.

It is good to have a separate class of architecture based on testing/product input, as is commonly practiced amongst Linux distros. .NET, as I understand it, does the same thing (calling some as "community-supported architecture"). I honestly don't think anyone would be mad at occasional bugs or inconsistencies and, more than likely, folks using these architectures would be happy to assist in making them work.

Bottom line is - it is, as you said, clear that people are asking for it, and I think the next important step is to clarify on support tiers.

@williammartin

Copy link
Copy Markdown
Member

I honestly don't think anyone would be mad at occasional bugs or inconsistencies and, more than likely, folks using these architectures would be happy to assist in making them work.

Yeh, I understand that. We are somewhat limited in our capacity to review them in both time and infrastructure.

My bigger concerns though are around time we would have to spend on issues that we might be forced to address such as security or license compliance. In any case, I've started a discussion internally, I'd sure like to support people here if it doesn't bring too much of a maintenance burden for us.

@BagToad
BagToad marked this pull request as draft September 23, 2026 21:35
@BagToad

BagToad commented Sep 23, 2026 •

Copy link
Copy Markdown
Member

@tidy-dev
tidy-dev removed their request for review October 5, 2026 15:20
eharriett0 added a commit to eharriett0/wt that referenced this pull request Oct 9, 2026
… checks (#179) (#209)

* merge-pr: gate on the PR's checks before merging, and pin the merge to the head it read

`wt merge-pr` and its `--dry-run` said verdict=ok while the PR's checks were
still queued, and when most of its workflows never started. `--admin`, which a
required-review branch needs, bypasses GitHub's required checks too, so
nothing between wt and the merge looked at CI.

A checks gate now runs right after the PR-state precheck, before the deploy
confirm. It reads the head commit's statusCheckRollup in one paged GraphQL
query (not `gh pr checks`: it exits 1 with a stderr sentence for "no checks",
and the raw rollup keeps every re-run, so the newest run of each check is kept
by databaseId), and the base branch's required checks from REST
branches/{base} (readable by any reader) and rules/branches/{base}.
merge.DecideChecks (pure) blocks on a pending check; a failed, errored,
cancelled, timed-out, action-required, startup-failure or stale one; a state wt
does not know; a required check with no run on the head; fewer non-skipped
checks than the new merge_min_checks / WT_MERGE_MIN_CHECKS (or a value that is
not a count); and any failed read. A PR on which no check ran, with nothing
required and no floor, merges with a visible "no check ran" note: whether a
workflow should run on a PR is in its triggers, which wt cannot evaluate, so a
required check or the floor is the deterministic "CI never started" signal.

A blocked verdict is refused non-interactively, asked at a terminal (type
"merge"), and previewed by --dry-run, which always prints the summary line
(checks=green|none|blocked|unread). --checks-ok merges anyway, loudly;
--bypass and --admin never get past it. The merge is pinned with
--match-head-commit to the commit whose checks were read, so a push after the
read fails the merge instead of shipping an unchecked head.

Fixes #179

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* merge-pr: a check that failed stays failed until a later run passes; read the PR's own repo, apps and required workflows

The adversarial review of the checks gate showed it reading a check that
FAILED on the head as passed, plus smaller gaps. Fixed:

- A failure stands until a later run of the check passes. Taking the newest
  run by databaseId let a label event's re-run that SKIPPED a job an earlier
  run FAILED read green. latestChecks now judges runs by workflow run: within
  one, every run counts (the rollup already drops a re-run's earlier attempt,
  measured on cli/cli run 37941363988, so two runs of one name there are two
  jobs, as in pytorch); across workflow runs the newest decides, except that a
  FAILURE/ERROR/TIMED_OUT/STARTUP_FAILURE/ACTION_REQUIRED is cleared only by a
  later SUCCESS, a SKIPPED/NEUTRAL run never replaces a pass, a running run or
  an unknown state, and CANCELLED/STALE give way to anything later.
  cli/cli#14044's SUCCESS then SKIPPED stays green. One state reading
  (ghx.StateKind) now feeds this and merge.BucketOf.
- A check's identity includes its app: two apps posting one name
  (dotnet/runtime) are two checks.
- Required checks come from the PR's base repository on the PR URL's host,
  not the cwd's {owner}/{repo}. A forwarded -R/--repo is followed, so the PR
  merged is the PR read and pinned.
- A ruleset's workflows rule needs a run of that file from that repository
  (workflowRun.file); a run whose file GitHub does not name makes it
  unverifiable, which blocks.
- A required check pinned to an app needs GitHub's isRequired for this PR, or
  a run of that app; isRequired also verifies pinned commit statuses. It adds
  no rate-limit cost (1 point a page either way).
- A passthrough that merges nothing (--disable-auto, --help/-h) skips the
  gate and the pin. --auto stays gated, and the refusal says why.
- A blocked dry run prints `verdict=ok checks=blocked`, never a bare
  verdict=ok, and still exits 0.
- The terminal prompt reads its answer a byte at a time, so a `-F -` body
  typed after it is never consumed.

Fixtures captured with the first query got the new fields read from the same
head commits, so the states they caught are kept; dotnet, pytorch and grafana
fixtures are new.

Refs #179

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* merge-pr: pin that the checks prompt leaves a `-F -` body for the squash

Mutation testing showed the end-to-end case for "a terminal, then a -F -
body" checked only gh's argv: a prompt that read ahead and swallowed the body
still passed. The fake gh now records its stdin and the case asserts the
typed body reaches gh; TestReadLine pins readLine stopping at the newline.

Refs #179

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

external pull request originating outside of the CLI core team needs-triage needs to be reviewed ready-for-review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants