|
| 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