Skip to content

refactor(ci): stop pinning rebar3 in the Elixir workflows - #197

Merged
hyperpolymath merged 1 commit into
mainfrom
refactor/bofig-unpin-rebar3
Sep 19, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
refactor/bofig-unpin-rebar3

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Why

Both Elixir workflows pass rebar3-version: '3.24.0' to erlef/setup-beam. From the action's source, that input is the only thing that makes it call api.github.com (three pages of erlang/rebar3 releases) and download a binary from GitHub releases — with no input, that code path never runs. The action leaves those calls unauthenticated, which is why the setup step has failed in 4–7 s on every run since the pin landed on 2026-06-24, never reaching dependency installation. This holds for both the reusable wrapper and the legacy local copy.

Timeline (from the workflow's own run history)

When Setup step Where runs failed
to 2026-06-05 passes later, at Run tests
2026-06-24 — PR #107 adds the pin — —
2026-06-27 → today fails in 5 s Set up Elixir

Nothing here needs rebar3

mix installs the rebar it needs on demand. No dependency is rebar-based and mix.exs declares no rebar manager. Removing the input restores exactly the shape both workflows had while they were passing.

The pin was a workaround for a builds.hex.pm TLS key_usage_mismatch; that host's chain is clean today (verified 2026-09-18, valid to 2026-11-08), so the workaround is stale.

Verified

  • actionlint clean on both files; YAML re-parsed.
  • No rebar3-version occurrence remains in .github/workflows/.

Companion change

hyperpolymath/standards now accepts a github-token input for the reusable and warns when the pin is set without one (landed separately), so a consumer that genuinely needs the pin has a working path.

Expectation after landing

Setup goes green and the pipeline advances — it may then stop at Run tests, a separate pre-existing failure that this unblocks the visibility of.

@coderabbitai

coderabbitai Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: c7572b35-80f2-4de5-997a-ead6196f09a6

📥 Commits

Reviewing files that changed from the base of the PR and between 4f8cec0 and 361dcbe.

📒 Files selected for processing (2)
  • .github/workflows/elixir-ci.yml
  • .github/workflows/elixir.yml

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (7)
  • GitHub Check: elixir-ci / Compile + test
  • GitHub Check: governance / Language / package anti-pattern policy
  • GitHub Check: governance / Well-Known (RFC 9116 + RSR)
  • GitHub Check: analyze (actions, none)
  • GitHub Check: analyze (javascript-typescript, none)
  • GitHub Check: Build and test
  • GitHub Check: Empty-linter (invisible characters)
⚠️ CI failures not shown inline (5)

GitHub Actions: Hypatia Security Scan / 0_Hypatia Neurosymbolic Analysis.txt: refactor(ci): stop pinning rebar3 in the Elixir workflows

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Hypatia Security Scan / Hypatia Neurosymbolic Analysis: refactor(ci): stop pinning rebar3 in the Elixir workflows

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Hypatia Security Scan / Hypatia Neurosymbolic Analysis: refactor(ci): stop pinning rebar3 in the Elixir workflows

Conclusion: failure

View job details

##[group]Run github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63
 with:
   sarif_file: hypatia.sarif
   category: hypatia
   checkout_path: /home/runner/work/bofig/bofig
   ***REDACTED_SECRET_ASSIGNMENT***
   matrix: null
   wait-for-processing: true
 env:
   INSTALL_DIR_FOR_OTP: /home/runner/work/_temp/.setup-beam/otp
   INSTALL_DIR_FOR_ELIXIR: /home/runner/work/_temp/.setup-beam/elixir
 ##[endgroup]
 Job run UUID is 59710d74-42ea-4f15-85cf-163b50fcb043.
 ##[error]Path does not exist: hypatia.sarif

GitHub Actions: Deno CI / 1_build.txt: refactor(ci): stop pinning rebar3 in the Elixir workflows

Conclusion: failure

View job details

##[group]Run deno task lint
 �[36;1mdeno task lint�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 �[0m�[1m�[31merror�[0m: deno task couldn't find deno.json(c) or package.json. See https://docs.deno.com/go/config
 ##[error]Process completed with exit code 1.

GitHub Actions: Deno CI / build: refactor(ci): stop pinning rebar3 in the Elixir workflows

Conclusion: failure

View job details

##[group]Run deno task lint
 �[36;1mdeno task lint�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 �[0m�[1m�[31merror�[0m: deno task couldn't find deno.json(c) or package.json. See https://docs.deno.com/go/config
 ##[error]Process completed with exit code 1.
🔇 Additional comments (2)
.github/workflows/elixir-ci.yml (1)

25-25: LGTM!

.github/workflows/elixir.yml (1)

57-57: LGTM!


📝 Summary

Summary by CodeRabbit

  • Chores
    • Updated the Elixir CI environment to use OTP 27.3.4.17.
    • Removed the explicitly specified Rebar3 version so the workflows use the configured default.
    • Elixir 1.18.2 remains unchanged.
    • These updates keep automated build and validation workflows aligned with the current development environment.

Walkthrough

The pull request updates OTP from 27.2.1 to 27.3.4.17 in both Elixir workflows. It also removes the rebar3-version setting. Elixir remains at 1.18.2.

Changes

Elixir workflow configuration

Layer / File(s) Summary
Update Elixir workflow configuration
.github/workflows/elixir-ci.yml, .github/workflows/elixir.yml
Both workflows use OTP 27.3.4.17 and no longer specify rebar3-version. Elixir remains at 1.18.2.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Bug fix

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the main change: removing the rebar3 pin from the Elixir workflows.
Description check ✅ Passed The description directly explains the workflow changes, the cause of the CI failure, the validation performed, and the expected result.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the workflow trail
OTP hops on a newer rail
Rebar3 pins are set aside
Elixir keeps its steady stride
Green checks follow, ears held high

Comment @coderabbitai help to get the list of available commands.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Sep 19, 2026
Both Elixir workflows fail in the setup step because `erlef/setup-beam` runs
`mix local.rebar --force`, which fetches its metadata from builds.hex.pm, and
the Erlang/OTP build they pin (27.2.1, erts-15.2.1) rejects that host's current
Let's Encrypt chain:

  {:tls_alert, {:unsupported_certificate, {key_usage_mismatch, ...}}}
  Could not install Rebar because Mix could not download metadata at
  https://builds.hex.pm/installs/rebar3-1.x.csv.

This is not a rate limit, a proxy problem or a flake. The identical error
appears in every failed run from 2026-06-22 onward — always in 4-7s, always
before any dependency work — including runs from BEFORE the rebar3 pin existed,
so that pin neither caused nor could fix it.

It is OTP-build-specific. chimichanga runs the same action pin against the same
host on Erlang/OTP 27.3.4.17 (erts-15.2.7.13) and the identical step succeeds
today. OTP corrected this certificate validation in a later 27.x patch; bofig
is pinned to an older one.

- otp-version: '27.2.1' -> '27.3.4.17' in both workflows (the build proven
  working against this host today)
- drop `rebar3-version`, which cannot do what it was added for: setup-beam runs
  `mix local.rebar` BEFORE it considers that input, gated only by `install-rebar`
  (default true), so the pin never bypassed the cert error. Leaving it in only
  adds an unauthenticated api.github.com lookup with nothing to show for it.
  No dependency here is rebar-based and mix.exs declares no rebar manager.
@hyperpolymath
hyperpolymath merged commit 2c2d117 into main Sep 19, 2026
34 of 37 checks passed
@hyperpolymath
hyperpolymath deleted the refactor/bofig-unpin-rebar3 branch September 19, 2026 08:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant