I’m stuck on an issue with CompatHelper PRs failing CI and not sure the best way to fix it.
My package has:
julia = "1.9"
Peaks = "0.5, 0.6"
Peaks 0.5 works on Julia 1.9, but Peaks 0.6 requires Julia 1.10+.
In my normal CI testing, Peaks 0.5 is selected for Julia 1.9, and Peaks 0.6 is selected on Julia 1.10+. Everything works fine.
But CompatHelper PRs fail on Julia 1.9 with:
ERROR: Unsatisfiable requirements detected for package Peaks [18e31ff7]:
...
├─restricted to versions 0.6 by an explicit requirement
└─restricted by julia compatibility requirements to versions: 0.1.0-0.5.3 — no versions left
It seems like force_latest_compatible_version=true (auto-enabled for CompatHelper PRs) tries to force Peaks 0.6 even though it’s incompatible with Julia 1.9.
What’s the right approach here?
1 Like
julia-runtest has an option for overriding the value of force_latest_compatible_version. You could set it to false for Julia 1.9, and auto for later Julia versions.
gdalle
January 19, 2026, 6:01pm
3
You can conditionally disable force_latest_compatible_version on older Julia versions by eg:
- uses: julia-actions/julia-runtest@...
with:
# Disable force_latest_compatible_version on Julia 1.9
# Keep it enabled for later Julia versions
force_latest_compatible_version: ${{ matrix.julia-version == '1.9' && 'false' || 'auto' }}
Assuming that your matrix has a variable named julia-version, eg:
matrix:
julia-version:
- '1.9'
- '1.10'
- '1.11'
- '1.12'
You can completely disable force_latest_compatible_version with eg:
- uses: julia-actions/julia-runtest@...
with:
force_latest_compatible_version: false
@gdalle In your case, you can try completely disabling force_latest_compatible_version.
gdalle
January 19, 2026, 9:04pm
6
I just tried it and then rebased the dependabot PR, same issue.
What’s even weirder is that it’s a docs Project update, but it’s the tests that fail.
main ← dependabot/julia/docs/Literate-2.21.0
opened 06:46PM - 09 Jan 26 UTC
Updates the requirements on [Literate](https://github.com/fredrikekre/Literate.j… l) to permit the latest version.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/fredrikekre/Literate.jl/releases">Literate's releases</a>.</em></p>
<blockquote>
<h2>v2.21.0</h2>
<p>See <a href="https://github.com/fredrikekre/Literate.jl/blob/master/CHANGELOG.md"><code>CHANGELOG.md</code></a> for notable changes.</p>
<p>See <a href="https://github.com/fredrikekre/Literate.jl/blob/master/CHANGELOG.md"><code>CHANGELOG.md</code></a> for notable changes.</p>
<p><a href="https://github.com/fredrikekre/Literate.jl/compare/v2.20.1...v2.21.0">Diff since v2.20.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/fredrikekre/Literate.jl/blob/master/CHANGELOG.md">Literate's changelog</a>.</em></p>
<blockquote>
<h2>[v2.21.0] - 2025-11-19</h2>
<h3>Changed</h3>
<ul>
<li>Allow IOCapture version 1. (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/280">#280</a>)</li>
</ul>
<h2>[v2.20.1] - 2024-10-17</h2>
<h3>Fixed</h3>
<ul>
<li>Errors from code evaluation (with <code>continue_on_error = true</code>) are now properly displayed
with <code>showerror</code>. (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/261">#261</a>)</li>
</ul>
<h2>[v2.20.0] - 2024-10-16</h2>
<h3>Added</h3>
<ul>
<li>A new keyword argument configuration <code>continue_on_error::Bool = false</code> has been added
which controls the behavior of code execution errors. By default (<code>continue_on_error = false</code>) execution errors are re-thrown by Literate (as before). If <code>continue_on_error = true</code> is set the error is used as the block result and execution continues with following
blocks. (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/201">#201</a>, <a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/257">#257</a>)</li>
<li>Literate now replaces Documenter-style admonitions when generating notebook output
(<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/259">#259</a>). Concretely,
<pre><code># !!! note
# A note.
<h1>!!! warn "Warning title text"</h1>
<h1>A warning.</h1>
<p></code></pre>
is replaced with</p>
<pre><code># > **Note**
# >
# > A note.
# > **Warning title text**
# >
# > A warning.
</code></pre>
</li>
</ul>
<h2>[v2.19.1] - 2024-09-13</h2>
<h3>Fixed</h3>
<ul>
<li>Set <code>:SOURCE_PATH</code> in the task local storage to the output file when executing code so
that recursive <code>include</code> works as expected. (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/251">#251</a>, <a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/252">#252</a>)</li>
</ul>
<h2>[v2.19.0] - 2024-07-11</h2>
<h3>Changed</h3>
<ul>
<li><code>Literate.markdown</code>, <code>Literate.notebook</code>, and <code>Literate.script</code> are marked as <code>public</code> in
Julia version that support the <code>public</code> keyword. (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/248">#248</a>)</li>
</ul>
<h2>[v2.18.0] - 2024-04-17</h2>
<h3>Added</h3>
<ul>
<li>Literate will now remove
<a href="https://github.com/JuliaDocs/DocumenterInterLinks.jl">DocumenterInterlinks.jl</a></li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/a86869f703f513fe5050db405f3e98e3c7972e0c"><code>a86869f</code></a> Release 2.21.0 (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/281">#281</a>)</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/5b413653ffb3de544b525b82f6ca454c827a2413"><code>5b41365</code></a> Support IOCapture 1.x (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/280">#280</a>)</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/8bde981f3520332e6dd1debf42bff42d8cee6fa8"><code>8bde981</code></a> Bump actions/checkout from 4 to 5 (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/279">#279</a>)</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/da4c3841be3f06910675f13f37b2b0967b2229db"><code>da4c384</code></a> Clarify return values. (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/277">#277</a>)</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/0d308e4185c322092f0593765ae17acc7c8897a0"><code>0d308e4</code></a> Update README links</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/5ea086c75ee65829acd4b548d3dc5aebcd4b0585"><code>5ea086c</code></a> Add formatting commit to blame ignore list</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/5d1b4918b9f7b000aef1a094234c4d03539fa574"><code>5d1b491</code></a> Apply Runic formatting (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/266">#266</a>)</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/51cee5426fe7d74b0b6d94b8d0165296194f92f6"><code>51cee54</code></a> Bump codecov/codecov-action from 4 to 5 (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/265">#265</a>)</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/5c15d8865322a2b4225efa3a6bdf6f95439dcf70"><code>5c15d88</code></a> Set version to 2.20.1.</li>
<li><a href="https://github.com/fredrikekre/Literate.jl/commit/c4ac614a614c646c07e4e3090b0ba4844d3d6fe6"><code>c4ac614</code></a> Use showerror for showing captured errors (<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/261">#261</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/fredrikekre/Literate.jl/compare/v0.1.0...v2.21.0">compare view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>