diff --git a/.gitignore b/.gitignore index 3a41212..4c94026 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ out/ node_modules/ .DS_Store .mill-jvm-version +.claude/plans/ diff --git a/README.md b/README.md index 58840dc..e3120f9 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Keeps Mill's task graph, module structure, caching, Scala.js linker integration, //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.1.0 package build @@ -47,7 +47,7 @@ object app extends BunScalaJSModule { //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.1.0 package build diff --git a/build.mill b/build.mill index 5696ff0..ddef9a2 100644 --- a/build.mill +++ b/build.mill @@ -51,7 +51,7 @@ object millbun extends ScalaModule, PublishModule { // CI injects release versions via PUBLISH_VERSION; local builds stay on SNAPSHOT. def publishVersion: T[String] = Task { - Task.env.getOrElse("PUBLISH_VERSION", "0.1.0-SNAPSHOT") + Task.env.getOrElse("PUBLISH_VERSION", "0.0.0-NIGHTLY") } def pomSettings = PomSettings( description = "Bun-backed Mill plugin for Scala.js and TypeScript workflows", diff --git a/docs/RELEASING.md b/docs/RELEASING.md index 29e4c57..dcb5a5c 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -39,12 +39,12 @@ Before tagging a release: Update these locations before cutting the release tag: -- `build.mill` - `README.md` - `example-typescript/build.mill` - `example-scalajs/build.mill` - `examples/build.mill` -- `millbun/integration/resources/**/build.mill` + +Do **not** sweep `millbun/integration/resources/**/build.mill` — those use a fixed `0.0.0-NIGHTLY` version that resolves against the locally published artifact (via `publishLocalTestRepo`), not Maven Central. After the release is published, bump `main` to the next snapshot version when new development starts. diff --git a/example-scalajs/build.mill b/example-scalajs/build.mill index aadaeff..fdd3f23 100644 --- a/example-scalajs/build.mill +++ b/example-scalajs/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.1.0 package build diff --git a/example-scalajs/mill b/example-scalajs/mill new file mode 100755 index 0000000..155baa7 --- /dev/null +++ b/example-scalajs/mill @@ -0,0 +1,199 @@ +#!/usr/bin/env sh + +set -e + +if [ -z "${DEFAULT_MILL_VERSION}" ] ; then DEFAULT_MILL_VERSION="1.1.5"; fi + +if [ -z "${GITHUB_RELEASE_CDN}" ] ; then GITHUB_RELEASE_CDN=""; fi + +if [ -z "$MILL_MAIN_CLI" ] ; then MILL_MAIN_CLI="${0}"; fi + +MILL_REPO_URL="https://github.com/com-lihaoyi/mill" + +MILL_BUILD_SCRIPT="" + +if [ -f "build.mill" ] ; then + MILL_BUILD_SCRIPT="build.mill" +elif [ -f "build.mill.scala" ] ; then + MILL_BUILD_SCRIPT="build.mill.scala" +elif [ -f "build.sc" ] ; then + MILL_BUILD_SCRIPT="build.sc" +fi + +# `s/.*://`: +# This is a greedy match that removes everything from the beginning of the line up to (and including) the last +# colon (:). This effectively isolates the value part of the declaration. +# +# `s/#.*//`: +# This removes any comments at the end of the line. +# +# `s/['\"]//g`: +# This removes all single and double quotes from the string, wherever they appear (g is for "global"). +# +# `s/^[[:space:]]*//; s/[[:space:]]*$//`: +# These two expressions trim any leading or trailing whitespace ([[:space:]] matches spaces and tabs). +TRIM_VALUE_SED="s/.*://; s/#.*//; s/['\"]//g; s/^[[:space:]]*//; s/[[:space:]]*$//" + +if [ -z "${MILL_VERSION}" ] ; then + if [ -f ".mill-version" ] ; then + MILL_VERSION="$(tr '\r' '\n' < .mill-version | head -n 1 2> /dev/null)" + elif [ -f ".config/mill-version" ] ; then + MILL_VERSION="$(tr '\r' '\n' < .config/mill-version | head -n 1 2> /dev/null)" + elif [ -f "build.mill.yaml" ] ; then + MILL_VERSION="$(grep -E "mill-version:" "build.mill.yaml" | sed -E "$TRIM_VALUE_SED")" + elif [ -n "${MILL_BUILD_SCRIPT}" ] ; then + MILL_VERSION="$(grep -E "//\|.*mill-version" "${MILL_BUILD_SCRIPT}" | sed -E "$TRIM_VALUE_SED")" + fi +fi + +if [ -z "${MILL_VERSION}" ] ; then MILL_VERSION="${DEFAULT_MILL_VERSION}"; fi + +MILL_USER_CACHE_DIR="${XDG_CACHE_HOME:-${HOME}/.cache}/mill" + +if [ -z "${MILL_FINAL_DOWNLOAD_FOLDER}" ] ; then MILL_FINAL_DOWNLOAD_FOLDER="${MILL_USER_CACHE_DIR}/download"; fi + +MILL_NATIVE_SUFFIX="-native" +MILL_JVM_SUFFIX="-jvm" +ARTIFACT_SUFFIX="" + +# Check if GLIBC version is at least the required version +# Returns 0 (true) if GLIBC >= required version, 1 (false) otherwise +check_glibc_version() { + required_version="2.39" + required_major=$(echo "$required_version" | cut -d. -f1) + required_minor=$(echo "$required_version" | cut -d. -f2) + # Get GLIBC version from ldd --version (first line contains version like "ldd (GNU libc) 2.31") + glibc_version=$(ldd --version 2>/dev/null | head -n 1 | grep -oE '[0-9]+\.[0-9]+$' || echo "") + if [ -z "$glibc_version" ]; then + # If we can't determine GLIBC version, assume it's too old + return 1 + fi + glibc_major=$(echo "$glibc_version" | cut -d. -f1) + glibc_minor=$(echo "$glibc_version" | cut -d. -f2) + if [ "$glibc_major" -gt "$required_major" ]; then + return 0 + elif [ "$glibc_major" -eq "$required_major" ] && [ "$glibc_minor" -ge "$required_minor" ]; then + return 0 + else + return 1 + fi +} + +set_artifact_suffix() { + if [ "$(uname -s 2>/dev/null | cut -c 1-5)" = "Linux" ]; then + # Native binaries require new enough GLIBC; fall back to JVM launcher if older + if ! check_glibc_version; then + return + fi + if [ "$(uname -m)" = "aarch64" ]; then ARTIFACT_SUFFIX="-native-linux-aarch64" + else ARTIFACT_SUFFIX="-native-linux-amd64"; fi + elif [ "$(uname)" = "Darwin" ]; then + if [ "$(uname -m)" = "arm64" ]; then ARTIFACT_SUFFIX="-native-mac-aarch64" + else ARTIFACT_SUFFIX="-native-mac-amd64"; fi + else + echo "This native mill launcher supports only Linux and macOS." 1>&2 + exit 1 + fi +} + +case "$MILL_VERSION" in + *"$MILL_NATIVE_SUFFIX") + MILL_VERSION=${MILL_VERSION%"$MILL_NATIVE_SUFFIX"} + set_artifact_suffix + ;; + + *"$MILL_JVM_SUFFIX") + MILL_VERSION=${MILL_VERSION%"$MILL_JVM_SUFFIX"} + ;; + + *) + case "$MILL_VERSION" in + 0.1.* | 0.2.* | 0.3.* | 0.4.* | 0.5.* | 0.6.* | 0.7.* | 0.8.* | 0.9.* | 0.10.* | 0.11.* | 0.12.*) + ;; + *) + set_artifact_suffix + ;; + esac + ;; +esac + +MILL="${MILL_FINAL_DOWNLOAD_FOLDER}/$MILL_VERSION$ARTIFACT_SUFFIX" + +# If not already downloaded, download it +if [ ! -s "${MILL}" ] || [ "$MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT" = "1" ] ; then + case $MILL_VERSION in + 0.0.* | 0.1.* | 0.2.* | 0.3.* | 0.4.*) + MILL_DOWNLOAD_SUFFIX="" + MILL_DOWNLOAD_FROM_MAVEN=0 + ;; + 0.5.* | 0.6.* | 0.7.* | 0.8.* | 0.9.* | 0.10.* | 0.11.0-M*) + MILL_DOWNLOAD_SUFFIX="-assembly" + MILL_DOWNLOAD_FROM_MAVEN=0 + ;; + *) + MILL_DOWNLOAD_SUFFIX="-assembly" + MILL_DOWNLOAD_FROM_MAVEN=1 + ;; + esac + case $MILL_VERSION in + 0.12.0 | 0.12.1 | 0.12.2 | 0.12.3 | 0.12.4 | 0.12.5 | 0.12.6 | 0.12.7 | 0.12.8 | 0.12.9 | 0.12.10 | 0.12.11) + MILL_DOWNLOAD_EXT="jar" + ;; + 0.12.*) + MILL_DOWNLOAD_EXT="exe" + ;; + 0.*) + MILL_DOWNLOAD_EXT="jar" + ;; + *) + MILL_DOWNLOAD_EXT="exe" + ;; + esac + + MILL_TEMP_DOWNLOAD_FILE="${MILL_OUTPUT_DIR:-out}/mill-temp-download" + mkdir -p "$(dirname "${MILL_TEMP_DOWNLOAD_FILE}")" + + if [ "$MILL_DOWNLOAD_FROM_MAVEN" = "1" ] ; then + MILL_DOWNLOAD_URL="https://repo1.maven.org/maven2/com/lihaoyi/mill-dist${ARTIFACT_SUFFIX}/${MILL_VERSION}/mill-dist${ARTIFACT_SUFFIX}-${MILL_VERSION}.${MILL_DOWNLOAD_EXT}" + else + MILL_VERSION_TAG=$(echo "$MILL_VERSION" | sed -E 's/([^-]+)(-M[0-9]+)?(-.*)?/\1\2/') + MILL_DOWNLOAD_URL="${GITHUB_RELEASE_CDN}${MILL_REPO_URL}/releases/download/${MILL_VERSION_TAG}/${MILL_VERSION}${MILL_DOWNLOAD_SUFFIX}" + unset MILL_VERSION_TAG + fi + + + if [ "$MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT" = "1" ] ; then + echo "$MILL_DOWNLOAD_URL" + echo "$MILL" + exit 0 + fi + + echo "Downloading mill ${MILL_VERSION} from ${MILL_DOWNLOAD_URL} ..." 1>&2 + curl -f -L -o "${MILL_TEMP_DOWNLOAD_FILE}" "${MILL_DOWNLOAD_URL}" + + chmod +x "${MILL_TEMP_DOWNLOAD_FILE}" + + mkdir -p "${MILL_FINAL_DOWNLOAD_FOLDER}" + mv "${MILL_TEMP_DOWNLOAD_FILE}" "${MILL}" + + unset MILL_TEMP_DOWNLOAD_FILE + unset MILL_DOWNLOAD_SUFFIX +fi + +MILL_FIRST_ARG="" +if [ "$1" = "--bsp" ] || [ "${1#"-i"}" != "$1" ] || [ "$1" = "--interactive" ] || [ "$1" = "--no-server" ] || [ "$1" = "--no-daemon" ] || [ "$1" = "--help" ] ; then + # Need to preserve the first position of those listed options + MILL_FIRST_ARG=$1 + shift +fi + +unset MILL_FINAL_DOWNLOAD_FOLDER +unset MILL_OLD_DOWNLOAD_PATH +unset OLD_MILL +unset MILL_VERSION +unset MILL_REPO_URL + +# -D mill.main.cli is for compatibility with Mill 0.10.9 - 0.13.0-M2 +# We don't quote MILL_FIRST_ARG on purpose, so we can expand the empty value without quotes +# shellcheck disable=SC2086 +exec "${MILL}" $MILL_FIRST_ARG -D "mill.main.cli=${MILL_MAIN_CLI}" "$@" diff --git a/example-typescript/build.mill b/example-typescript/build.mill index 95c5803..2d3d205 100644 --- a/example-typescript/build.mill +++ b/example-typescript/build.mill @@ -1,6 +1,6 @@ //| mill-version: 1.1.5 //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.1.0 package build diff --git a/examples/build.mill b/examples/build.mill index fbb3ce0..168bc43 100644 --- a/examples/build.mill +++ b/examples/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.1.0 package build diff --git a/millbun/integration/resources/scalajs-bundle/build.mill b/millbun/integration/resources/scalajs-bundle/build.mill index ecf1f23..a8f5e59 100644 --- a/millbun/integration/resources/scalajs-bundle/build.mill +++ b/millbun/integration/resources/scalajs-bundle/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/scalajs-bunfig/build.mill b/millbun/integration/resources/scalajs-bunfig/build.mill index 0084ae5..eef2273 100644 --- a/millbun/integration/resources/scalajs-bunfig/build.mill +++ b/millbun/integration/resources/scalajs-bunfig/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/scalajs-simple/build.mill b/millbun/integration/resources/scalajs-simple/build.mill index bf26863..c494138 100644 --- a/millbun/integration/resources/scalajs-simple/build.mill +++ b/millbun/integration/resources/scalajs-simple/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/scalajs-test/build.mill b/millbun/integration/resources/scalajs-test/build.mill index 83dd9ea..bf40d38 100644 --- a/millbun/integration/resources/scalajs-test/build.mill +++ b/millbun/integration/resources/scalajs-test/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/scalajs-transitive/build.mill b/millbun/integration/resources/scalajs-transitive/build.mill index 650f39e..a64a9a4 100644 --- a/millbun/integration/resources/scalajs-transitive/build.mill +++ b/millbun/integration/resources/scalajs-transitive/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-browser/build.mill b/millbun/integration/resources/typescript-browser/build.mill index 60e41ab..b14146b 100644 --- a/millbun/integration/resources/typescript-browser/build.mill +++ b/millbun/integration/resources/typescript-browser/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-bundle/build.mill b/millbun/integration/resources/typescript-bundle/build.mill index 2695240..02c1ede 100644 --- a/millbun/integration/resources/typescript-bundle/build.mill +++ b/millbun/integration/resources/typescript-bundle/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-bunfig/build.mill b/millbun/integration/resources/typescript-bunfig/build.mill index 5f29a6e..3edc3c7 100644 --- a/millbun/integration/resources/typescript-bunfig/build.mill +++ b/millbun/integration/resources/typescript-bunfig/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-compile/build.mill b/millbun/integration/resources/typescript-compile/build.mill index a85f403..8fa780e 100644 --- a/millbun/integration/resources/typescript-compile/build.mill +++ b/millbun/integration/resources/typescript-compile/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-env/build.mill b/millbun/integration/resources/typescript-env/build.mill index 4623df5..b1d1228 100644 --- a/millbun/integration/resources/typescript-env/build.mill +++ b/millbun/integration/resources/typescript-env/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-simple/build.mill b/millbun/integration/resources/typescript-simple/build.mill index 16c4dfc..e714a76 100644 --- a/millbun/integration/resources/typescript-simple/build.mill +++ b/millbun/integration/resources/typescript-simple/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-test-deps/build.mill b/millbun/integration/resources/typescript-test-deps/build.mill index f4d234e..cd619a0 100644 --- a/millbun/integration/resources/typescript-test-deps/build.mill +++ b/millbun/integration/resources/typescript-test-deps/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-tests/build.mill b/millbun/integration/resources/typescript-tests/build.mill index 6ba4542..3504a2a 100644 --- a/millbun/integration/resources/typescript-tests/build.mill +++ b/millbun/integration/resources/typescript-tests/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-tsx/build.mill b/millbun/integration/resources/typescript-tsx/build.mill index 4dd7555..c9710be 100644 --- a/millbun/integration/resources/typescript-tsx/build.mill +++ b/millbun/integration/resources/typescript-tsx/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build diff --git a/millbun/integration/resources/typescript-workers/build.mill b/millbun/integration/resources/typescript-workers/build.mill index a2fb45a..50724d0 100644 --- a/millbun/integration/resources/typescript-workers/build.mill +++ b/millbun/integration/resources/typescript-workers/build.mill @@ -1,7 +1,7 @@ //| mill-version: 1.1.5 //| mill-jvm-version: system //| mvnDeps: -//| - com.tjclp::mill-bun_mill1:0.1.0-SNAPSHOT +//| - com.tjclp::mill-bun_mill1:0.0.0-NIGHTLY package build