Skip to content

Commit a087aa7

Browse files
hyperpolymathclaude
andcommitted
ci(chapel): bump Chapel toolchain 2.3.0 -> 2.8.0 (closes #181)
Sibling estate repos `proven` (#141, admin-merged 2026-05-31) and `panic-attack` (#85, the chapel-ci pilot) both moved to Chapel 2.8.0; echidna was the lone laggard on 2.3.0. This bump closes the cross-repo toolchain seam called out in #181. Pattern reused verbatim from proven#141: * `CHAPEL_DEB_URL` -> ubuntu22 .deb at 2.8.0 (installs cleanly on the ubuntu24 runner image). SHA-256 verified out-of-band against the GitHub Releases asset (944a454b8a791f344312fcd261b562871159b74f5ef41d81e11833eb21d85f60). * `libunwind-dev` preinstall on every chapel-installing job - without it the chapel-built smoke binary fails to run with `libunwind.so.8: cannot open shared object`. * Top-level `env:` block hoists the version pin so all three install sites stay in sync; `chpl --version` echoed on each install to make the log self-describing. * No `CHPL_TARGET_*` overrides needed (sibling pattern: the 2.3.0-era runtime-tuple mismatch is gone on 2.8.0). Sources audited for the four documented 2.8.0 keyword gotchas (`out`/`label` reserved-as-locals, single-quoted char literals, Justfile `env(...) + str` paren rule) - echidna's .chpl already uses 2.x APIs (`createCopyingBuffer`, `sendPosixSignal`, `compareAndSwap`) and trips NONE of them. The only source-side touch is updating one comment in `chapel_ffi_exports.chpl` to reference the new .deb filename. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 88cd8dc commit a087aa7

2 files changed

Lines changed: 35 additions & 17 deletions

File tree

.github/workflows/chapel-ci.yml

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@ concurrency:
2727

2828
permissions: read-all
2929

30+
# Pinned Chapel deb (Ubuntu 22.04 amd64; installs cleanly on the
31+
# ubuntu24 runner). SHA-256 verified against the GitHub Releases asset;
32+
# mismatch fails the install step. Bumped 2.3.0 -> 2.8.0 (issue #181)
33+
# to track sibling estate repos proven (#141) and panic-attack (#85),
34+
# both of which validated this URL+SHA combo against the same
35+
# `ubuntu-latest` runner image we use here.
36+
env:
37+
CHAPEL_VERSION: '2.8.0'
38+
CHAPEL_DEB_URL: 'https://github.com/chapel-lang/chapel/releases/download/2.8.0/chapel-2.8.0-1.ubuntu22.amd64.deb'
39+
CHAPEL_DEB_SHA256: '944a454b8a791f344312fcd261b562871159b74f5ef41d81e11833eb21d85f60'
40+
3041
jobs:
3142
# Job 1: Compile Chapel .chpl files into a static library.
3243
#
@@ -35,13 +46,14 @@ jobs:
3546
# compiling, the workflow fails.
3647
#
3748
# Why --static and not --dynamic:
38-
# The official apt deb (chapel-2.3.0-1.ubuntu24.amd64.deb) ships only
39-
# the CHPL_LIB_PIC=none runtime variant. Building a shared library
40-
# requires CHPL_LIB_PIC=pic runtime objects which are not in the
41-
# package; the linker rejects the non-PIC `libchpl.a` with
49+
# The official apt deb (chapel-${CHAPEL_VERSION}-1.ubuntu22.amd64.deb)
50+
# ships only the CHPL_LIB_PIC=none runtime variant. Building a shared
51+
# library requires CHPL_LIB_PIC=pic runtime objects which are not in
52+
# the package; the linker rejects the non-PIC `libchpl.a` with
4253
# `relocation R_X86_64_TPOFF32 ... can not be used when making a
4354
# shared object`. Until the CI image ships a PIC-enabled runtime
44-
# (or we adopt a from-source Chapel build), the metalayer is
55+
# (or we adopt a from-source Chapel build via the
56+
# `chapel-pic-from-source` Justfile recipe), the metalayer is
4557
# distributed as `libechidna_chapel.a` and the Zig FFI links it
4658
# statically.
4759
chapel-build:
@@ -50,14 +62,18 @@ jobs:
5062
steps:
5163
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
5264

53-
- name: Install Chapel
65+
- name: Install Chapel ${{ env.CHAPEL_VERSION }} (SHA-pinned .deb)
5466
run: |
55-
# Install Chapel from official apt repository.
56-
# SHA256 of the deb is pinned for supply-chain integrity; bump
57-
# alongside the version tag when upgrading.
58-
curl -fsSL --max-time 300 \
59-
https://github.com/chapel-lang/chapel/releases/download/2.3.0/chapel-2.3.0-1.ubuntu24.amd64.deb \
60-
-o /tmp/chapel.deb
67+
set -euo pipefail
68+
# libunwind-dev is a runtime link-time dep for chpl-built binaries
69+
# on the ubuntu .deb path; sibling estate repo panic-attack (#85)
70+
# established this preinstall as the working pattern, reused by
71+
# proven (#141). Without it the chapel-build smoke link fails with
72+
# `error while loading shared libraries: libunwind.so.8`.
73+
sudo apt-get update -qq
74+
sudo apt-get install -y libunwind-dev
75+
curl -fsSL --max-time 300 --retry 3 -o /tmp/chapel.deb "$CHAPEL_DEB_URL"
76+
echo "$CHAPEL_DEB_SHA256 /tmp/chapel.deb" | sha256sum --check
6177
sudo dpkg -i /tmp/chapel.deb || sudo apt-get install -f -y
6278
chpl --version
6379
@@ -165,11 +181,13 @@ jobs:
165181
steps:
166182
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
167183

168-
- name: Install Chapel
184+
- name: Install Chapel ${{ env.CHAPEL_VERSION }} (SHA-pinned .deb)
169185
run: |
170-
curl -fsSL --max-time 300 \
171-
https://github.com/chapel-lang/chapel/releases/download/2.3.0/chapel-2.3.0-1.ubuntu24.amd64.deb \
172-
-o /tmp/chapel.deb
186+
set -euo pipefail
187+
sudo apt-get update -qq
188+
sudo apt-get install -y libunwind-dev
189+
curl -fsSL --max-time 300 --retry 3 -o /tmp/chapel.deb "$CHAPEL_DEB_URL"
190+
echo "$CHAPEL_DEB_SHA256 /tmp/chapel.deb" | sha256sum --check
173191
sudo dpkg -i /tmp/chapel.deb || sudo apt-get install -f -y
174192
chpl --version
175193

src/chapel/chapel_ffi_exports.chpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ extern record CProofResult {
4444

4545
// (Was originally `extern "C" { ... }`, but Chapel's extern-blocks feature
4646
// requires a Chapel install built with LLVM + clang headers; the official
47-
// `chapel-2.3.0-1.ubuntu24.amd64.deb` used in `chapel-ci.yml` is not. The
47+
// `chapel-2.8.0-1.ubuntu22.amd64.deb` used in `chapel-ci.yml` is not. The
4848
// canonical C-visible copy lives in `src/zig_ffi/chapel_ffi_exports.h`
4949
// (`#define PROVER_AGDA 0`…), which is what every non-Chapel consumer
5050
// reads; the constants below only need module-level scope inside Chapel.

0 commit comments

Comments
 (0)