Fix LSP read-message treating Content-Length as a character count, not a byte count #930
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |