emdashes begone (#10847)
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
name: Build PortDuino WASM
|
||||
|
||||
# Reusable workflow — called as the `build-wasm` job of the main CI workflow
|
||||
# Reusable workflow - called as the `build-wasm` job of the main CI workflow
|
||||
# (main_matrix.yml), so the WebAssembly portduino node is built like every other
|
||||
# platform. Builds the [env:native-wasm] target (src/platform/portduino/wasm/) with
|
||||
# `pio run -e native-wasm` so it can't silently bit-rot. Software/CI only — asserts the
|
||||
# `pio run -e native-wasm` so it can't silently bit-rot. Software/CI only - asserts the
|
||||
# full mesh stack + RadioLib + Crypto compile and link to meshnode.{mjs,wasm}
|
||||
# via the meshtastic/platform-wasm PlatformIO platform (emcc/Asyncify). It does
|
||||
# NOT exercise the radio (that's CH341/WebUSB, hardware).
|
||||
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
// Resolve the PR by matching the run's head SHA against the repo's open
|
||||
// PRs. workflow_run.pull_requests is empty for fork PRs, and
|
||||
// listPullRequestsAssociatedWithCommit won't return an open fork PR by
|
||||
// its head commit — but pulls.list includes fork PRs. Matching on head
|
||||
// its head commit - but pulls.list includes fork PRs. Matching on head
|
||||
// SHA also enforces that the run is for the PR's current commit, so stale
|
||||
// re-runs of an outdated commit won't match.
|
||||
const openPrs = await github.paginate(github.rest.pulls.list, {
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
const prNumber = pr.number;
|
||||
|
||||
// Restrict to trusted authors. NOTE: author_association is computed for
|
||||
// the GITHUB_TOKEN, which cannot see *private/concealed* org memberships —
|
||||
// the GITHUB_TOKEN, which cannot see *private/concealed* org memberships -
|
||||
// those members come back as CONTRIBUTOR, not MEMBER. So gating on MEMBER
|
||||
// alone silently excludes most maintainers. We allow the trusted set the
|
||||
// token can actually identify (members, collaborators, and anyone with a
|
||||
@@ -86,7 +86,7 @@ jobs:
|
||||
// Read each built board's manifest (.mt.json). activelySupported,
|
||||
// displayName and architecture come straight from the board's
|
||||
// custom_meshtastic_* platformio config, so the list is in sync with
|
||||
// the firmware itself — no external device database needed.
|
||||
// the firmware itself - no external device database needed.
|
||||
const fs = require('fs');
|
||||
let boards = [];
|
||||
try {
|
||||
@@ -132,8 +132,8 @@ jobs:
|
||||
.join('\n');
|
||||
|
||||
// Shields.io badges. Only non-user-controlled, charset-constrained values
|
||||
// (version, commit sha, counts, dates) go into badge URLs — never board
|
||||
// names or the PR title — so the rendered comment cannot be spoofed.
|
||||
// (version, commit sha, counts, dates) go into badge URLs - never board
|
||||
// names or the PR title - so the rendered comment cannot be spoofed.
|
||||
const shieldText = (s) =>
|
||||
encodeURIComponent(String(s).replace(/-/g, '--').replace(/_/g, '__').replace(/ /g, '_'));
|
||||
const shield = (label, message, color) =>
|
||||
|
||||
@@ -6,7 +6,7 @@ name: Post Web Flasher Build Placeholder
|
||||
#
|
||||
# SECURITY: this uses pull_request_target (write token, runs for fork PRs) but is
|
||||
# safe because it never checks out or runs PR code and posts a fully static body
|
||||
# — no PR title, branch name, or other untrusted input is used anywhere.
|
||||
# - no PR title, branch name, or other untrusted input is used anywhere.
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
@@ -31,14 +31,14 @@ jobs:
|
||||
|
||||
// Trusted authors only (matches the real workflow). author_association
|
||||
// can't reflect private org membership for the token, so concealed
|
||||
// members appear as CONTRIBUTOR — include it, or maintainers are excluded.
|
||||
// members appear as CONTRIBUTOR - include it, or maintainers are excluded.
|
||||
const allowedAssociations = ['OWNER', 'MEMBER', 'COLLABORATOR', 'CONTRIBUTOR'];
|
||||
if (!allowedAssociations.includes(pr.author_association)) {
|
||||
core.info(`Author association ${pr.author_association} is not trusted; skipping.`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Only seed a placeholder when no flasher comment exists yet — never
|
||||
// Only seed a placeholder when no flasher comment exists yet - never
|
||||
// overwrite a real (or existing placeholder) comment.
|
||||
const comments = await github.paginate(github.rest.issues.listComments, {
|
||||
owner, repo, issue_number: pr.number, per_page: 100,
|
||||
|
||||
@@ -149,8 +149,8 @@ jobs:
|
||||
build-wasm:
|
||||
# Build the WebAssembly portduino node ([env:native-wasm]) as part of normal CI,
|
||||
# like the other platforms. It's a dedicated job (not a row in the `build`
|
||||
# matrix) because its artifact is meshnode.{mjs,wasm} — not a flashable
|
||||
# .bin/.uf2/.hex — and it needs the Emscripten SDK; board_level=extra keeps
|
||||
# matrix) because its artifact is meshnode.{mjs,wasm} - not a flashable
|
||||
# .bin/.uf2/.hex - and it needs the Emscripten SDK; board_level=extra keeps
|
||||
# it out of generate_ci_matrix.py.
|
||||
uses: ./.github/workflows/build_portduino_wasm.yml
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
python3 -c 'from meshtastic.test import testSimulator; testSimulator()'
|
||||
# The Python harness sends exit_simulator and exits; the simulator is
|
||||
# expected to terminate on its own. Give it a moment, then verify.
|
||||
# If it is still alive the exit handshake is broken — fail loudly and
|
||||
# If it is still alive the exit handshake is broken - fail loudly and
|
||||
# do NOT fall through to `wait`, which would otherwise block until the
|
||||
# job's hard timeout.
|
||||
for i in $(seq 1 10); do
|
||||
|
||||
Reference in New Issue
Block a user