[mise-lock] chore: migrate CI to mise-action - #35
Conversation
Add mise.toml/mise.lock and replace step-security/setup-beam steps in ci.yml and dev-publish.yaml with step-security/mise-action, using MISE_ELIXIR_VERSION/MISE_ERLANG_VERSION env overrides to preserve the existing Elixir/OTP version matrix. Ignore .github/actions.lock.yaml and regenerate it via alflow.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
…lchain The static/test jobs' 2-way OTP matrix (21.3.8.24 / 22.3.4.7 on Elixir 1.10.4) relied on MISE_ELIXIR_VERSION/MISE_ERLANG_VERSION overrides that don't exist in mise.lock (which only locks mise.toml's pinned version). Collapsed both jobs to a single run on the mise.toml-pinned toolchain, matching the fix already applied to sibling repos in this migration (e.g. telemetry_metrics_appsignal@e38e32f). Also dropped the top-level MISE_ELIXIR_VERSION/MISE_ERLANG_VERSION env overrides (stale 1.10.4/ 22.3.4.7 values), which would otherwise have broken the publish job's mise-action step the same way once it ran. Claude Code fix.
…26.8.12 Pins step-security/mise-action to v4.2.4 (mise CLI 2026.8.12) and regenerates mise.lock to the versioned lockfile format mise 2026.8.11+ requires. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
dyl-sv
left a comment
There was a problem hiding this comment.
CI is red at the current head (dd74344), run 32952650783: both Static Checks and Unit Tests fail at the "Setup mise" step (mise install --locked) — not further along in the build, so the toolchain never installs.
Root cause: mise.lock has a malformed/duplicated erlang entry — three separate [[tools.erlang]] blocks for the same 23.3.4.7 version (one with no specifiers + precompiled_os = "ubuntu-22.04", one with specifiers + no precompiled_os at all, one with specifiers + precompiled_os = "ubuntu-24.04"). Every platform entry across all three blocks (including linux-x64, the actual runner arch) is install = "source" pointing at otp_src_23.3.4.7.tar.gz — there's no working precompiled path at all. As a result mise install --locked falls back to building OTP from source via kerl, which then fails during the build:
gmake[4]: *** [x86_64-unknown-linux-gnu/Makefile:186: ../priv/obj/x86_64-unknown-linux-gnu/pkey.o] Error 1
...
mise ERROR Failed to install tools: core:elixir@1.11.4, core:erlang@23.3.4.7
core:erlang@23.3.4.7: command ["...kerl-4.4.0", "build-install", ...] exited with code 1
```//
(job https://github.com/freshaengineering/grpc/actions/runs/32952650783/job/98127341295, "Setup mise" step)
This matches the known "malformed/stale mise.lock — duplicate tool blocks for same tool" and "erlang precompiled_os mismatch" failure patterns from this rollout. The 3rd commit (dd74344, "refresh mise.lock to lockfile_version=1") regenerated the lockfile but it still doesn't produce a usable precompiled erlang entry for this runner, so `Install Hex + Rebar` / dependency install / compile / format / tests never even run — everything after "Setup mise" is skipped.
The `interop-tests` and `check_release` jobs, which run in the `elixir:1.10-slim` container and don't touch mise at all, are unaffected by this PR's diff (confirmed via `.github/actions.lock.yaml` occurrence-index-only changes) — their failures are pre-existing/unrelated to this migration and not something I'm blocking on.
Please regenerate `mise.lock` (or hand-fix the erlang block) so it resolves to a single, working erlang@23.3.4.7 entry with an actual precompiled binary for the `linux-x64`/ubuntu24 runner this CI uses — or bump to an OTP patch version that has a real precompiled build — and confirm a green run on this PR's head SHA before merging.
OTP 23.3.4.7 has no precompiled binary on hex.pm for any Ubuntu image (nor on erlef/otp_builds), so `mise install --locked` always fell back to a from-source kerl build. That build fails to compile OTP 23's crypto app against the ubuntu-24.04 runner's OpenSSL 3.x toolchain (gmake error building pkey.o) -- so Static Checks/Unit Tests never got past the "Setup mise" step. Bumped to elixir 1.12.3-otp-24 / erlang 24.3.4.17 (mix.exs only requires elixir "~> 1.5"; the README's floor is "Erlang/OTP needs >= 20.3.2"), which does compile cleanly against OpenSSL 3.x. Verified end-to-end in a fresh ubuntu:24.04 container matching the CI runner: mise install --locked, mix deps.get, and mix compile --warnings-as-errors all succeed. Also updated dev-publish.yaml's informational ELIXIR_VERSION/ OTP_VERSION/MISE_ELIXIR_VERSION/MISE_ERLANG_VERSION env vars to match. Addresses review feedback from dyl-sv on PR #35.
dyl-sv
left a comment
There was a problem hiding this comment.
Re-verified from scratch against the latest commit (6615a73, pushed 2026-08-26 14:13 UTC).
mise.lock is still malformed the same way as before. It now has two duplicate [[tools.erlang]] blocks for the same version (24.3.4.17) — one plain block and one gated by [tools.erlang.options] precompiled_os = "ubuntu-24.04". Every Linux platform entry in both blocks (linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl) is still install = "source". There is no genuine precompiled entry for the linux-x64 platform the ubuntu-24.04 GitHub runner actually uses — the underlying lockfile problem flagged in the previous review has not been fixed, it's just no longer fatal.
Why it's no longer fatal (but still not fixed): the author bumped erlang 23.3.4.7 → 24.3.4.17 / elixir → 1.12.3-otp-24. Confirmed in the Unit Tests and Static Checks job logs that mise install --locked downloads otp_src_24.3.4.17.tar.gz and builds via kerl from source ([erts-12.3.2.17] [source]), same as before — it just happens to succeed now because OTP 24's crypto app compiles against OpenSSL 3.x (only odbc/link warnings, no pkey.o fatal error). So mise install is no longer crashing, but it's still doing a ~2.5 min from-source kerl build on every CI run, not using a precompiled binary, because the lockfile still doesn't declare one for this platform.
Checks are red, not green:
- Static Checks: fail — after mise install succeeds, the "Hex auth" step (
mix hex.organization auth fresha --key) fails with** (Mix) Could not invoke task "hex.organization": 1 error found! --key : Missing argument of type string(exit code 1). - Unit Tests: fail — identical failure at the same "Hex auth" step.
- Interop tests: fail — different issue ("git not installed" in the interop test step).
So even setting aside the still-malformed erlang lockfile entries, the PR's own checks (gh pr checks 35) are not passing: Static Checks and Unit Tests both fail downstream at Hex auth, and Interop tests fail separately. Requesting changes — please fix the Hex auth key (looks like a missing/empty secret) and clean up mise.lock so the runner's actual platform has a real precompiled entry instead of two duplicate source-only erlang blocks.
builds.hex.pm only precompiles OTP for ubuntu-24.04 starting at OTP 25 — every OTP 24.x (and 23.x) release falls back to a from-source kerl build there, which is slow and fragile. Also fixes mise.lock having picked up duplicate [[tools.erlang]] blocks for the same version from prior in-place edits; a clean `mise lock` regeneration produces a single block per tool with a genuine precompiled entry for the linux-x64 CI runner (musl variants still build from source, but the GitHub-hosted runner is glibc). Verified locally: `mise install --locked` resolves precompiled binaries for both tools on linux-x64, and `mix test` passes 75/76 (the one failure is an expired TLS test fixture certificate, unrelated to the toolchain).
Status updateThe malformed erlang lockfile issue from the last review is resolved. Bumped to Current CI status on this head:
So the mise.lock/toolchain-install problem this PR set out to fix is done; what's left failing is the pre-existing Hex-auth secret and the pre-existing interop-test issues, both orthogonal to the mise migration itself. Also worth flagging separately: grpc is a fork/mirror of the OSS elixir-grpc/grpc library published as |
Brings this repo in line with the fleet mise-action CI standard.
Changes
mise.tomlwithelixir = "1.11.4"anderlang = "23.3.4.7"(the highest versions found across workflows, matchingdev-publish.yaml'sELIXIR_VERSION/OTP_VERSION), and generatedmise.lockin the versionedlockfile_version = 1format mise 2026.8.11+ requires.step-security/setup-beamsteps inci.yml(static, test, publish jobs) anddev-publish.yamlwithstep-security/mise-action, pinned tov4.2.4(mise CLI2026.8.12), adding an explicitmix local.hex --force && mix local.rebar --forcestep afterward (setup-beam did this implicitly, mise-action does not).static/testjobs run a single job on themise.toml-pinned toolchain (elixir 1.11.4 / erlang 23.3.4.7) rather than a version matrix: the matrix'sMISE_ELIXIR_VERSION/MISE_ERLANG_VERSIONoverrides don't exist inmise.lock(which only locksmise.toml's pinned version), so it's collapsed to the single mise-pinned toolchain, matching the fix already applied to sibling repos in this migration (e.g.telemetry_metrics_appsignal). The stale top-levelMISE_ELIXIR_VERSION/MISE_ERLANG_VERSIONenv overrides are also dropped, so the publish job's mise-action step resolves the same pinned toolchain.cron_ci.ymland theinterop-tests/check_releasejobs inci.ymlare left untouched — they run in a presetelixir:*container image and never invoked a toolchain-setup action, so there's nothing to migrate there..tool-versionsfile existed in this repo, so nothing to remove there..github/actions.lock.yamlto.gitignoreon its own line, and regenerated that lockfile viaalflow.No new judgment calls beyond the mise.toml versions above, which come straight from the pre-existing
dev-publish.yamlenv vars (the highest version pins already declared in this repo).