Skip to content

Commit 2b4c74f

Browse files
committed
use nightly roc
1 parent 43cdaf5 commit 2b4c74f

8 files changed

Lines changed: 172 additions & 95 deletions

File tree

.github/workflows/release.yml

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,14 @@ jobs:
4747
rustup target add x86_64-unknown-linux-musl
4848
rustup target add aarch64-unknown-linux-musl
4949
50-
- name: Build Roc from pinned commit
50+
- name: Download Roc nightly
5151
run: |
52-
echo "Building roc from pinned commit..."
53-
ROC_COMMIT=$(python3 ci/get_roc_commit.py)
54-
55-
git init roc-src
56-
cd roc-src
57-
git remote add origin https://github.com/roc-lang/roc
58-
git fetch --depth 1 origin "$ROC_COMMIT"
59-
git checkout --detach "$ROC_COMMIT"
60-
61-
zig build roc
62-
63-
echo "$(pwd)/zig-out/bin" >> "$GITHUB_PATH"
52+
source ci/get_roc_nightly_url.sh
53+
echo "Downloading $ROC_NIGHTLY_URL"
54+
curl -fOL "$ROC_NIGHTLY_URL"
55+
tar -xzf "$ROC_NIGHTLY_ARCHIVE"
56+
ROC_DIR=$(ls -d roc_nightly-*/ | head -1)
57+
echo "$(pwd)/${ROC_DIR}" >> "$GITHUB_PATH"
6458
6559
- name: Build platform for all targets
6660
run: ./build.sh --all
@@ -126,20 +120,14 @@ jobs:
126120
if: startsWith(matrix.os, 'macos-')
127121
run: brew install expect
128122

129-
- name: Build Roc from pinned commit
123+
- name: Download Roc nightly
130124
run: |
131-
echo "Building roc from pinned commit..."
132-
ROC_COMMIT=$(python3 ci/get_roc_commit.py)
133-
134-
git init roc-src
135-
cd roc-src
136-
git remote add origin https://github.com/roc-lang/roc
137-
git fetch --depth 1 origin "$ROC_COMMIT"
138-
git checkout --detach "$ROC_COMMIT"
139-
140-
zig build roc
141-
142-
echo "$(pwd)/zig-out/bin" >> "$GITHUB_PATH"
125+
source ci/get_roc_nightly_url.sh
126+
echo "Downloading $ROC_NIGHTLY_URL"
127+
curl -fOL "$ROC_NIGHTLY_URL"
128+
tar -xzf "$ROC_NIGHTLY_ARCHIVE"
129+
ROC_DIR=$(ls -d roc_nightly-*/ | head -1)
130+
echo "$(pwd)/${ROC_DIR}" >> "$GITHUB_PATH"
143131
144132
- name: Download bundle artifact
145133
uses: actions/download-artifact@v4
@@ -217,7 +205,8 @@ jobs:
217205
exit 1
218206
fi
219207
220-
ROC_COMMIT=$(python3 ci/get_roc_commit.py | cut -c1-8)
208+
source ci/get_roc_nightly_url.sh
209+
ROC_COMMIT="$ROC_NIGHTLY_COMMIT"
221210
222211
# Create release with auto-generated notes
223212
gh release create "${{ github.event.inputs.release_tag }}" \

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ temp-dir
6565
env-var
6666
out.txt
6767

68-
# local roc folder for testing
69-
roc_nightly
68+
# Downloaded Roc nightly
69+
roc_nightly*
7070

7171
# Roc source built by CI
7272
roc-src

CONTRIBUTING.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44

55
We are committed to providing a friendly, safe and welcoming environment for all. See the [Code of Conduct](https://github.com/roc-lang/roc/blob/main/CODE_OF_CONDUCT.md) for details.
66

7+
## How to update the Roc version
8+
9+
This project uses pre-built Roc nightly releases. To update to a new nightly:
10+
11+
1. Find the desired nightly at https://github.com/roc-lang/nightlies/releases
12+
2. Update both values in `Cargo.toml`:
13+
- The `# roc-nightly: YYYY-MM-DD` comment (date must match the nightly release)
14+
- The `roc_std_new` rev (full 40-char commit hash, first 7 chars must match the nightly)
15+
3. Run `ci/all_tests.sh` to verify the new version works
16+
717
## How to generate docs?
818

919
TODO describe how to generate docs once `roc docs` is implemented in the new compiler

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ repository = "https://github.com/roc-lang/basic-cli"
3535

3636
[workspace.dependencies]
3737
# Core Roc types
38+
# roc-nightly: 2026-01-12
3839
roc_std_new = { git = "https://github.com/roc-lang/roc", rev = "36e9ff29fed0ebe6e9d47e30c14bc2d0a2545a5f" }
3940

4041
# Internal crates

README.md

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,11 @@ A Roc [platform](https://github.com/roc-lang/roc/wiki/Roc-concepts-explained#pla
1717

1818
**⚠️ IMPORTANT**: This branch (`migrate-zig-compiler`) requires the new Roc compiler and `roc_std_new` to be at matching versions to avoid ABI layout mismatches.
1919

20-
### Version Requirements
21-
22-
The `roc_std_new` dependency version in `Cargo.toml` MUST match your local Roc compiler version:
23-
24-
```toml
25-
# In Cargo.toml, update this to match your Roc compiler commit:
26-
roc_std_new = { path = "/path/to/your/roc/crates/roc_std_new" }
27-
# OR
28-
roc_std_new = { git = "https://github.com/roc-lang/roc", rev = "YOUR_COMMIT_HASH" }
29-
```
30-
31-
**To check your Roc compiler version:**
32-
```sh
33-
roc --version # Shows commit hash
34-
cd /path/to/roc && git log -1 --format="%H" # Full commit hash
35-
```
20+
### Roc Nightly Version
21+
22+
This project uses pre-built Roc nightly releases from [roc-lang/nightlies](https://github.com/roc-lang/nightlies). The pinned nightly version is specified in `Cargo.toml` via the `# roc-nightly:` comment and `roc_std_new` rev.
23+
24+
The CI scripts automatically download the correct nightly based on this configuration. See [CONTRIBUTING.md](CONTRIBUTING.md) for how to update the Roc version.
3625

3726
### Migration Status
3827

ci/all_tests.sh

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -37,51 +37,51 @@ cleanup() {
3737
# Set up trap to ensure cleanup runs on exit
3838
trap cleanup EXIT
3939

40-
# Get the roc commit pinned in Cargo.toml
41-
ROC_COMMIT=$(python3 ci/get_roc_commit.py)
42-
ROC_COMMIT_SHORT="${ROC_COMMIT:0:8}"
43-
NEED_BUILD=false
40+
# Get nightly version info from Cargo.toml
41+
source ci/get_roc_nightly_url.sh
42+
NEED_DOWNLOAD=false
4443

4544
echo "=== basic-cli CI ==="
4645
echo ""
4746

48-
# Check if roc exists and matches pinned commit
49-
if [ -d "roc-src" ] && [ -f "roc-src/zig-out/bin/roc" ]; then
50-
CACHED_VERSION=$(./roc-src/zig-out/bin/roc version 2>/dev/null || echo "unknown")
51-
if echo "$CACHED_VERSION" | grep -q "$ROC_COMMIT_SHORT"; then
47+
# Check if cached roc exists and matches pinned version
48+
ROC_DIR="roc_nightly-${ROC_NIGHTLY_DATE}-${ROC_NIGHTLY_COMMIT}"
49+
if [ -d "$ROC_DIR" ] && [ -f "$ROC_DIR/roc" ]; then
50+
CACHED_VERSION=$("./$ROC_DIR/roc" version 2>/dev/null || echo "unknown")
51+
if echo "$CACHED_VERSION" | grep -q "$ROC_NIGHTLY_COMMIT"; then
5252
echo "roc already at correct version: $CACHED_VERSION"
5353
else
54-
echo "Cached roc ($CACHED_VERSION) doesn't match pinned commit ($ROC_COMMIT_SHORT)"
55-
echo "Removing stale roc-src..."
56-
rm -rf roc-src
57-
NEED_BUILD=true
54+
echo "Cached roc ($CACHED_VERSION) doesn't match nightly ($ROC_NIGHTLY_COMMIT)"
55+
echo "Removing stale roc directory..."
56+
rm -rf "$ROC_DIR"
57+
NEED_DOWNLOAD=true
5858
fi
5959
else
60-
NEED_BUILD=true
60+
NEED_DOWNLOAD=true
6161
fi
6262

63-
if [ "$NEED_BUILD" = true ]; then
64-
echo "Building roc from pinned commit $ROC_COMMIT..."
63+
if [ "$NEED_DOWNLOAD" = true ]; then
64+
echo "Downloading Roc nightly $ROC_NIGHTLY_COMMIT..."
65+
echo "URL: $ROC_NIGHTLY_URL"
6566

66-
rm -rf roc-src
67-
git init roc-src
68-
cd roc-src
69-
git remote add origin https://github.com/roc-lang/roc
70-
git fetch --depth 1 origin "$ROC_COMMIT"
71-
git checkout --detach "$ROC_COMMIT"
67+
# Clean up any old nightly directories
68+
rm -rf roc_nightly-*
7269

73-
zig build roc
70+
curl -fOL "$ROC_NIGHTLY_URL"
71+
tar -xzf "$ROC_NIGHTLY_ARCHIVE"
72+
rm -f "$ROC_NIGHTLY_ARCHIVE"
73+
74+
# Find the extracted directory
75+
ROC_DIR=$(ls -d roc_nightly-*/ 2>/dev/null | head -1 | sed 's|/$||')
7476

7577
# Add to GITHUB_PATH if running in CI
7678
if [ -n "${GITHUB_PATH:-}" ]; then
77-
echo "$(pwd)/zig-out/bin" >> "$GITHUB_PATH"
79+
echo "$(pwd)/$ROC_DIR" >> "$GITHUB_PATH"
7880
fi
79-
80-
cd ..
8181
fi
8282

8383
# Ensure roc is in PATH
84-
export PATH="$(pwd)/roc-src/zig-out/bin:$PATH"
84+
export PATH="$(pwd)/$ROC_DIR:$PATH"
8585

8686
echo ""
8787
echo "Using roc version: $(roc version)"

ci/get_roc_commit.py

Lines changed: 0 additions & 24 deletions
This file was deleted.

ci/get_roc_nightly_url.sh

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#!/usr/bin/env bash
2+
# Parse Cargo.toml to get Roc nightly info and construct download URL.
3+
# This script exports: ROC_NIGHTLY_URL, ROC_NIGHTLY_ARCHIVE, ROC_NIGHTLY_COMMIT
4+
5+
set -eo pipefail
6+
7+
# Find Cargo.toml relative to this script or current directory
8+
if [ -n "${BASH_SOURCE[0]:-}" ]; then
9+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10+
CARGO_TOML="$SCRIPT_DIR/../Cargo.toml"
11+
else
12+
# Fallback when sourced in unusual ways
13+
CARGO_TOML="Cargo.toml"
14+
fi
15+
16+
# Parse nightly date from comment: # roc-nightly: 2026-01-12
17+
ROC_NIGHTLY_DATE=$(grep -E '^# roc-nightly:' "$CARGO_TOML" | sed 's/.*: *//')
18+
if [ -z "$ROC_NIGHTLY_DATE" ]; then
19+
echo "Error: Could not find '# roc-nightly:' comment in Cargo.toml" >&2
20+
exit 1
21+
fi
22+
23+
# Parse commit from roc_std_new rev (take first 7 chars)
24+
ROC_NIGHTLY_COMMIT=$(grep -E 'roc-lang/roc.*rev' "$CARGO_TOML" | sed 's/.*rev *= *"\([0-9a-fA-F]*\)".*/\1/' | cut -c1-7)
25+
if [ -z "$ROC_NIGHTLY_COMMIT" ]; then
26+
echo "Error: Could not find roc commit in Cargo.toml" >&2
27+
exit 1
28+
fi
29+
30+
# Convert month number to name for release tag
31+
# Date format: YYYY-MM-DD -> YYYY-MonthName-DD
32+
YEAR=$(echo "$ROC_NIGHTLY_DATE" | cut -d'-' -f1)
33+
MONTH_NUM=$(echo "$ROC_NIGHTLY_DATE" | cut -d'-' -f2)
34+
DAY=$(echo "$ROC_NIGHTLY_DATE" | cut -d'-' -f3)
35+
36+
case "$MONTH_NUM" in
37+
01) MONTH_NAME="January" ;;
38+
02) MONTH_NAME="February" ;;
39+
03) MONTH_NAME="March" ;;
40+
04) MONTH_NAME="April" ;;
41+
05) MONTH_NAME="May" ;;
42+
06) MONTH_NAME="June" ;;
43+
07) MONTH_NAME="July" ;;
44+
08) MONTH_NAME="August" ;;
45+
09) MONTH_NAME="September" ;;
46+
10) MONTH_NAME="October" ;;
47+
11) MONTH_NAME="November" ;;
48+
12) MONTH_NAME="December" ;;
49+
*)
50+
echo "Error: Invalid month number: $MONTH_NUM" >&2
51+
exit 1
52+
;;
53+
esac
54+
55+
# Detect platform
56+
OS=$(uname -s)
57+
ARCH=$(uname -m)
58+
59+
case "$OS" in
60+
Darwin)
61+
case "$ARCH" in
62+
arm64) PLATFORM="macos_apple_silicon" ;;
63+
x86_64) PLATFORM="macos_x86_64" ;;
64+
*)
65+
echo "Error: Unsupported macOS architecture: $ARCH" >&2
66+
exit 1
67+
;;
68+
esac
69+
EXT="tar.gz"
70+
;;
71+
Linux)
72+
case "$ARCH" in
73+
aarch64) PLATFORM="linux_arm64" ;;
74+
x86_64) PLATFORM="linux_x86_64" ;;
75+
*)
76+
echo "Error: Unsupported Linux architecture: $ARCH" >&2
77+
exit 1
78+
;;
79+
esac
80+
EXT="tar.gz"
81+
;;
82+
MINGW*|MSYS*|CYGWIN*|Windows_NT)
83+
case "$ARCH" in
84+
aarch64|arm64) PLATFORM="windows_arm64" ;;
85+
x86_64|AMD64) PLATFORM="windows_x86_64" ;;
86+
*)
87+
echo "Error: Unsupported Windows architecture: $ARCH" >&2
88+
exit 1
89+
;;
90+
esac
91+
EXT="zip"
92+
;;
93+
*)
94+
echo "Error: Unsupported OS: $OS" >&2
95+
exit 1
96+
;;
97+
esac
98+
99+
# Construct release tag: nightly-2026-January-12-36e9ff2
100+
RELEASE_TAG="nightly-${YEAR}-${MONTH_NAME}-${DAY}-${ROC_NIGHTLY_COMMIT}"
101+
102+
# Construct archive name: roc_nightly-macos_apple_silicon-2026-01-12-36e9ff2.tar.gz
103+
ROC_NIGHTLY_ARCHIVE="roc_nightly-${PLATFORM}-${ROC_NIGHTLY_DATE}-${ROC_NIGHTLY_COMMIT}.${EXT}"
104+
105+
# Construct full URL
106+
ROC_NIGHTLY_URL="https://github.com/roc-lang/nightlies/releases/download/${RELEASE_TAG}/${ROC_NIGHTLY_ARCHIVE}"
107+
108+
# Export variables for use by calling scripts
109+
export ROC_NIGHTLY_URL
110+
export ROC_NIGHTLY_ARCHIVE
111+
export ROC_NIGHTLY_COMMIT
112+
export ROC_NIGHTLY_DATE

0 commit comments

Comments
 (0)