Skip to content

Fix LSP read-message treating Content-Length as a character count, not a byte count #930

Fix LSP read-message treating Content-Length as a character count, not a byte count

Fix LSP read-message treating Content-Length as a character count, not a byte count #930

Workflow file for this run

name: native
# Stage0 native compiler CI. The GraalVM native-image of the blessed seed
# (self-host/seed/) is the canonical Beagle builder. Every push to main and
# every PR builds the binary via self-host/native/build.sh and gates it with
# self-host/native/verify-native.sh — the native binary's emit must be
# byte-for-byte identical to BOTH the babashka seed emit AND the Racket oracle
# emit, over the in-tree store/src corpus. Release publication belongs
# exclusively to release.yml.
#
# Why a workflow separate from test.yml: this pipeline needs the GraalVM +
# Clojure toolchain (via nix) that the Racket test matrix does not, and it
# carries no release logic. Keeping it standalone lets the native lane
# evolve and fail independently of the Racket suite. This file owns the
# native/stage0 CI (test.yml keeps the self-host fixpoint + oracle gates).
on:
push:
branches: [main]
tags: ['v*']
pull_request:
branches: [main]
jobs:
native:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Verify authored release notes
env:
RELEASE_TAG: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || '' }}
run: |
set -euo pipefail
if [[ -n "$RELEASE_TAG" ]]; then
bash scripts/check-release-notes.sh "$RELEASE_TAG"
exit 0
fi
mapfile -d '' notes_files < <(
find .github/release-notes -maxdepth 1 -type f \
-name 'v[0-9]*.[0-9]*.[0-9]*.md' -print0 | sort -z
)
[[ "${#notes_files[@]}" -gt 0 ]] || {
echo "no authored release notes are committed" >&2
exit 1
}
for notes_file in "${notes_files[@]}"; do
notes_tag="$(basename "$notes_file" .md)"
bash scripts/check-release-notes.sh "$notes_tag"
done
# Tag-keyed on purpose, and a separate script rather than another check
# inside check-release-notes.sh: that script is replayed above over every
# committed notes file, so it runs with older tags against the current
# tree. A version assertion there would fail every push to main the moment
# a second notes file exists. Placed before the toolchain installs so a
# mistagged release dies in seconds rather than after a native-image build.
- name: Verify release tag matches declared versions (tags only)
if: startsWith(github.ref, 'refs/tags/')
run: bash scripts/check-release-version.sh "${{ github.ref_name }}"
# The two release gates above are themselves tested; nothing globs
# bin/test/*/run.sh, so this explicit step is what makes that test run.
- name: Test the release gates
run: bin/test/release-gates/run.sh
# GraalVM native-image links against a C toolchain + zlib at build time.
# The ubuntu runner ships them, but install explicitly so a base-image
# change can't silently break the image link step.
- name: Install C toolchain (native-image link deps)
run: sudo apt-get update && sudo apt-get install -y build-essential libz-dev
- name: Install nix (provides graalvm-ce native-image + clojure CLI)
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
experimental-features = nix-command flakes
- name: Prove stale local stage0 artifacts cannot be selected
run: self-host/native/stage0-select-test.sh
# verify-native's three-way parity needs the Racket oracle. beagle-lib
# compiles fresh under this same racket (no .zo/runtime version skew), and
# _BEAGLE_RACKET pins bin/_beagle-racket to it so verify-native does not
# try to nix-develop a second, slower toolchain. Same pin as test.yml.
- name: Install Racket (oracle leg of verify-native)
uses: Bogdanp/setup-racket@v1.14
with:
architecture: x64
distribution: full
variant: CS
version: '9.1'
- name: Link beagle packages
run: |
raco pkg install --auto --link \
beagle-lib/ beagle-test/ beagle/
# bb runs the blessed seed (self-host/seed/) — the middle leg of the
# three-way parity (native == bb seed == Racket oracle). Same pin as test.yml.
- name: Install babashka (bb seed-emit leg of verify-native)
uses: turtlequeue/setup-babashka@v1.8.0
with:
babashka-version: '1.13.220'
# native-image + AOT compile run under the ambient-registry nixpkgs
# graalvm-ce + clojure. Build tools are intentionally unpinned here — the
# byte-for-byte parity gate below is what certifies the binary; a build
# regression cannot slip past a byte-identical emit check.
- name: Build stage0 native binary (GraalVM native-image via nix)
run: nix shell nixpkgs#graalvmPackages.graalvm-ce nixpkgs#clojure -c ./self-host/native/build.sh
- name: Verify native == bb seed == Racket oracle (byte-for-byte)
run: _BEAGLE_RACKET="$(which racket)" self-host/native/verify-native.sh store/src/store/*.bclj self-host/fixtures/lowering-temps.bclj