Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a8ae891
protocol and backend: schemas held against mcpp's real output, the co…
xllmapi-official Oct 27, 2026
9caee86
backend: settings registry in the session's language with its groups …
xllmapi-official Oct 27, 2026
f28ec2b
webui: the shared panels -- project, targets and platforms, libraries…
xllmapi-official Oct 27, 2026
43123c4
vscode: mcpp-vscode 1.0.0 as the adapter of mcpp-ide
xllmapi-official Oct 27, 2026
fe3726d
jetbrains: mcpp-clion 0.1.0 for CLion 2025.2 and later
xllmapi-official Oct 27, 2026
a48b73e
agents: driving the backend from an agent, and a skill
xllmapi-official Oct 27, 2026
d881c49
CI, release, README (en, zh-CN) and the architecture
xllmapi-official Oct 27, 2026
f43a610
CI builds every system's release backend and packages both editors wi…
xllmapi-official Oct 27, 2026
7b26bb0
Translations of the adapters' strings; .xlings.json pins mcpp 2026.10…
xllmapi-official Oct 27, 2026
b0ca4e1
Build on each system as mcpp itself does: GCC on Linux, the xlings LL…
xllmapi-official Oct 27, 2026
125b035
The mock mcpp writes its streams as bytes through mcpplibs.os; fixtur…
xllmapi-official Oct 27, 2026
f9e7c78
The mock mcpp puts paths into its JSON escaped; the package store's c…
xllmapi-official Oct 27, 2026
2efcbdb
test_jobs: the record of a cancelled build is `cancelled` where the s…
xllmapi-official Oct 27, 2026
fdb3def
One package for every system: the backend as an ok-image bundle run b…
xllmapi-official Oct 27, 2026
80476a5
CI: the plugin's variables hold for every Gradle run of its job, so t…
xllmapi-official Oct 27, 2026
6ee5aa5
check-package.sh: no /dev/stderr on Windows
xllmapi-official Oct 27, 2026
c2af363
e2e: MCPP_E2E_EXTENSION runs the suite on another extension directory…
xllmapi-official Oct 27, 2026
285732b
Fixtures from mcpp 2026.10.27.1: a target row names its platform as a…
Sunrisepeak Oct 28, 2026
5ed7154
The backend is one ok-image bundle with every system's okrun: each sy…
Sunrisepeak Oct 28, 2026
67aee7e
CI: mcpp built from MCPP_SOURCE_REF builds itself with the release it…
Sunrisepeak Oct 28, 2026
5c9dea9
CI: the universal package is packed under its name on every system
Sunrisepeak Oct 28, 2026
ade13d7
CI: each system's universal package travels as its archive (the mode …
Sunrisepeak Oct 28, 2026
e9e6a97
mcpp.lock as mcpp build writes it
Sunrisepeak Oct 28, 2026
3b50e8f
CI: Windows' okrun is packed on Linux (an image built on Windows is n…
Sunrisepeak Oct 28, 2026
c540adc
e2e: each run checks the backend it started is the one it asked for (…
Sunrisepeak Oct 28, 2026
83ad846
openkal-platform 0.17.3: the ok images, the host-platform row, and th…
Sunrisepeak Oct 28, 2026
fefc800
CI: the bundle and the universal package are packed once, on Linux, w…
Sunrisepeak Oct 28, 2026
290d94d
spec: mcpp 2026.10.27.1's manifest keys and build-program directives;…
Sunrisepeak Oct 28, 2026
403c8ed
spec: every table and key mcpp 2026.10.27.1 reads, each with the rele…
Sunrisepeak Oct 28, 2026
858362b
mcpplibs.os 0.2.1 as an index version; mcpp.lock as mcpp 2026.10.27.1…
Sunrisepeak Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Text is LF everywhere; the golden fixtures are mcpp's bytes, compared and replayed exactly.
* text=auto eol=lf
protocol/fixtures/** -text
*.png binary
117 changes: 117 additions & 0 deletions .github/actions/setup-mcpp/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: Set up mcpp
description: Install xlings, the pinned mcpp (built from MCPP_SOURCE_REF when it is set) and (for macOS and Windows targets) the pinned LLVM, with the package store cached.
inputs:
llvm:
description: Install LLVM and make it mcpp's default toolchain.
default: 'false'
runs:
using: composite
steps:
- name: Version pins
shell: bash
run: |
set -euo pipefail
while IFS='=' read -r name value; do
case "$name" in ''|\#*) continue ;; esac
if [ -z "${!name:-}" ]; then echo "$name=$value" >> "$GITHUB_ENV"; fi
done < .github/versions.env
- name: Install xlings (Unix)
if: runner.os != 'Windows'
shell: bash
run: |
curl -fsSL --retry 3 --retry-all-errors --retry-delay 2 \
https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh \
| bash -s "$XLINGS_VERSION"
echo "$HOME/.xlings/subos/current/bin" >> "$GITHUB_PATH"
- name: Install xlings (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
irm https://d2learn.org/xlings-install.ps1.txt | iex
"$env:USERPROFILE\.xlings\subos\current\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Cache the mcpp package store
uses: actions/cache@v5
with:
path: ~/.mcpp/registry/data/xpkgs
key: mcpp-xpkgs-${{ runner.os }}-${{ runner.arch }}-${{ env.MCPP_VERSION }}-${{ hashFiles('mcpp.toml', 'mcpp.lock') }}
restore-keys: mcpp-xpkgs-${{ runner.os }}-${{ runner.arch }}-${{ env.MCPP_VERSION }}-
- name: Install mcpp
shell: bash
run: |
set -euo pipefail
for attempt in 1 2 3 4 5; do
xlings update > /dev/null 2>&1 || true
if xlings install "mcpp@$MCPP_VERSION" -y -g; then break; fi
[ "$attempt" = 5 ] && { echo "::error::mcpp@$MCPP_VERSION could not be installed"; exit 1; }
sleep 30
done
mcpp --version
mcpp self config --mirror GLOBAL
- name: Install LLVM
if: inputs.llvm == 'true'
shell: bash
run: |
set -euo pipefail
for attempt in 1 2 3; do
if mcpp toolchain install llvm "$LLVM_VERSION"; then break; fi
[ "$attempt" = 3 ] && exit 1
sleep 30
done
mcpp toolchain default "llvm@$LLVM_VERSION"
# MCPP_SOURCE_REF: mcpp built from that ref, before the ref is released; the program is kept per
# commit and system, and put first on PATH.
- name: Resolve MCPP_SOURCE_REF
id: source
if: env.MCPP_SOURCE_REF != ''
shell: bash
run: |
set -euo pipefail
sha="$(git ls-remote https://github.com/mcpp-community/mcpp.git "refs/heads/$MCPP_SOURCE_REF" "refs/tags/$MCPP_SOURCE_REF" | head -1 | cut -f1)"
[ -n "$sha" ] || { echo "::error::mcpp-community/mcpp has no branch or tag $MCPP_SOURCE_REF"; exit 1; }
echo "sha=$sha" >> "$GITHUB_OUTPUT"
- name: Restore mcpp built from ${{ env.MCPP_SOURCE_REF }}
id: kept
if: env.MCPP_SOURCE_REF != ''
uses: actions/cache/restore@v5
with:
path: ~/.mcpp-source/bin
key: mcpp-source-${{ runner.os }}-${{ runner.arch }}-${{ steps.source.outputs.sha }}
- name: mcpp from ${{ env.MCPP_SOURCE_REF }}
id: built
if: env.MCPP_SOURCE_REF != ''
shell: bash
env:
SHA: ${{ steps.source.outputs.sha }}
run: |
set -euo pipefail
case "$RUNNER_OS" in Windows) exe=mcpp.exe ;; *) exe=mcpp ;; esac
bin="$HOME/.mcpp-source/bin"
# A kept program that does not start (its toolchain's run-time is not in this store) is built again.
if ! "$bin/$exe" --version > /dev/null 2>&1; then
src="$RUNNER_TEMP/mcpp-source"
rm -rf "$src"
git init -q "$src"
git -C "$src" fetch -q --depth 1 https://github.com/mcpp-community/mcpp.git "$SHA"
git -C "$src" checkout -q FETCH_HEAD
# mcpp builds itself with the release its .xlings.json pins (xlings sets the project up).
for attempt in 1 2 3; do
if (cd "$src" && xlings install -y); then break; fi
[ "$attempt" = 3 ] && { echo "::error::the mcpp $MCPP_SOURCE_REF pins could not be installed"; exit 1; }
sleep 30
done
(cd "$src" && mcpp --version && mcpp build)
built="$(find "$src/target" -type f -name "$exe" -path '*/bin/*' ! -path '*/dist/*' | head -1)"
[ -n "$built" ] || { echo "::error::building mcpp at $MCPP_SOURCE_REF left no $exe"; exit 1; }
mkdir -p "$bin"
cp "$built" "$bin/$exe"
echo "fresh=true" >> "$GITHUB_OUTPUT"
fi
"$bin/$exe" --version
case "$RUNNER_OS" in Windows) cygpath -w "$bin" ;; *) echo "$bin" ;; esac >> "$GITHUB_PATH"
# Kept as soon as it is built, so a job that fails later does not build it again.
- name: Keep mcpp built from ${{ env.MCPP_SOURCE_REF }}
if: env.MCPP_SOURCE_REF != '' && steps.built.outputs.fresh == 'true' && steps.kept.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: ~/.mcpp-source/bin
key: ${{ steps.kept.outputs.cache-primary-key }}
36 changes: 36 additions & 0 deletions .github/scripts/check-package.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# check-package.sh <package> <root inside the archive>
#
# What an editor package carries of the backend, checked on the system this runs on (CI runs it on
# every system): the ok-image bundle (mcpp design 2026-10-28 part 2 §15), exactly one
# backend/mcpp-ide.okb; an okrun for every system and architecture CI packs; and the one for this
# system starting the bundle.
set -euo pipefail
package="$1" prefix="$2"
dir="$(mktemp -d)"
trap 'rm -rf "$dir"' EXIT
unzip -q "$package" -d "$dir"
root="$dir/$prefix"

case "$(uname -s)" in Linux) os=linux ;; Darwin) os=macos ;; *) os=windows ;; esac
case "$(uname -m)" in x86_64|amd64|AMD64) arch=x86_64 ;; aarch64|arm64|ARM64) arch=aarch64 ;; *) arch="$(uname -m)" ;; esac
exe=""; [ "$os" = windows ] && exe=".exe"

answers() { # <argv...>: the backend says who it is
local said
said="$("$@" --version)"
echo "$said"
grep -q '^mcpp-ide ' <<< "$said"
}

okbs="$(find "$root" -name '*.okb' | wc -l | tr -d ' ')"
[ "$okbs" = 1 ] || { echo "::error::$package carries $okbs ok-image bundles; one is expected"; exit 1; }
[ -f "$root/backend/mcpp-ide.okb" ] || { echo "::error::the bundle is not backend/mcpp-ide.okb"; exit 1; }
for want in linux-x86_64 linux-aarch64 macos-aarch64 windows-x86_64; do
ls "$root/backend/okrun/$want/"okrun* > /dev/null 2>&1 || { echo "::error::$package carries no okrun for $want"; exit 1; }
done
[ -d "$root/bin" ] && { echo "::error::$package carries bin/ beside the bundle"; exit 1; }
okrun="$root/backend/okrun/$os-$arch/okrun$exe"
chmod +x "$okrun" 2>/dev/null || true
answers "$okrun" "$root/backend/mcpp-ide.okb"
echo "$package: one bundle; okrun for $os-$arch starts it"
14 changes: 14 additions & 0 deletions .github/versions.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# The versions CI builds and tests with, in one file; .github/actions/setup-mcpp exports them.
# The released mcpp CI installs and uses: the control contract the fixtures were captured from
# (protocol/fixtures/version.txt) and the platforms (openkal-platform 0.17.3) the backend's ok images
# are built on.
MCPP_VERSION=2026.10.27.1
# A ref of mcpp-community/mcpp CI builds mcpp from and uses instead, for a contract not yet released.
# Empty: the release above is used.
MCPP_SOURCE_REF=
# The LLVM the backend builds with on macOS and Windows (the targets mcpp reaches there with it).
LLVM_VERSION=23.1.3
# The xlings mcpp 2026.10.27.1 bundles, which reads the current index.
XLINGS_VERSION=v2026.10.26.1
# The oldest VS Code the extension supports (engines.vscode), which its tests run in.
VSCODE_VERSION=1.91.0
Loading
Loading