Commit graph

534 commits

Author SHA1 Message Date
Vadim Peretokin
c8b74af46d
fix: undoing the game's line wrapping no longer merges list entries (#9836)
#### Brief overview of PR changes/additions

- A line opening with a list marker - `[1364]`, `(3)`, `2.`, `3)` or a
bullet - is now treated as a new line rather than the continuation of
the one above it, so help indexes, shop stock and menus survive the
option being on.
- Only markers that word wrap could not itself produce at the start of a
continuation count. A spaced dash and a parenthesised number over 3
digits are deliberately excluded, since both open genuine wrapped prose.
- 3 new functional tests, including negative controls proving ordinary
prose still rejoins.

#### Motivation for adding to Mudlet

With "undo the game's word wrapping" enabled at 78 columns, a help index
came out with entries glued together - each entry is a sentence that can
end right at the wrap column, so nothing but its marker distinguished it
from a wrapped paragraph.

#### Other info (issues closed, discussion etc)

Also raises the Windows Lua test step to the 3 minute budget Linux and
macOS already have - it was left at 2 and timed out on a slow runner
while the specs were still running. Folded in here rather than split
out, by request.

Follow-up to #9455, which added the option. The check reads the
continuation only, so the last entry of a list can still absorb a
full-width prose line that follows it - left alone deliberately, as
requiring a marker on both lines would stop the first entry of a list
detaching from a header above it.

**Test case:** enable Settings -> Display -> "undo the game's own word
wrapping" at 78, then on a game with a numbered help index (e.g. `help
viking`) confirm each `[NNN]` entry stays on its own line. `ctest -R
UndoServerWrapTest` covers it - 15/15 pass.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Vadim Peretokin <vadim.peretokin@mudlet.org>

---------

Signed-off-by: Vadim Peretokin <vadim.peretokin@mudlet.org>
2026-08-13 11:39:13 +02:00
Mike Conley
6705cadd11
Infra: Add CMake presets for every platform, and one home for AI assistant skills (#9742)
#### Brief overview of PR changes/additions

- Adds `CMakePresets.json` with configure, build and test presets for
macOS, Linux and Windows, including sanitizer and static-analysis
variants. Each is gated on the host system, so a listing only offers
what the current machine can build.
- Consolidates the AI assistant skills into `.agents/skills/`, which
Claude Code, GitHub Copilot and Cursor all read, replacing two copies
that had drifted into contradicting each other.
- Corrects the build documentation: the Windows toolchain is CLANG64
rather than MinGW64, and the previous "no need to specify number of
jobs" advice holds only for Ninja.

#### Motivation for adding to Mudlet

The instructions presented platform-specific build advice as though it
were universal, so following them on the wrong platform produced either
an unbounded parallel build or a toolchain the setup scripts refuse to
run.

#### Other info (issues closed, discussion etc)

`windows-debug` has been exercised on Windows: `CI/setup-windows-sdk.sh`
in an MSYS2 CLANG64 shell, then configure and build both to completion
against Qt 6.11.1 and Clang 22.1.7. `cmake --list-presets` correctly
offered only `windows-debug` there.

Note that `windows-debug` is a Debug configuration, whereas
`CI/build-mudlet-for-windows.sh` builds Release, so the two are not
equivalent.

`.claude/skills` is a symlink to `.agents/skills`, following the
existing pattern used by `CLAUDE.md`, `AGENTS.md` and `.cursorrules`. On
Windows checkouts without `core.symlinks` it lands as a plain file, in
which case Copilot and Cursor still read `.agents/skills` directly.

**Test case:** `cmake --preset macos-debug && cmake --build --preset
macos-debug`, then `ctest --preset macos-debug`. `cmake --list-presets`
should offer only the current platform's presets, and a variant such as
`macos-debug-nosan` should build into `build-macos-debug-nosan/` while
leaving `build/` untouched.

---------

Signed-off-by: Michael Conley <sousesider@gmail.com>
2026-08-12 21:28:13 +02:00
Vadim Peretokin
3c64303e65
Infrastructure: busted specs for the last uncovered UI functions (#9775)
#### Brief overview of PR changes/additions

- 134 new busted specs in `UI_spec.lua` for 24 UI functions that had no
coverage anywhere: label movies, console buffer sizing, main window
size, saved window layout, the application/profile style sheets, toolbar
buttons, command line actions, `setPopup` and `createLabel` into a user
window.
- Effects are read back for real, not just return values: movies through
`getProfileStats().gifs`, buffer limits through observed line trimming,
`setAppStyleSheet` through the `sysAppStyleSheetChange` it raises,
toolbars through `isActive()`, and the user window label by hiding its
parent. No binary fixture is committed - the movie specs assemble a
three-frame GIF89a at run time.
- The button specs install a tiny action package for the block, because
Lua cannot make a push-down button and cannot remove a `tempButton`
again; everything created is taken away in teardown, including the two
layout files that live outside the profile.

#### Motivation for adding to Mudlet

Last of the busted-reachable UI rows in the Lua API test-coverage
program. Nine functions turned out to have no reachable readback at all
and are marked `pending()` with the reason rather than given a spec that
cannot fail.

#### Other info (issues closed, discussion etc)

Bugs found while writing these, all left unspecced and marked
`pending()` instead:
- `Host::setMovie` hands the `QMovie` to the gif tracker before reading
the file, so a refused `setMovie` still counts one in
`getProfileStats()`, and over a working movie it leaves the label
driving a dead one.
- `createLabel` puts the label in the main window and answers `true`
when the parent window name is not a window.
- `showToolBar`/`hideToolBar` only answer to a package's name, never a
packaged toolbar's own name, and move every toolbar in the package at
once; an unmatched name is a silent no-op.
- `setPopup` takes a `luaL_ref` per function command before its size
check and window lookup, so both error paths strand registry references.
- `clearCmdLineSuggestions` gates on `n == 1` where
`addCmdLineSuggestion` gates on `n > 1`, so a second argument silently
retargets the main command line.
- `setConsoleBufferSize` never floors the batch deletion size, so `0`
stops the buffer shrinking at all.

Pre-existing and untouched here: on a reused profile the suite's second
run fails `getMainWindowSize returns a positive width and height` - it
reproduces identically on development.

**Test case:** full busted suite green on a fresh profile (2534
successes, 141 pending, +2.7s in `UI_spec`), and twice on one reused
profile with the same single pre-existing failure development has; 35 of
the 134 new specs (26%) verified to fail when the underlying C++ is
locally broken, and the new `MUDLET_TEST_REQUIRE_WINDOW_RESIZE` gate
proven to fail rather than skip when a resize stops working.

Assisted-by: Claude:claude-opus-5
2026-08-11 08:08:27 +02:00
Vadim Peretokin
8901b59d84
infrastructure: keep QTest's output visible when ctest runs on Windows (#9751)
#### Brief overview of PR changes/additions

- Appends `QT_ASSUME_STDERR_HAS_CONSOLE=1` to the `ENVIRONMENT` test
property of every registered test - 95 of 95 confirmed with `ctest
--show-only=json-v1` - leaving each test's existing `ASAN_OPTIONS`,
`QT_QPA_PLATFORM` and `ENVIRONMENT_MODIFICATION` untouched.
- One `cmake_language(DEFER CALL)` per directory that registers tests,
rather than the variable copy-pasted into a dozen strings, so a test
added later cannot miss it wherever in the file it lands.
- Drops the 8 `QT_FORCE_STDERR_LOGGING` entries from the four workflows.
`shouldLogToStderr()` is `forceStderrLogging() ||
stderrHasConsoleAttached()`, so the test property now covers what CI was
setting by hand, and every one of those steps runs nothing but `ctest`.

#### Motivation for adding to Mudlet

Qt on Windows diverts QTest's output to `OutputDebugString` unless it
believes stderr has a console attached, and an MSYS2 shell gives it
none, so a failing test reported an exit code with no `FAIL!` lines, no
compared values and no totals. Setting it as a test property fixes local
runs and CI from one place instead of two.

#### Other info (issues closed, discussion etc)

**Test case:** full Linux `ctest` suite 95/95 pass; `ctest
--show-only=json-v1` shows all 95 tests carrying the variable with no
other property changed; `ctest -V` shows it in the test process
environment. The Windows behaviour itself is not reproducible on Linux -
it rests on the reporter's 219 vs 12233 byte A/B and on
`QPlainTestLogger::outputMessage`, which only calls `OutputDebugStringA`
when `!QtPrivate::shouldLogToStderr()`.

Closes #9747

Assisted-by: Claude:claude-opus-5
2026-08-10 22:18:08 +02:00
Vadim Peretokin
72023317ed
infrastructure: fix Windows CI losing the per-user luarocks tree (#9752)
#### Brief overview of PR changes/additions
- Windows CI no longer pipes `luarocks path --lr-path/--lr-cpath`
through `cygpath -u`; the raw Windows-form output is exported instead.
- Same 4-line block fixed in all 5 places:
`CI/build-mudlet-for-windows.sh` and both Windows workflows (QTest + Lua
tests steps in each).
- Added a short note at each site saying why cygpath must not be
reintroduced.

#### Motivation for adding to Mudlet
`cygpath -u` does not know `;` delimits a list, so it rewrites only the
leading entry into a POSIX path the native Windows Lua cannot open -
which is exactly the per-user rock tree, so CI silently ran without
those rocks.

#### Other info (issues closed, discussion etc)
Fixes #9750

Verified functionally in a real MSYS2 CLANG64 shell on a Windows 11 VM,
with a canary module installed into `$HOME/.luarocks-CLANG64`:

Raw luarocks output:
```
C:\msys64\home\Bob\.luarocks-CLANG64\share\lua\5.1\?.lua;C:\msys64\home\Bob\...\?\init.lua;C:\msys64\clang64\share\lua\5.1\?.lua;...
```
After `cygpath -u` (what CI did):
```
/home/Bob/.luarocks-CLANG64/share/lua/5.1/?.lua;C:/msys64/home/Bob/...
```
Only element 1 is genuinely converted, and `C:\home` does not exist on
the guest. Running the native `/clang64/bin/lua5.1`:

| `LUA_PATH` value | `require 'zzcanary'` |
| --- | --- |
| raw luarocks output | `true canary-ok` |
| `cygpath -u` output | fails: `no file
'/home/Bob/.luarocks-CLANG64/share/lua/5.1/zzcanary.lua'` |
| `cygpath -u -p` output | worse: `:`-separated, Lua reads the whole
list as one filename |

`LUA_CPATH` behaves the same (the per-user `.dll` is unreachable after
`cygpath -u`, found before it). Also confirmed MSYS2 does not
auto-convert these variables when spawning a native child, so nothing
was masking the defect. `CI/setup-windows-sdk.sh` already prints the raw
form as the recommended Qt Creator environment, so CI now matches its
own setup advice.

Separately, #9749 (the functional tests never receiving
`LUA_PATH`/`LUA_CPATH` at all) is a different root cause and is not
addressed here.

**Test case:** Windows CI green; the QTest and Lua test steps log
`LUA_PATH`/`LUA_CPATH` in `C:\...;C:\...` form and busted/lfs/rex_pcre2
load from the per-user tree.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Vadim Peretokin <vadim.peretokin@mudlet.org>
2026-08-10 07:20:00 +02:00
dependabot[bot]
ff6bd8755a
Infrastructure: Bump lukka/get-cmake from 4.4.0 to 4.4.2 (#9729)
Bumps [lukka/get-cmake](https://github.com/lukka/get-cmake) from 4.4.0
to 4.4.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/lukka/get-cmake/releases">lukka/get-cmake's
releases</a>.</em></p>
<blockquote>
<h2>CMake v4.4.2</h2>
<p>The <code>get-cmake</code> action downloads and caches CMake and
Ninja on your workflows. Versions can be specified using <a
href="https://docs.npmjs.com/about-semantic-versioning">semantic
versioning ranges</a> using <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L13"><code>cmakeVersion</code></a>
and <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L16"><code>ninjaVersion</code></a>
inputs.</p>
<p>Changes:</p>
<ul>
<li><code>latest</code> is now using CMake version <code>v4.4.2</code>,
use this one-liner e.g.:
<code>uses: lukka/get-cmake@latest</code></li>
</ul>
<p>Enjoy!</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fffaaafeea"><code>fffaaaf</code></a>
New CMake version(s): cmake-v4.4.2</li>
<li><a
href="4a7d025fc6"><code>4a7d025</code></a>
New CMake version(s): cmake-v4.4.1</li>
<li><a
href="06fec8f1da"><code>06fec8f</code></a>
Bump actions/checkout from 5 to 7</li>
<li>See full diff in <a
href="https://github.com/lukka/get-cmake/compare/v4.4.0...v4.4.2">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Vadim Peretokin <vperetokin@hey.com>
2026-08-08 13:34:03 +02:00
Vadim Peretokin
964a3aeb7e
infra: tidy up how CI installs Lua (#9734)
#### Brief overview of PR changes/additions
- lua.org is reachable again, so the mirror-fallback pre-build step from
#9732 is removed.
- In its place, `gh-actions-lua`'s build cache is turned on (it was
explicitly off since 2022 with no recorded reason): every run restores
`.lua/` from the actions cache, so lua.org is only contacted when the
cache is cold.
- The `lua:5.1.5:linux:x64` cache entry already exists in the repo and
is touched daily by other workflows; the macOS entries get created on
this PR's own run and the nightly scheduled builds keep all platforms
warm from then on.

#### Motivation for adding to Mudlet
The 35-line shell workaround duplicated the action's build logic in two
files and leaned on undocumented action behaviour. The cache achieves
nearly the same outage protection using the action as designed - the one
remaining exposure is lua.org being down at the same time as a cache
eviction (7 days unused).

#### Other info (issues closed, discussion etc)
Test case: this PR's own CI runs the modified workflow - macOS legs
build Lua once from lua.org and save the cache, the Linux leg restores
the existing daily-used cache entry.

Assisted-by: Claude:claude-fable-5
2026-08-08 09:15:52 +00:00
dependabot[bot]
3e36ed4721
Infrastructure: Bump github/codeql-action from 4.37.3 to 4.37.6 (#9730)
Bumps [github/codeql-action](https://github.com/github/codeql-action)
from 4.37.3 to 4.37.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.6</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>v4.37.5</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>v4.37.4</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action's
changelog</a>.</em></p>
<blockquote>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5595ccaf91"><code>5595cca</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4071">#4071</a>
from github/update-v4.37.6-6a9359a1b</li>
<li><a
href="ec9c75796a"><code>ec9c757</code></a>
Add change note for PR 4070</li>
<li><a
href="45c8742e17"><code>45c8742</code></a>
Update changelog for v4.37.6</li>
<li><a
href="6a9359a1bd"><code>6a9359a</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4070">#4070</a>
from github/mbg/remote-address/change-file-default</li>
<li><a
href="065cdc0394"><code>065cdc0</code></a>
Change <code>DEFAULT_CONFIG_FILE_NAME</code></li>
<li><a
href="f99dd5aeee"><code>f99dd5a</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4066">#4066</a>
from github/dependabot/npm_and_yarn/js-yaml-5.2.2</li>
<li><a
href="1804b211a3"><code>1804b21</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4068">#4068</a>
from github/mergeback/v4.37.5-to-main-d1ba80a1</li>
<li><a
href="3020a2f462"><code>3020a2f</code></a>
Rebuild</li>
<li><a
href="93c3a5a40b"><code>93c3a5a</code></a>
Update changelog and version after v4.37.5</li>
<li><a
href="d1ba80a13d"><code>d1ba80a</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4067">#4067</a>
from github/update-v4.37.5-1cd4d01d5</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/v4.37.3...v4.37.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action&package-manager=github_actions&previous-version=4.37.3&new-version=4.37.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Vadim Peretokin <vperetokin@hey.com>
2026-08-08 08:21:41 +02:00
Vadim Peretokin
0618512c2f
Fix macOS builds sometimes failing their tests for no reason (#9733)
#### Brief overview of PR changes/additions
- The macOS Lua test step's 1-minute timeout now fires mid-suite on a
slow Intel runner: the suite takes 43-60s there (31s on arm64), so a
slow run gets killed while tests are still finishing and the job reads
as a failure.
- The timed-out runs were not hung: in the 2026-08-07 failure,
`mudlet::closeEvent` arrived 0.6 seconds before the 60-second cutoff,
with every spec already passed.
- Raise the step timeout to 3 minutes, matching the Linux leg, in both
paired build workflows.

#### Motivation for adding to Mudlet
Three required-check failures on 2026-08-07 (two on development pushes,
one on a PR) were this timeout, not real breakage. All previous "macOS
timed out" theories pointed at a shutdown hang; the step logs'
timestamps show there is none.

#### Other info (issues closed, discussion etc)
Test case: timestamp analysis of passing vs timed-out runs of `(macOS)
Run Lua tests` (jobs 93008145745 and 92999008773) - the failed run's
shutdown began 59.6s into a 60s budget. No timeout existed before
2026-08-07 because the suite only recently grew past a minute on the
slower runners.

Assisted-by: Claude:claude-fable-5
2026-08-08 08:20:43 +02:00
Vadim Peretokin
24b9128076
fix: unbreak development - cloneExportDocument was renamed to takeExportDocument (#9732)
#### Brief overview of PR changes/additions
- Every CI job on development has been red since 6c67a138 (#9704):
`PackageSelfUninstallTest.cpp:627` calls
`XMLexport::cloneExportDocument()`, which fd822ebb (#9699) had renamed
to `takeExportDocument()` four hours earlier. #9704's checks were green
against the older base and were not re-run before merge, so the
collision only appeared once both were on development.
- The call site is a local `XMLexport` used once and destroyed
immediately after, so handing the document over instead of copying it is
equivalent here.


#### Test case
`ctest -R PackageSelfUninstall` passes, and a full build of all targets
is clean.

Assisted-by: Claude:claude-opus-5
2026-08-07 22:20:33 +00:00
Vadim Peretokin
71f736297b
infrastructure: reject a release tag that does not match APP_VERSION (#9701)
#### Brief overview of PR changes/additions
- Adds `CI/check-release-tag.sh`: APP_VERSION must be three-component,
and a release tag must be exactly `Mudlet-<APP_VERSION>`.
- Wires it into the tag-build validation (`CI/validate_deployment.sh`,
`CI/validate-deployment-for-windows.sh`) so a bad tag fails minutes
after the push, before an asset exists, and into
`create-github-release.yml` as the last gate before anything is
published. The PTB path gets the version-shape half, which nothing
checks on `development` today.
- Covers it with `test/ci/release-tag-version-test.sh`, registered as
`ReleaseTagVersionTest`.

#### Motivation for adding to Mudlet
Tagging `Mudlet-5.0` instead of `Mudlet-5.0.0` would strand the entire
4.22.0 user base with no error anywhere, and it is the one version
mistake CI does not currently catch.

The updater takes the version it offers from the tag, not the binary:
`Release::Release()` strips the `Mudlet-` prefix
(`src/updater/Release.cpp:49`) and `SemVer::getRegExp()` needs three
components (`src/updater/SemVer.cpp:111`), so `"5.0"` is invalid,
`Release::operator<` (`src/updater/Release.cpp:96`) reports the release
as not newer, and `Feed::getUpdates()` returns nothing. The update check
goes on logging `0 update(s) available` - the same line as a week with
no release.

The asymmetry is what makes it dangerous. A stale APP_VERSION with a
correct tag fails loudly, because `CI/prepare-release-assets.sh:62`
rejects assets by tag prefix. A short tag with a correct APP_VERSION
passes everything, because `Mudlet-5.0.0-linux-x64.AppImage.tar`
genuinely does start with `Mudlet-5.0`.

**Why the build scripts and not only the workflow:**
`create-github-release.yml` is `workflow_run`-triggered, so it cannot
fail before the assets are built - by the time it runs, the full matrix
has already finished. The validate scripts run at the start of every tag
build on all three platforms and already parse APP_VERSION, so that is
where the fast failure belongs. The workflow keeps a copy because it
always runs from the default branch, so it still guards a tag placed on
a commit that predates this change.

APP_VERSION is deliberately left at 4.22.0 - bumping it is a release
decision, not a QA fix. This guard is what catches a mismatch when the
bump happens.

#### Other info (issues closed, discussion etc)
From the 5.0 release QA sweep, finding C1, "A two-component release tag
silently disables auto-update for every existing user". Pre-existing
mechanism, no single commit introduced it.

Three claims from an earlier draft did not survive checking and were
corrected: `src/sparkleupdater.mm` installs no
`versionComparatorForUpdater:`, so Sparkle's default component-wise
comparator would still offer `5.0` over `4.22.0` (macOS breaks on the
opposite mismatch instead); the update check does log, it is just
indistinguishable from having nothing to offer; and SemVer does accept a
prerelease component, so rejecting `Mudlet-5.0.0-rc1` follows from
APP_VERSION being unable to carry a suffix, not from the updater.

No video - a CI guard is not visually observable. The shell output below
is the evidence instead.

**Test case:** `ctest -R ReleaseTagVersionTest`, and the guard run
directly:

```
$ CI/check-release-tag.sh 5.0.0 Mudlet-5.0.0
Release tag 'Mudlet-5.0.0' matches APP_VERSION '5.0.0'.
exit=0

$ CI/check-release-tag.sh 5.0.0 Mudlet-5.0
error: release tag 'Mudlet-5.0' does not match APP_VERSION '5.0.0'.
The tag has to be exactly 'Mudlet-5.0.0'.

Publishing under a mismatched tag breaks auto-update, without saying so. [...]
exit=1
```

Replayed over every release tag since 4.18.5, each against the
APP_VERSION at that tag - all accepted, so the guard blocks nothing
Mudlet has actually shipped. Executing the real `Determine release type`
step under GitHub's shell flags fails on `Mudlet-5.0` + `5.0.0` and on a
PTB with APP_VERSION `5.0`, and passes on `Mudlet-5.0.0` + `5.0.0` and
on a normal PTB. The updater trace was confirmed by compiling
`Release.cpp` + `SemVer.cpp` and comparing: tag `Mudlet-5.0.0` gives
`(4.22.0 < release) = true`, tag `Mudlet-5.0` gives `false`.

Assisted-by: Claude:claude-opus-5
2026-08-07 06:14:11 +02:00
Vadim Peretokin
c2d3561c0b
infrastructure: assign milestones with the built-in token, not a PAT (#9696)
#### Brief overview of PR changes/additions

- The add-milestone check now fails on every PR: the Mudlet org forbids
fine-grained PATs with a lifetime over 366 days, so every API call made
with `GH_PAT_UPDATE_PULL_REQUESTS` returns HTTP 403. The old workflow
swallowed this with unchecked `curl -s`; the strict error handling from
#9679 (infrastructure: fix milestone assignment, unbreak the key
sequence tests) surfaced it - first failure 25 minutes after that merge.
- Switches the "Assign PR to milestone" step to the built-in
`GITHUB_TOKEN`, which already works in this workflow (the
milestone-resolving step uses it and succeeded in the failing runs).
`pull_request_target` runs in the base repository, so it has write
access with `issues: write` / `pull-requests: write` granted.
- Removes the dependency on the `GH_PAT_UPDATE_PULL_REQUESTS` secret
entirely, so no PAT needs re-minting and no future expiry can break this
again.

Note: because this runs on `pull_request_target`, the default-branch
copy of the workflow executes - the fix only takes effect after merge,
so the add-milestone check on this PR itself will still fail.

#### Test case

The failing run's own log shows `GITHUB_TOKEN` succeeding at the
milestone-read step while the PAT step 403s, confirming the built-in
token works where the PAT does not.

Assisted-by: Claude:claude-fable-5
2026-08-06 08:14:12 +02:00
Vadim Peretokin
a099a20aee
infrastructure: fix milestone assignment, unbreak the key sequence tests (#9679)
#### Brief overview of PR changes/additions

- `add-milestone` resolves the milestone by exact title first and then
by version prefix, so `5.0.0` finds `5.0.0 next release` again, and
fails loudly instead of assigning nothing. 191 PRs merged since 4.22.0
have no milestone.
- `TKeySequenceEditTest`'s two focus traversal cases no longer fail
under a bare Xvfb: ctest pins the offscreen platform on X11, and a
direct run without a window manager skips with a message instead of
burning the activation timeout twice.

#### Motivation for adding to Mudlet

Both were failing silently. The milestone step matched a title that no
longer exists and exited 0; and the traversal tests were the one red
mark in an otherwise green local suite, which everybody had to re-derive
as environmental.

The milestone lookup is now a script under `.github/scripts/`, covered
by a new `MilestoneResolutionTest` that runs it against a stubbed `gh`.
Re-introducing the original bug makes that test fail.

Worth knowing: `add-milestone` on this PR still assigned nothing,
because `pull_request_target` runs the copy of the workflow that is on
the base branch. It takes effect for pull requests opened after this
merges.

#### Other info (issues closed, discussion etc)

- Closes #9671 - CI: add-milestone silently assigns nothing - metadata
says "4.23.0" but the milestone is titled "4.23.0 next release"
- Closes #9575 - TKeySequenceEditTest: two traversal tests fail under
bare Xvfb (no window manager)

Test case: `ctest -R 'MilestoneResolutionTest|TKeySequenceEditTest'`,
plus `xvfb-run --auto-servernum ctest -R TKeySequenceEditTest` for the
case #9575 is about.

Assisted-by: Claude:claude-opus-5
2026-08-06 06:07:10 +02:00
Vadim Peretokin
e91b8596fd
infrastructure: MMCP effect specs against a scripted chat peer (#9629)
#### Brief overview of PR changes/additions

- Adds `CI/mmcp-peer.py`, a scripted MMCP chat peer: it accepts the call
`mmcp.call()` places, completes the MudMaster handshake, records every
protocol command Mudlet sends and sends chat traffic back when a spec
asks it to. Its ports are ephemeral and reach Mudlet through
`MUDLET_TEST_MMCP_DIR`, so parallel CI jobs and worktrees cannot collide
on MMCP's default 4050.
- Adds 45 MMCP effect specs to `Networking_spec.lua` covering 18 of the
25 `mmcp.*` entry points, in both directions: the bytes Mudlet puts on
the wire (chat, personal chat, emote, group, side channel, snoop, ping,
name change, per-peer flags) and what it does with what arrives
(`sysMMCPChatMessage`, `sysMMCPSideChannelMessage`,
`sysMMCPIncomingSnoopMessage`, snoop permission gating, connection lists
it is asked to dial, commands split across reads or batched into one,
ignore, rename, disconnect).
- Starts the peer in the Linux/macOS Lua test steps of both build
workflows, mirroring the HTTP fixture immediately above it, with a
`MUDLET_TEST_REQUIRE_MMCP_PEER` gate so a fixture that fails to start
fails CI instead of quietly pending.

#### Motivation for adding to Mudlet

The `mmcp.*` family had no effect coverage at all: its behaviour only
exists once a peer is on the other end of a socket, so the existing
specs could only check the offline nil+message contracts. Nothing would
have caught a change to what Mudlet actually sends, or to how it handles
what it is sent.

**Test case:** 1890 successes / 0 failures / 1 pending with the peer
(green twice), 1846 / 0 / 45 pending without it; 11 sabotages of the
MMCP C++ (chat payloads, group field width, flag order, ping reply, side
channel separator and regex, snoop request, unchanged-name short
circuit, partial-command buffering) failed 14 specs and nothing else.

#### Other info (issues closed, discussion etc)

The other 7 entry points cannot be reached at all: `mmcp.accept`,
`mmcp.deny`, `setDoNotDisturb`, `startServer`, `stopServer`, `request`
and `peek` have their registration into the Lua `mmcp` table commented
out in `TLuaInterpreter.cpp`. Without `startServer` Mudlet cannot listen
either, so no incoming call can be staged. That is left as a pending
spec rather than worked around - worth a look on its own, since Mudlet's
pending-call message tells the user to run `mmcp.accept(id)`, which
today does not exist.

The peer holds one call at a time, so effects that need two connected
peers (`setPrivate`'s filtering, `serve`'s forwarding, a non-empty peek
list) are still uncovered. Windows runs the Lua suite but starts
fixtures inside the test shell rather than in a step of their own, so
the block pends there by design.

Assisted-by: Claude:claude-opus-5
2026-08-05 06:50:27 +02:00
Mike Conley
8dd99e4db6
Fix: Sounds going silent when a file fails to load (#9612)
#### Brief overview of PR changes/additions

Follow-up hardening on top of #9569. Two ways a media player could end
up silent while still holding its source, plus the crash and the test
gaps found chasing them.

**A track that fails to load.** Nothing in `TMedia` listened for
`QMediaPlayer::errorOccurred`. A player that was already stopped when
its source failed reports no playback state change — and that signal is
what ends a playback, releases the source and raises `sysMediaFinished`.
The track fell silent holding a file nothing would ever release. The
error is now acted on.

**A track stopped while it is still loading.** Qt already considers an
unstarted player stopped, so `stop()` draws no state change out of one
mid-load, with the same result. This is not a narrow race: on an
asynchronous backend the Linux and Windows runners hit it every time.
`stopMedia()` now ends such a playback itself instead of waiting for a
report that is never coming.

Around those:

- The deferred source release is a single function shared by the stop,
error and teardown paths. Whether the player's own state gets a say
differs between them, so callers pass a `PlaybackEnd`: a stop needs it,
because a restart may be in flight and a player loading its next source
looks identical to a stopped one; a failure must *not* have it, because
a backend can report `PlayingState` for media it has just failed to
load.
- Re-sourcing a player goes through `claimSource()`, `continuePlaying()`
and `releaseSource()`, so the generation bump that tells a pending
release the track has moved on cannot be forgotten at a call site. A
missed bump is what let an earlier revision of #9569 clear the source of
a track that had just been restarted.
- `stopMedia()` empties the playlist, so an explicit stop cannot leave a
loop armed to restart itself from the `EndOfMedia` handler.
- `setupVideo()` failing now releases the source it claimed, and hides
the video widget only under the same `mediaWidget`/`mediaClose` guards
the deferred release uses — previously it could hide a label belonging
to an earlier clip.
- `src/dlgTriggerEditor.cpp` is here for one guard:
`runScheduledCleanReset()` repopulates itself from a `Host` that a
profile teardown has already destroyed. Unrelated to media, but it
crashed the media tests once they started running.

Behaviour worth knowing about when reviewing:

- `sysMediaFinished` now fires for a failed load and for a stop issued
mid-load, where nothing fired before. It is suppressed when the source
has already been released, where it would only have carried an empty
file name and path.
- `purgeMediaCache()` returns `false` when the directory could not be
fully removed, instead of always returning `true`.
- The closing closed caption is suppressed between the passes of a
looping track, and printed by `stopAllMediaPlayers()`, which releases
synchronously.
- `TMedia` gains three read-only diagnostics used by the tests —
`playersHoldingSource()`, `mediaPlayerCount()` and
`playersInPlayingState()`. A deferred release is otherwise unobservable:
`playingMedia()` has already dropped the player, the caption needs
captions enabled, and the video signal needs a widget.

Tests: new slots for a finite `loops=N` track, an explicit stop, an
unplayable source and a reused player. `probeBackend()` measures what
the backend can demonstrate — whether it starts playback at all, decodes
to `EndOfMedia`, orders `EndOfMedia` against `StoppedState`, starts
synchronously, and reports an undecodable file — and each test skips on
the capabilities it needs, printing what was measured.
`QT_MEDIA_BACKEND` is pinned to whatever `main.cpp` ships per platform,
since `QTEST_MAIN` does not run `main.cpp` and the tests were otherwise
exercising Qt's default backend rather than the one users get.

#### Motivation for adding to Mudlet

Both silent-failure cases are real and user-visible. A game sending a
filename Qt cannot decode, or a file gone from the media cache, would
kill the sound and leak the player's source while reporting nothing; and
`stopMusic()` shortly after `playMusic()` would leak the source every
time on Windows and Linux. A script chaining tracks off
`sysMediaFinished` waited forever in both cases.

They share a root cause with #9566: the deferred release could not tell
what the player was doing when its turn came around. The
`claimSource()`/`continuePlaying()`/`releaseSource()` encapsulation is
the durable part — it turns "remember to bump the counter" from a
convention into something the API does for you.

The test work matters as much as the fixes. The #9566 regression guard
was skipping on every CI job, so it was protecting nothing; both bugs
above were caught only once it actually ran.

#### Other info (issues closed, discussion etc)

Follow-up to #9569 / #9566. No issue number of its own.

Testing notes: the full functional suite passes — 66/66 on Linux, and
the media suite is green on the Ubuntu, Windows and both macOS jobs.

Backends differ in what they can demonstrate, so some media tests skip
by design. Under the environment ctest uses, six of the seven skip on
macOS: the `darwin` backend starts playback synchronously and delivers
`EndOfMedia` before `StoppedState`, so it can stage neither the claim
race nor the #9566 ordering, and it does not decode under
`QT_QPA_PLATFORM=offscreen`. Those paths run on the Ubuntu and Windows
FFmpeg builds, which is where both bugs in this PR were caught. Every
skip prints what the backend could not demonstrate and why, so an inert
guard is visible rather than silent.

---------

Signed-off-by: Michael Conley <sousesider@gmail.com>
2026-08-05 06:34:43 +02:00
Vadim Peretokin
936e91d65c
infrastructure: Discord effect specs against a fake Discord IPC server (#9631)
#### Brief overview of PR changes/additions

- `CI/discord-ipc-fixture.py`: a fake Discord IPC server that completes
the genuine discord-rpc handshake, reports a logged-in user, and appends
every frame Mudlet's copy of libdiscord-rpc sends to a JSON-lines
capture file. It is the Python counterpart of `DiscordIpcServerStub`
(#9475).
- Both ubuntu workflows start the fixture before the Lua tests and put
the bundled discord-rpc library on the load path, so ~20 Lua functions
CI could never reach are exercised there for the first time. macOS is
left alone: its test leg runs the unpackaged bundle, which has no
`libdiscord-rpc.dylib` in it (only the installer copies one in), so the
specs pend there as they do on Windows.

#### Motivation for adding to Mudlet

Discord rich presence was the largest block of Lua functions with no
effect coverage at all - CI could not even load the library, so every
one of them was only ever checked for the message it returns when
denied. With a fake Discord client on the other end of the socket, the
payloads themselves become assertable.

#### Other info (issues closed, discussion etc)

Two defects turned up while writing these and are left as `pending`
specs rather than frozen in, each with a follow-up: the six Discord
getters hand the stored text to `lua_pushfstring()` as its format string
(`getDiscordDetail()` on `"Level %d Mage"` returns a garbage number, and
a `%s` would dereference a pointer that was never passed - the text can
come from the server over GMCP, so it is remotely reachable), fixed in
the stacked #9660; and `localDiscordPresence` truncates at 127 bytes
with no regard for UTF-8, putting an invalid frame on the wire, filed as
#9634.

Loading the library in CI makes Networking_spec.lua's 22 Discord
availability-contract rows pend by their own design ("on a machine where
Discord is live these pend"); that denial path stays covered by
`TDiscordModeTest`. Moving those rows into `Discord_spec.lua`, where the
fixture can arrange both states, is a deliberate follow-up and not done
here. The Linux Lua step's `timeout-minutes` goes 1 -> 3 because these
specs wait out real discord-rpc reconnects.

**Test case:** full suite green twice with the fixture (1848 passed / 0
failed / 41 pending, 43 of those new) and once without it (1829 / 0 /
60, every Discord spec pending cleanly, no failures); leak detection
clean under the CI leg's ASan settings; sabotaging six behaviours in
`discord.cpp`/`TLuaInterpreterDiscord.cpp` failed 9 of the 41 active
specs directly (22%), all reverted afterwards.

Assisted-by: Claude:claude-opus-5
2026-08-04 21:53:50 +02:00
Vadim Peretokin
f7da6ca3da
improve: ship every default package as an mpackage (#9626)
#### Brief overview of PR changes/additions

- Every package Mudlet preinstalls now lives in `src/packages/<name>/`,
holding its `config.lua`, `.xml` and the `.mpackage` built from them -
previously they were scattered across `src/` and `src/mudlet-lua/lua/`,
and four had no metadata at all.
- The game loaders (Carrion Fields, Icesus, MorgenGrauen, Medievia) and
the two `mudlet.org` dev packages shipped as bare xml, so the Package
Manager showed them with no version, author or description. They are
packaged now, keeping their existing package names so nothing renames on
upgrade.
- New `DefaultPackagesTest` walks the preinstall table for seven games,
checks every queued path is really compiled in, and installs all 15
archives.

#### Motivation for adding to Mudlet

An mpackage carries Mudlet's metadata and a bare xml cannot. Keeping
each package's sources next to its archive also makes the Lua reviewable
in diffs, which a committed zip on its own is not.

#### Other info

Stacked on #9624, whose check now covers all 15 packages. The IRE mapper
stays an xml because upstream publishes it that way and
`update-3rdparty.yml` overwrites it weekly. Package repository PR
Mudlet/mudlet-package-repository#746 updates the sync paths and must
merge right after this.

#### Test case

`ctest` 66/67 locally (`TKeySequenceEditTest` is the known headless
flake - passes under openbox); `DefaultPackagesTest` 28/28; `python3
CI/check-mpackage-sync.py --base-ref origin/development` clean.

Assisted-by: Claude:claude-opus-5

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-08-04 10:18:48 +02:00
Vadim Peretokin
0b2e2548b2
infra: check mpackage archives match their sources (#9624)
#### Brief overview of PR changes/additions

- Mudlet installs the `.mpackage` archive, not the loose
`config.lua`/`.xml` next to it, so editing a source without re-zipping
silently does nothing. `CI/check-mpackage-sync.py` compares every
archive member against its sibling source file.
- Packages the [package
repository](https://github.com/Mudlet/mudlet-package-repository) syncs
weekly need a version bump for `mpkg` to offer the update, so a content
change that keeps the old version number is now an error too.
- Enforced for base-ui, generic-mapper and gui-drop; `echo`,
`run-lua-code` and `deleteOldProfiles` have loose `.xml` copies that
already drifted from their archives, so those report as warnings rather
than blocking this PR.

#### Test case

`python3 CI/check-mpackage-sync.py --base-ref origin/development` passes
on development; it fails as intended when the base-ui `.xml` is edited
without rebuilding the archive, and when the rebuilt archive keeps
version `1.0.0`.

Assisted-by: Claude:claude-opus-5
2026-08-04 10:18:47 +02:00
Vadim Peretokin
7bb4d14e8b
infrastructure: cut PR CI matrix in half and fix build flakes (#9618)
#### Brief overview of PR changes/additions
- Drop the two compile-only Ubuntu builds (`ubuntu (x86_64)`, `ubuntu /
clang`) from PR CI. Neither produces an artifact, and across the last
200 PRs neither was ever the sole failing job. Both still run on every
push to development and nightly.
- Build on the `xcb-util-cursor` mirror fallback already on development:
keep its sha256 check, add a third mirror, per-mirror retries, and cache
the built result so the network is not touched at all after the first
run.
- Fix the macOS bundle copy race: globbing directories alongside their
contents made CMake emit a `copy_directory` rule that raced the per-file
bundling rules under Ninja.
- Skip the duplicate functional `ctest` run, and skip builds entirely
for docs-only PRs.

#### Motivation for adding to Mudlet
PR builds were queueing for hours - macOS p90 queue was 148 minutes and
22% of commits took over 2h end to end - because 6 jobs per commit
saturated the ~30-slot concurrency ceiling.

#### Other info (issues closed, discussion etc)
PR CI drops from 6 jobs to 4, roughly halving runner time per commit.
All four outputs are unchanged: 64-bit Linux, Intel macOS, ARM macOS,
64-bit Windows.

`ubuntu / clang` has already been removed from the required status
checks on development; the other four required checks are still produced
by this matrix.

Docs-only skipping is deliberately implemented as a `changes` job plus a
job-level `if:` rather than workflow-level `paths-ignore`, because a
skipped workflow leaves required checks pending forever. It costs a ~20s
hop before builds start on every PR.

**Test case:** CI on this PR shows 4 build jobs instead of 6 (`ubuntu /
gcc / lua tests + leak detection`, both macOS, `windows64`) with no `Run
QTest` step on any of them - confirm they go green and the macOS jobs
still upload artifacts to make.mudlet.org. For the docs-only path, push
a commit touching only a `.md` file and confirm the build jobs report
skipped and the PR stays mergeable.

---------

Signed-off-by: Vadim Peretokin <vadim.peretokin@mudlet.org>
Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2026-08-03 12:30:41 +02:00
Vadim Peretokin
9634c394b8
fix: Windows auto-update failing on a release binary with no checksum (#9617)
#### Brief overview of PR changes/additions

- Never publish a release binary without a matching `SHA256SUMS.txt`
entry: merge over the already-published file instead of overwriting it,
set aside assets belonging to a different build than the release tag,
and gate the upload on every binary having an entry that matches its
bytes.
- Say which check failed in the updater - missing checksums,
undownloadable checksums, no entry for this platform, unreadable
checksum file - instead of one message for all of them.
- Add `UpdaterChecksumTest` and `ReleaseChecksumsTest`; both fail if the
fix is reverted.

#### Motivation for adding to Mudlet

Windows auto-update failed with "Could not verify the integrity of the
download", so PTB users could not update at all.
`create-github-release.yml` runs once per platform build workflow and
uploads with `--clobber`, so the 2026-08-02 run regenerated
`SHA256SUMS.txt` from its own subset of sidecars and overwrote the
complete file while the earlier `.exe` stayed published. The updater was
right to refuse it.

#### Other info (issues closed, discussion etc)

Test case: `ctest -R 'UpdaterChecksumTest|ReleaseChecksumsTest'`.

Verified on a Windows 11 VM against a scratch release reproducing the
exact layout: before, the Download Error dialog; after replacing only
`SHA256SUMS.txt` with what the new script produces, the installer
downloaded, verified and staged.

`requireChecksums` is unchanged - nothing accepts an unverified download
that did not before.

Not fixed here: PTBs ship Windows-only when the scheduled Linux/macOS
build is still queued, which is why the 2026-08-03 PTB has one asset.

Assisted-by: Claude:claude-opus-5
2026-08-03 12:30:14 +02:00
Vadim Peretokin
7ca3198bd7 infrastructure: keep the HTTP fixtures byte-exact, harden the Windows step
Windows CI checks out with core.autocrlf on, which turned the fixture's
newline into CRLF and made three specs see 32 bytes where they expect 31.
Also stop the server with a signal msys2 can deliver to a native process,
print its log either way, cap the health check and declare the Python the
fixture server needs.

Assisted-by: Claude:claude-opus-5
2026-08-02 20:12:10 +02:00
Vadim Peretokin
74bd6748e8 infrastructure: run the HTTP fixture server on Windows CI
The 17 HTTP effect specs pended on Windows: only the Linux and macOS jobs
start CI/http-fixture-server.py. Start it in the same msys2 shell that runs
the tests, since a backgrounded process is not guaranteed to survive into
the next step, and require the fixture (and the mock TTS engine) so a
missing one fails the job instead of skipping the specs.

Assisted-by: Claude:claude-opus-5
2026-08-02 20:12:10 +02:00
Vadim Peretokin
d762957bba infrastructure: fix Windows media path assert, spare the media cache
sysMediaStarted carries QUrl::path(), which prefixes a drive-lettered
Windows path with a slash, so the path assertion failed on windows64.
Normalise it before comparing.

purgeMediaCache() empties the whole profile media directory, so the purge
spec now moves anything that is not its own fixture aside and puts it back.

Record what CI answered about macOS: its runners start no player, so the
media gate stays off there.

Assisted-by: Claude:claude-opus-5
2026-08-02 20:12:09 +02:00
Vadim Peretokin
77056411f9 infrastructure: download, HTTP, media and TTS effect tests
Adds effect specs for downloadFile and the HTTP verbs against the local
fixture server, for media playback via a generated WAV, and for the TTS
family driven by Qt's mock engine. The download and HTTP smoke specs move out
of Miscallaneous_spec into Networking_spec, where they are superseded by the
effect specs.

The fixture server grows an /echo endpoint that answers any verb and reports
back the method, headers and body it received, so postHTTP, putHTTP,
deleteHTTP and customHTTP can be checked against what actually went on the
wire, and it sets a header and a cookie on every response so the response
table each event carries can be checked too.

CI gains MUDLET_TEST_REQUIRE_HTTP_FIXTURE and MUDLET_TEST_REQUIRE_MEDIA so a
fixture server or media backend that stops reaching the specs fails the run
rather than quietly skipping the coverage.

Assisted-by: Claude:claude-opus-4-8
2026-08-02 20:12:09 +02:00
dependabot[bot]
dfdcb137f5
Infrastructure: bump github/codeql-action from 4 to 4.37.3 (#9565)
Bumps [github/codeql-action](https://github.com/github/codeql-action)
from 4 to 4.37.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.3</h2>
<p>No user facing changes.</p>
<h2>v4.37.2</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>v4.37.1</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>v4.37.0</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>v4.36.3</h2>
<p>No user facing changes.</p>
<h2>v4.36.2</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>v4.36.1</h2>
<p>No user facing changes.</p>
<h2>v4.36.0</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle
version to 2.19.4. <a
href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a
href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>v4.35.5</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action
are generated to avoid duplication across bundles and reduce the size of
the repository by around 70%. This should have no effect on the runtime
behaviour of the CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
<li>For performance and accuracy reasons, <a
href="https://redirect.github.com/github/roadmap/issues/1158">improved
incremental analysis</a> will now only be enabled on a pull request when
diff-informed analysis is also enabled for that run. If diff-informed
analysis is unavailable (for example, because the PR diff ranges could
not be computed), the action will fall back to a full analysis. <a
href="https://redirect.github.com/github/codeql-action/pull/3791">#3791</a></li>
<li>If multiple inputs are provided for the GitHub-internal
<code>analysis-kinds</code> input, only <code>code-scanning</code> will
be enabled. The <code>analysis-kinds</code> input is experimental, for
GitHub-internal use only, and may change without notice at any time. <a
href="https://redirect.github.com/github/codeql-action/pull/3892">#3892</a></li>
<li>Added an experimental change which, when running a Code Scanning
analysis for a PR with <a
href="https://redirect.github.com/github/roadmap/issues/1158">improved
incremental analysis</a> enabled, prefers CodeQL CLI versions that have
a cached overlay-base database for the configured languages. This speeds
up analysis for a repository when there is not yet a cached overlay-base
database for the latest CLI version. We expect to roll this change out
to everyone in May. <a
href="https://redirect.github.com/github/codeql-action/pull/3880">#3880</a></li>
</ul>
<h2>v4.35.4</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.4">2.25.4</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3881">#3881</a></li>
</ul>
<h2>v4.35.3</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.19.3 and earlier. These versions of
CodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise
Server 3.15, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3837">#3837</a></li>
<li>Configurations for private registries that use Cloudsmith or GCP
OIDC are now accepted. <a
href="https://redirect.github.com/github/codeql-action/pull/3850">#3850</a></li>
<li>Best-effort connection tests for private registries now use
<code>GET</code> requests instead of <code>HEAD</code> for better
compatibility with various registry implementations. For NuGet feeds,
the test is now always performed against the service index. <a
href="https://redirect.github.com/github/codeql-action/pull/3853">#3853</a></li>
<li>Fixed a bug where two diagnostics produced within the same
millisecond could overwrite each other on disk, causing one of them to
be lost. <a
href="https://redirect.github.com/github/codeql-action/pull/3852">#3852</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.3">2.25.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3865">#3865</a></li>
</ul>
<h2>v4.35.2</h2>
<ul>
<li>The undocumented TRAP cache cleanup feature that could be enabled
using the <code>CODEQL_ACTION_CLEANUP_TRAP_CACHES</code> environment
variable is deprecated and will be removed in May 2026. If you are
affected by this, we recommend disabling TRAP caching by passing the
<code>trap-caching: false</code> input to the <code>init</code> Action.
<a
href="https://redirect.github.com/github/codeql-action/pull/3795">#3795</a></li>
<li>The Git version 2.36.0 requirement for improved incremental analysis
now only applies to repositories that contain submodules. <a
href="https://redirect.github.com/github/codeql-action/pull/3789">#3789</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action's
changelog</a>.</em></p>
<blockquote>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e4fba868fa"><code>e4fba86</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4031">#4031</a>
from github/update-v4.37.3-72f6a9da0</li>
<li><a
href="fb50ab5d62"><code>fb50ab5</code></a>
Update changelog for v4.37.3</li>
<li><a
href="72f6a9da0d"><code>72f6a9d</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4030">#4030</a>
from github/mbg/fix/no-proxy</li>
<li><a
href="3b5ee58597"><code>3b5ee58</code></a>
Use default <code>request</code> options instead of
<code>undefined</code></li>
<li><a
href="bfb6be4b5e"><code>bfb6be4</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4028">#4028</a>
from github/mergeback/v4.37.2-to-main-e0647621</li>
<li><a
href="526ab84f98"><code>526ab84</code></a>
Rebuild</li>
<li><a
href="d6217b9b8c"><code>d6217b9</code></a>
Update changelog and version after v4.37.2</li>
<li><a
href="e0647621c2"><code>e064762</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4027">#4027</a>
from github/update-v4.37.2-385bcdc5a</li>
<li><a
href="e0faed8391"><code>e0faed8</code></a>
Add a couple of change notes</li>
<li><a
href="73aad0eaa9"><code>73aad0e</code></a>
Update changelog for v4.37.2</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/v4...v4.37.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action&package-manager=github_actions&previous-version=4&new-version=4.37.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-31 20:22:33 +02:00
Vadim Peretokin
d901e5c935
infrastructure: mock TTS engine and local HTTP server for tests (#9529)
#### Brief overview of PR changes/additions
- Test mode selects Qt's mock text-to-speech engine, making TTS
functions testable headlessly
- CI busted runs get a local fixture HTTP server for download/HTTP specs
- Smoke specs in Miscallaneous_spec.lua that skip cleanly when
mock/server are absent

#### Motivation for adding to Mudlet
Unlocks TTS and HTTP Lua API coverage in CI with no real speech engine
or network egress.

#### Other info (issues closed, discussion etc)
Part of the Lua API test-coverage program (Wave 0). No behavior change
outside MUDLET_TEST_MODE.

**Test case:** run the busted suite with the env vars from the workflow
- TTS and HTTP smoke specs pass (or skip with a message when infra is
absent).

Awaiting build/test by a maintainer; squash-merge with:
Assisted-by: Claude:claude-opus-4-8
(Signed-off-by to be added at squash after testing)
2026-07-29 19:35:56 +02:00
Vadim Peretokin
0d769fbe84
infrastructure: survive xorg.freedesktop.org certificate expiry in CI (#9554)
#### Brief overview of PR changes/additions
- The "(Linux) Build xcb-util-cursor" step now tries the canonical
xorg.freedesktop.org first, then falls back to xcb.freedesktop.org/dist
(valid cert, byte-identical tarball)
- New sha256 integrity check (verified against the xorg-announce release
email) makes any mirror trustworthy and hard-fails corrupt downloads

#### Motivation for adding to Mudlet
xorg.freedesktop.org's TLS cert expired 2026-07-28 11:20 UTC (verified
via openssl: notAfter=Jul 28 11:20:31 2026), deterministically failing
all three Ubuntu CI jobs on every PR since - reruns cannot clear it, and
www/ftp.x.org 301-redirect back to the broken vhost.

#### Other info (issues closed, discussion etc)
Verified across 4 PRs' job logs (identical wget exit 5 = SSL failure)
and reproduced standalone. Canonical-first ordering self-heals once
upstream renews. Open PRs will need a merge-up after this lands.

**Test case:** the exact step body run locally under bash -e: canonical
fails fast, fallback downloads, checksum passes, tarball extracts
(~1.5s); corrupting the file fails the checksum; all-mirrors-down exits
1 with a clear marker.

Awaiting build/test by a maintainer; squash-merge with:
Assisted-by: Claude:claude-fable-5
(Signed-off-by to be added at squash after testing)
2026-07-28 22:58:07 +02:00
Vadim Peretokin
8483c3860e
infrastructure: memory leaks found during CI tests now fail the build (#9481)
#### Brief overview of PR changes/additions
- Leak detection in the Lua-test CI job has been report-only since #8316
(`LSAN_OPTIONS` `exitcode=0`); flip to `exitcode=1` in both
`build-mudlet.yml` and `build-mudlet-pr.yml` so any newly introduced
leak fails the job
- Add two narrow suppressions for OpenSSL 3 provider init noise
(`OSSL_PROVIDER_try_load`, `OSSL_DECODER_do_all_provided`) so the check
stays green when CI's Qt is bumped (these show up from Qt 6.12's
`qtlsbackend_openssl`)

#### Motivation for adding to Mudlet
New memory leaks should break tests instead of scrolling past unnoticed
- CI is currently leak-clean, so enforcement can be switched on at no
cost.

#### Other info (issues closed, discussion etc)
Supersedes and closes #8366 - the leak fixes it bundled have since
landed separately (remaining `TArea` one is in #9464), leaving only this
exit-code flip outstanding. Verified end-to-end against the actual PTB
binary from run 29674747600: a deliberately injected 1337-byte leak
fails the busted suite with the configured exit code, and the current
clean suite passes with `exitcode=1`. Note #8366 only patched
`build-mudlet.yml`; this also covers `build-mudlet-pr.yml`, which PR
builds actually use. One quirk: when LSan fails a run it exits without
flushing stdout, so the busted summary won't print on leak-failing runs
- the leak report on stderr is what to read.

**Test case:** CI on this PR - the "ubuntu / gcc / lua tests + leak
detection" job must pass with the new `exitcode=1` setting.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Vadim Peretokin <vadim.peretokin@mudlet.org>

Signed-off-by: Vadim Peretokin <vadim.peretokin@mudlet.org>
2026-07-19 13:34:20 +02:00
dependabot[bot]
4e550ea02a
Infrastructure: Bump actions/setup-node from 6 to 7 (#9457)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6
to 7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-node/releases">actions/setup-node's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements:</h3>
<ul>
<li>Add cache-primary-key and cache-matched-key as outputs by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1577">actions/setup-node#1577</a></li>
<li>Migrate to ESM and upgrade dependencies by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1574">actions/setup-node#1574</a></li>
</ul>
<h3>Bug fixes:</h3>
<ul>
<li>Remove dummy NODE_AUTH_TOKEN export by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1558">actions/setup-node#1558</a></li>
<li>Only use <code>mirrorToken</code> in <code>getManifest</code> if
it's provided by <a
href="https://github.com/deiga"><code>@​deiga</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1548">actions/setup-node#1548</a></li>
</ul>
<h3>Documentation updates:</h3>
<ul>
<li>Add documentation for publishing to npm with Trusted Publisher
(OIDC) by <a
href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1536">actions/setup-node#1536</a></li>
<li>docs: Update restore-only cache documentation by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1550">actions/setup-node#1550</a></li>
<li>docs: Update caching recommendations to mitigate cache poisoning
risks by <a
href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1567">actions/setup-node#1567</a></li>
</ul>
<h3>Dependency update:</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1569">actions/setup-node#1569</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1536">actions/setup-node#1536</a></li>
<li><a href="https://github.com/deiga"><code>@​deiga</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1548">actions/setup-node#1548</a></li>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1569">actions/setup-node#1569</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6...v7.0.0">https://github.com/actions/setup-node/compare/v6...v7.0.0</a></p>
<h2>v6.5.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update <code>@​actions/cache</code> to 5.1.0 and add security
overrides for undici and fast-xml-parser by <a
href="https://github.com/HarithaVattikuti"><code>@​HarithaVattikuti</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1579">actions/setup-node#1579</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6.4.0...v6.5.0">https://github.com/actions/setup-node/compare/v6.4.0...v6.5.0</a></p>
<h2>v6.4.0</h2>
<h2>What's Changed</h2>
<h3>Dependency updates:</h3>
<ul>
<li>Upgrade <a
href="https://github.com/actions"><code>@​actions</code></a>
dependencies by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1525">actions/setup-node#1525</a></li>
<li>Update Node.js versions in versions.yml and bump package to v6.4.0
by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1533">actions/setup-node#1533</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Copilot"><code>@​Copilot</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1525">actions/setup-node#1525</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6...v6.4.0">https://github.com/actions/setup-node/compare/v6...v6.4.0</a></p>
<h2>v6.3.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements:</h3>
<ul>
<li>Support parsing <code>devEngines</code> field by <a
href="https://github.com/susnux"><code>@​susnux</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1283">actions/setup-node#1283</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8207627860"><code>8207627</code></a>
Migrate to ESM and upgrade dependencies (<a
href="https://redirect.github.com/actions/setup-node/issues/1574">#1574</a>)</li>
<li><a
href="04be95cf35"><code>04be95c</code></a>
Add cache-primary-key and cache-matched-key as outputs (<a
href="https://redirect.github.com/actions/setup-node/issues/1577">#1577</a>)</li>
<li><a
href="7c2c68d20d"><code>7c2c68d</code></a>
docs: Update caching recommendations to mitigate cache poisoning risks
(<a
href="https://redirect.github.com/actions/setup-node/issues/1567">#1567</a>)</li>
<li><a
href="6a61c0375d"><code>6a61c03</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/setup-node/issues/1569">#1569</a>
from jasongin/update-actions-cache-5.1.0</li>
<li><a
href="30eb73b41d"><code>30eb73b</code></a>
Resolve high-severity audit issues</li>
<li><a
href="4e1a87a501"><code>4e1a87a</code></a>
Update dist</li>
<li><a
href="360237f0c0"><code>360237f</code></a>
Strict equality</li>
<li><a
href="4f8aac5beb"><code>4f8aac5</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied</li>
<li><a
href="f4a67bbeca"><code>f4a67bb</code></a>
Only use <code>mirrorToken</code> in <code>getManifest</code> if it's
provided (<a
href="https://redirect.github.com/actions/setup-node/issues/1548">#1548</a>)</li>
<li><a
href="0355742c94"><code>0355742</code></a>
Remove dummy NODE_AUTH_TOKEN export (<a
href="https://redirect.github.com/actions/setup-node/issues/1558">#1558</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-node/compare/v6...v7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-node&package-manager=github_actions&previous-version=6&new-version=7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-17 20:04:44 +02:00
dependabot[bot]
c7ffb1d228
Infrastructure: Bump lukka/get-cmake from 4.3.4 to 4.4.0 (#9456)
Bumps [lukka/get-cmake](https://github.com/lukka/get-cmake) from 4.3.4
to 4.4.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/lukka/get-cmake/releases">lukka/get-cmake's
releases</a>.</em></p>
<blockquote>
<h2>CMake v4.4.0</h2>
<p>The <code>get-cmake</code> action downloads and caches CMake and
Ninja on your workflows. Versions can be specified using <a
href="https://docs.npmjs.com/about-semantic-versioning">semantic
versioning ranges</a> using <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L13"><code>cmakeVersion</code></a>
and <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L16"><code>ninjaVersion</code></a>
inputs.</p>
<p>Changes:</p>
<ul>
<li><code>latest</code> is now using CMake version <code>v4.4.0</code>,
use this one-liner e.g.:
<code>uses: lukka/get-cmake@latest</code></li>
</ul>
<p>Enjoy!</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e6906078eb"><code>e690607</code></a>
New CMake version(s): cmake-v4.4.0</li>
<li><a
href="80ed063af4"><code>80ed063</code></a>
New CMake version(s): cmake-rc-v4.4.0-rc3</li>
<li>See full diff in <a
href="https://github.com/lukka/get-cmake/compare/v4.3.4...v4.4.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=lukka/get-cmake&package-manager=github_actions&previous-version=4.3.4&new-version=4.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-17 20:04:22 +02:00
Vadim Peretokin
3abae79443
infrastructure: merge release-4.22 back into development (#9386)
#### Brief overview of PR changes/additions
- Version bump to 4.22.0 (development shows 4.22.0-dev, next PTBs
identify as 4.22.0-ptb)
- Windows installer signing fix: tag builds now export
ARTIFACT_NAME/ARTIFACT_WINPATHORFILE so the SignPath installer chain
runs on releases (it silently skipped on every SignPath-era release
before 4.22.0), PTB-only artifact/gha_queue steps guarded off tags, and
the signed installer is re-uploaded over the unsigned one on
make.mudlet.org
- next-milestone bumped to 4.23.0

#### Motivation for adding to Mudlet
Standard post-release merge-back per the release checklist; propagates
the release pipeline fixes validated by the 4.22.0 release (both
SignPath requests fired and the shipped installer is signed - verified
against SHA256SUMS).

#### Other info (issues closed, discussion etc)
Squash-merge like #9384. Keep the release-4.22 branch for potential
hotfixes until the next release.

**Test case:** validated live by the Mudlet-4.22.0 release: all jobs
green, "(Windows) Sign installer with SignPath" and the re-upload step
both succeeded, and the published installer's sha256 matches the signed
artifact on mudlet.org and in SHA256SUMS.txt.

---------

Signed-off-by: Vadim Peretokin <vperetokin@hey.com>
2026-07-06 11:16:56 +02:00
Vadim Peretokin
1be06884b1
infrastructure: don't run DangerJS on release PRs (#9375)
#### Brief overview of PR changes/additions
- Skip the DangerJS job when a PR's base is `main` (i.e. release PRs).

#### Motivation for adding to Mudlet
The open release PR (development -> main) has `development` as its head,
so every dev push re-ran DangerJS and stamped a failing/pending `Danger`
required status onto each dev commit. Contributor PRs (base
`development`) are unaffected.

**Test case:** Push to `development` -> danger job is skipped, no
`Danger` status posted. Open a normal PR -> danger runs as before.
2026-07-02 17:00:56 +02:00
dependabot[bot]
344eff7204
Infrastructure: Bump actions/checkout from 6 to 7 (#9348)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to
7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>block checking out fork pr for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the
minor-actions-dependencies group across 1 directory by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2458">actions/checkout#2458</a></li>
<li>Bump flatted from 3.3.1 to 3.4.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2460">actions/checkout#2460</a></li>
<li>Bump js-yaml from 4.1.0 to 4.2.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2461">actions/checkout#2461</a></li>
<li>Bump <code>@​actions/core</code> and
<code>@​actions/tool-cache</code> and Remove uuid by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2459">actions/checkout#2459</a></li>
<li>upgrade module to esm and update dependencies by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2463">actions/checkout#2463</a></li>
<li>Bump the minor-npm-dependencies group across 1 directory with 3
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2462">actions/checkout#2462</a></li>
<li>getting ready for checkout v7 release by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2464">actions/checkout#2464</a></li>
<li>update error wording by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2467">actions/checkout#2467</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6.0.3...v7.0.0">https://github.com/actions/checkout/compare/v6.0.3...v7.0.0</a></p>
<h2>v6.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Update changelog by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2357">actions/checkout#2357</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>Update changelog for v6.0.3 by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2446">actions/checkout#2446</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yaananth"><code>@​yaananth</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.3">https://github.com/actions/checkout/compare/v6...v6.0.3</a></p>
<h2>v6.0.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Add orchestration_id to git user-agent when ACTIONS_ORCHESTRATION_ID
is set by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2355">actions/checkout#2355</a></li>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6.0.1...v6.0.2">https://github.com/actions/checkout/compare/v6.0.1...v6.0.2</a></p>
<h2>v6.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Update all references from v5 and v4 to v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2314">actions/checkout#2314</a></li>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
<li>Clarify v6 README by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2328">actions/checkout#2328</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.1">https://github.com/actions/checkout/compare/v6...v6.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v7.0.0</h2>
<ul>
<li>Block checking out fork PR for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the
minor-actions-dependencies group across 1 directory by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2458">actions/checkout#2458</a></li>
<li>Bump flatted from 3.3.1 to 3.4.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2460">actions/checkout#2460</a></li>
<li>Bump js-yaml from 4.1.0 to 4.2.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2461">actions/checkout#2461</a></li>
<li>Bump <code>@​actions/core</code> and
<code>@​actions/tool-cache</code> and Remove uuid by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2459">actions/checkout#2459</a></li>
<li>upgrade module to esm and update dependencies by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2463">actions/checkout#2463</a></li>
<li>Bump the minor-npm-dependencies group across 1 directory with 3
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2462">actions/checkout#2462</a></li>
</ul>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9c091bb21b"><code>9c091bb</code></a>
update error wording (<a
href="https://redirect.github.com/actions/checkout/issues/2467">#2467</a>)</li>
<li><a
href="1044a6dea9"><code>1044a6d</code></a>
getting ready for checkout v7 release (<a
href="https://redirect.github.com/actions/checkout/issues/2464">#2464</a>)</li>
<li><a
href="f0282184c7"><code>f028218</code></a>
Bump the minor-npm-dependencies group across 1 directory with 3 updates
(<a
href="https://redirect.github.com/actions/checkout/issues/2462">#2462</a>)</li>
<li><a
href="d914b262ff"><code>d914b26</code></a>
upgrade module to esm and update dependencies (<a
href="https://redirect.github.com/actions/checkout/issues/2463">#2463</a>)</li>
<li><a
href="537c7ef99c"><code>537c7ef</code></a>
Bump <code>@​actions/core</code> and <code>@​actions/tool-cache</code>
and Remove uuid (<a
href="https://redirect.github.com/actions/checkout/issues/2459">#2459</a>)</li>
<li><a
href="130a169078"><code>130a169</code></a>
Bump js-yaml from 4.1.0 to 4.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2461">#2461</a>)</li>
<li><a
href="7d09575332"><code>7d09575</code></a>
Bump flatted from 3.3.1 to 3.4.2 (<a
href="https://redirect.github.com/actions/checkout/issues/2460">#2460</a>)</li>
<li><a
href="0f9f3aa320"><code>0f9f3aa</code></a>
Bump actions/publish-immutable-action (<a
href="https://redirect.github.com/actions/checkout/issues/2458">#2458</a>)</li>
<li><a
href="f9e715a95f"><code>f9e715a</code></a>
block checking out fork pr for pull_request_target and workflow_run (<a
href="https://redirect.github.com/actions/checkout/issues/2454">#2454</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/checkout/compare/v6...v7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=6&new-version=7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-27 17:59:12 +02:00
dependabot[bot]
91912a5015
Infrastructure: Bump lukka/get-cmake from 4.3.2 to 4.3.4 (#9347)
Bumps [lukka/get-cmake](https://github.com/lukka/get-cmake) from 4.3.2
to 4.3.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/lukka/get-cmake/releases">lukka/get-cmake's
releases</a>.</em></p>
<blockquote>
<h2>CMake v4.3.3</h2>
<p>The <code>get-cmake</code> action downloads and caches CMake and
Ninja on your workflows. Versions can be specified using <a
href="https://docs.npmjs.com/about-semantic-versioning">semantic
versioning ranges</a> using <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L13"><code>cmakeVersion</code></a>
and <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L16"><code>ninjaVersion</code></a>
inputs.</p>
<p>Changes:</p>
<ul>
<li><code>latest</code> is now using CMake version <code>v4.3.3</code>,
use this one-liner e.g.:
<code>uses: lukka/get-cmake@latest</code></li>
</ul>
<p>Enjoy!</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f5b8fbb4d7"><code>f5b8fbb</code></a>
New CMake version(s): cmake-v4.3.4cmake-rc-v4.4.0-rc2</li>
<li><a
href="033b1fec76"><code>033b1fe</code></a>
New CMake version(s): cmake-rc-v4.4.0-rc1</li>
<li><a
href="6d69ef55f2"><code>6d69ef5</code></a>
Bump peter-evans/create-pull-request from 7 to 8</li>
<li><a
href="591817e96f"><code>591817e</code></a>
New CMake version(s): cmake-v4.3.3</li>
<li><a
href="f7930c8b22"><code>f7930c8</code></a>
fix: upgrade <code>@​actions/cache</code> to v5 to remove url.parse()
deprecation warning</li>
<li>See full diff in <a
href="https://github.com/lukka/get-cmake/compare/v4.3.2...v4.3.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=lukka/get-cmake&package-manager=github_actions&previous-version=4.3.2&new-version=4.3.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-27 17:58:55 +02:00
dependabot[bot]
cfadde6b08
Infrastructure: Bump actions/cache from 5 to 6 (#9363)
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/cache/releases">actions/cache's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update packages, migrate to ESM by <a
href="https://github.com/Samirat"><code>@​Samirat</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1760">actions/cache#1760</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/cache/compare/v5...v6.0.0">https://github.com/actions/cache/compare/v5...v6.0.0</a></p>
<h2>v5.0.5</h2>
<h2>What's Changed</h2>
<ul>
<li>Update ts-http-runtime dependency by <a
href="https://github.com/yacaovsnc"><code>@​yacaovsnc</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1747">actions/cache#1747</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/cache/compare/v5...v5.0.5">https://github.com/actions/cache/compare/v5...v5.0.5</a></p>
<h2>v5.0.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Add release instructions and update maintainer docs by <a
href="https://github.com/Link"><code>@​Link</code></a>- in <a
href="https://redirect.github.com/actions/cache/pull/1696">actions/cache#1696</a></li>
<li>Potential fix for code scanning alert no. 52: Workflow does not
contain permissions by <a
href="https://github.com/Link"><code>@​Link</code></a>- in <a
href="https://redirect.github.com/actions/cache/pull/1697">actions/cache#1697</a></li>
<li>Fix workflow permissions and cleanup workflow names / formatting by
<a href="https://github.com/Link"><code>@​Link</code></a>- in <a
href="https://redirect.github.com/actions/cache/pull/1699">actions/cache#1699</a></li>
<li>docs: Update examples to use the latest version by <a
href="https://github.com/XZTDean"><code>@​XZTDean</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1690">actions/cache#1690</a></li>
<li>Fix proxy integration tests by <a
href="https://github.com/Link"><code>@​Link</code></a>- in <a
href="https://redirect.github.com/actions/cache/pull/1701">actions/cache#1701</a></li>
<li>Fix cache key in examples.md for bun.lock by <a
href="https://github.com/RyPeck"><code>@​RyPeck</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1722">actions/cache#1722</a></li>
<li>Update dependencies &amp; patch security vulnerabilities by <a
href="https://github.com/Link"><code>@​Link</code></a>- in <a
href="https://redirect.github.com/actions/cache/pull/1738">actions/cache#1738</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/XZTDean"><code>@​XZTDean</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/cache/pull/1690">actions/cache#1690</a></li>
<li><a href="https://github.com/RyPeck"><code>@​RyPeck</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/cache/pull/1722">actions/cache#1722</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/cache/compare/v5...v5.0.4">https://github.com/actions/cache/compare/v5...v5.0.4</a></p>
<h2>v5.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump <code>@actions/cache</code> to v5.0.5 (Resolves: <a
href="https://github.com/actions/cache/security/dependabot/33">https://github.com/actions/cache/security/dependabot/33</a>)</li>
<li>Bump <code>@actions/core</code> to v2.0.3</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/cache/compare/v5...v5.0.3">https://github.com/actions/cache/compare/v5...v5.0.3</a></p>
<h2>v.5.0.2</h2>
<h1>v5.0.2</h1>
<h2>What's Changed</h2>
<p>When creating cache entries, 429s returned from the cache service
will not be retried.</p>
<h2>v5.0.1</h2>
<blockquote>
<p>[!IMPORTANT]
<strong><code>actions/cache@v5</code> runs on the Node.js 24 runtime and
requires a minimum Actions Runner version of
<code>2.327.1</code>.</strong></p>
</blockquote>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/cache/blob/main/RELEASES.md">actions/cache's
changelog</a>.</em></p>
<blockquote>
<h1>Releases</h1>
<h2>How to prepare a release</h2>
<blockquote>
<p>[!NOTE]
Relevant for maintainers with write access only.</p>
</blockquote>
<ol>
<li>Switch to a new branch from <code>main</code>.</li>
<li>Run <code>npm test</code> to ensure all tests are passing.</li>
<li>Update the version in <a
href="https://github.com/actions/cache/blob/main/package.json"><code>https://github.com/actions/cache/blob/main/package.json</code></a>.</li>
<li>Run <code>npm run build</code> to update the compiled files.</li>
<li>Update this <a
href="https://github.com/actions/cache/blob/main/RELEASES.md"><code>https://github.com/actions/cache/blob/main/RELEASES.md</code></a>
with the new version and changes in the <code>## Changelog</code>
section.</li>
<li>Run <code>licensed cache</code> to update the license report.</li>
<li>Run <code>licensed status</code> and resolve any warnings by
updating the <a
href="https://github.com/actions/cache/blob/main/.licensed.yml"><code>https://github.com/actions/cache/blob/main/.licensed.yml</code></a>
file with the exceptions.</li>
<li>Commit your changes and push your branch upstream.</li>
<li>Open a pull request against <code>main</code> and get it reviewed
and merged.</li>
<li>Draft a new release <a
href="https://github.com/actions/cache/releases">https://github.com/actions/cache/releases</a>
use the same version number used in <code>package.json</code>
<ol>
<li>Create a new tag with the version number.</li>
<li>Auto generate release notes and update them to match the changes you
made in <code>RELEASES.md</code>.</li>
<li>Toggle the set as the latest release option.</li>
<li>Publish the release.</li>
</ol>
</li>
<li>Navigate to <a
href="https://github.com/actions/cache/actions/workflows/release-new-action-version.yml">https://github.com/actions/cache/actions/workflows/release-new-action-version.yml</a>
<ol>
<li>There should be a workflow run queued with the same version
number.</li>
<li>Approve the run to publish the new version and update the major tags
for this action.</li>
</ol>
</li>
</ol>
<h2>Changelog</h2>
<h3>6.1.0</h3>
<ul>
<li>Bump <code>@actions/cache</code> to v6.1.0 to pick up <a
href="https://redirect.github.com/actions/toolkit/pull/2435">actions/toolkit#2435
Handle cache write error due to read-only token</a></li>
<li>Switch redundant &quot;Cache save failed&quot; warning to debug log
in save-only</li>
</ul>
<h3>6.0.0</h3>
<ul>
<li>Updated <code>@actions/cache</code> to ^6.0.1,
<code>@actions/core</code> to ^3.0.1, <code>@actions/exec</code> to
^3.0.0, <code>@actions/io</code> to ^3.0.2</li>
<li>Migrated to ESM module system</li>
<li>Upgraded Jest to v30 and test infrastructure to be ESM
compatible</li>
</ul>
<h3>5.0.4</h3>
<ul>
<li>Bump <code>minimatch</code> to v3.1.5 (fixes ReDoS via globstar
patterns)</li>
<li>Bump <code>undici</code> to v6.24.1 (WebSocket decompression bomb
protection, header validation fixes)</li>
<li>Bump <code>fast-xml-parser</code> to v5.5.6</li>
</ul>
<h3>5.0.3</h3>
<ul>
<li>Bump <code>@actions/cache</code> to v5.0.5 (Resolves: <a
href="https://github.com/actions/cache/security/dependabot/33">https://github.com/actions/cache/security/dependabot/33</a>)</li>
<li>Bump <code>@actions/core</code> to v2.0.3</li>
</ul>
<h3>5.0.2</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2c8a9bd745"><code>2c8a9bd</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/cache/issues/1760">#1760</a>
from actions/samirat/esm_migration_and_package_update</li>
<li><a
href="e9b91fdc3f"><code>e9b91fd</code></a>
Prettier fixes</li>
<li><a
href="e4884b8ff7"><code>e4884b8</code></a>
Rebuild dist</li>
<li><a
href="10baf0191a"><code>10baf01</code></a>
Fixed licenses</li>
<li><a
href="e39b386c90"><code>e39b386</code></a>
Fix test mock return order</li>
<li><a
href="b692820337"><code>b692820</code></a>
PR feedback</li>
<li><a
href="60749128a4"><code>6074912</code></a>
Rebuild dist bundles as ESM to match type:module</li>
<li><a
href="5a912e8b4a"><code>5a912e8</code></a>
Fix lint and jest issues</li>
<li><a
href="b9bf592b98"><code>b9bf592</code></a>
Update documentation for v6 release</li>
<li><a
href="80f777761d"><code>80f7777</code></a>
Update packages, migrate to ESM</li>
<li>See full diff in <a
href="https://github.com/actions/cache/compare/v5...v6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/cache&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-27 15:45:40 +02:00
Vadim Peretokin
c8a78bf396
infrastructure: bump next-milestone to 4.22.0 (#9325)
4.21.0 is released, so new PRs should be assigned to the 4.22.0
milestone.

Routine post-release metadata bump.

Assisted-by: Claude:claude-opus-4-8

Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2026-06-20 12:38:19 +02:00
Vadim Peretokin
a08395bacb
infrastructure: fix translation and 3rdparty update workflows (#9310)
#### Brief overview of PR changes/additions
- Drop stale `3rdparty/dblsqd/dblsqd` lupdate paths from the translation
and en_US plural workflows (dblsqd is now vendored into `src/updater/`,
scanned via `./src/`)
- Remove the dead `dblsqd` submodule entry from the `update-3rdparty`
matrix
- `git fetch` the target branch before checkout in the
`submodule-branch` step so the `lcf` update works from a detached
submodule checkout

#### Motivation for adding to Mudlet
The weekly translation and 3rdparty update automations were failing
because they still referenced dblsqd as a submodule; this unblocks them
ahead of the 4.21.0 release.

#### Other info (issues closed, discussion etc)
Surfaced while running the release checklist for 4.21.0.

**Test case:** Trigger the "Update texts for translators", "Update
plural american english translations", and "Update 3rdparty sources"
workflows via workflow_dispatch on this branch - all jobs (including
lcf) complete without the previous `3rdparty/dblsqd` / pathspec errors.

Signed-off-by: Vadim Peretokin <vperetokin@hey.com>
2026-05-31 08:44:53 +02:00
Vadim Peretokin
e2f59dca0b
infrastructure: fix PTB's from being built again when no new commits happened (#9309)
<!-- Keep the title short & concise so anyone non-technical can
understand it,
     the title appears in PTB changelogs -->
#### Brief overview of PR changes/additions
The duplicate-PTB check ran 'gh release list' with no GH_TOKEN and
swallowed the auth error via 2>/dev/null, so it always fell through and
built a duplicate PTB even when no new commits had landed.
#### Motivation for adding to Mudlet
Don't rebuild PTBs when no new commits hav elanded.
#### Other info (issues closed, discussion etc)

---------

Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2026-05-31 08:22:10 +02:00
dependabot[bot]
3d12e4ad82
Infrastructure: Bump lukka/get-cmake from 4.3.1 to 4.3.2 (#9221)
Bumps [lukka/get-cmake](https://github.com/lukka/get-cmake) from 4.3.1
to 4.3.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/lukka/get-cmake/releases">lukka/get-cmake's
releases</a>.</em></p>
<blockquote>
<h2>CMake v4.3.2</h2>
<p>The <code>get-cmake</code> action downloads and caches CMake and
Ninja on your workflows. Versions can be specified using <a
href="https://docs.npmjs.com/about-semantic-versioning">semantic
versioning ranges</a> using <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L13"><code>cmakeVersion</code></a>
and <a
href="https://github.com/lukka/get-cmake/blob/latest/action.yml#L16"><code>ninjaVersion</code></a>
inputs.</p>
<p>Changes:</p>
<ul>
<li><code>latest</code> is now using CMake version <code>v4.3.2</code>,
use this one-liner e.g.:
<code>uses: lukka/get-cmake@latest</code></li>
</ul>
<p>Enjoy!</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7bfc9baacb"><code>7bfc9ba</code></a>
New CMake version(s): cmake-v4.3.2</li>
<li>See full diff in <a
href="https://github.com/lukka/get-cmake/compare/v4.3.1...v4.3.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=lukka/get-cmake&package-manager=github_actions&previous-version=4.3.1&new-version=4.3.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 08:16:20 +00:00
dependabot[bot]
748e124d65
Infrastructure: Bump leafo/gh-actions-lua from 12 to 13 (#9222)
Bumps [leafo/gh-actions-lua](https://github.com/leafo/gh-actions-lua)
from 12 to 13.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/leafo/gh-actions-lua/releases">leafo/gh-actions-lua's
releases</a>.</em></p>
<blockquote>
<h2>v13</h2>
<h2>What's new in v13</h2>
<h3>Lua 5.5 support</h3>
<ul>
<li>New <code>5.5</code> version alias pointing to Lua 5.5.0 (released
2025-12-15)</li>
<li>Default <code>luaVersion</code> is now <code>5.5</code> (previously
<code>5.4</code>)</li>
</ul>
<h3>ESM migration</h3>
<p><code>main.js</code> has been converted to ES modules to match the
latest <code>@actions/*</code> toolkit packages, which went ESM-only in
their most recent majors. No user-facing behavior change — same action
API, same inputs.</p>
<h3>Dependency upgrades</h3>
<table>
<thead>
<tr>
<th>Package</th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@actions/core</code></td>
<td>1.11.1</td>
<td>3.0.1</td>
</tr>
<tr>
<td><code>@actions/cache</code></td>
<td>4.1.0</td>
<td>6.0.0</td>
</tr>
<tr>
<td><code>@actions/exec</code></td>
<td>1.1.1</td>
<td>3.0.0</td>
</tr>
<tr>
<td><code>@actions/io</code></td>
<td>1.1.3</td>
<td>3.0.2</td>
</tr>
<tr>
<td><code>@actions/tool-cache</code></td>
<td>2.0.2</td>
<td>4.0.0</td>
</tr>
</tbody>
</table>
<h3>Release tarballs refreshed</h3>
<ul>
<li><strong>New</strong>: <code>5.5.0.tar.gz</code></li>
<li><code>5.3.6.tar.gz</code> replaces <code>5.3.5.tar.gz</code></li>
<li><code>5.4.8.tar.gz</code> replaces <code>5.4.1.tar.gz</code></li>
</ul>
<h3>README / example updates</h3>
<p>The example snippets now use:</p>
<ul>
<li><code>actions/checkout@v6</code> (was <code>@master</code> /
<code>@v4</code>) — silences the Node.js 20 deprecation warning</li>
<li><code>step-security/msvc-dev-cmd@v1</code> in place of
<code>ilammy/msvc-dev-cmd@v1</code> — same input surface, runs on
Node.js 24, actively maintained</li>
</ul>
<p><strong>Full changelog</strong>: <a
href="https://github.com/leafo/gh-actions-lua/compare/v12...v13">https://github.com/leafo/gh-actions-lua/compare/v12...v13</a></p>
<h2>v13.0.0</h2>
<h2>What's new in v13</h2>
<h3>Lua 5.5 support</h3>
<ul>
<li>New <code>5.5</code> version alias pointing to Lua 5.5.0 (released
2025-12-15)</li>
<li>Default <code>luaVersion</code> is now <code>5.5</code> (previously
<code>5.4</code>)</li>
</ul>
<h3>ESM migration</h3>
<p><code>main.js</code> has been converted to ES modules to match the
latest <code>@actions/*</code> toolkit packages, which went ESM-only in
their most recent majors. No user-facing behavior change — same action
API, same inputs.</p>
<h3>Dependency upgrades</h3>
<table>
<thead>
<tr>
<th>Package</th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@actions/core</code></td>
<td>1.11.1</td>
<td>3.0.1</td>
</tr>
<tr>
<td><code>@actions/cache</code></td>
<td>4.1.0</td>
<td>6.0.0</td>
</tr>
<tr>
<td><code>@actions/exec</code></td>
<td>1.1.1</td>
<td>3.0.0</td>
</tr>
<tr>
<td><code>@actions/io</code></td>
<td>1.1.3</td>
<td>3.0.2</td>
</tr>
<tr>
<td><code>@actions/tool-cache</code></td>
<td>2.0.2</td>
<td>4.0.0</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6919171ccf"><code>6919171</code></a>
update readme for v13</li>
<li><a
href="ae535d3843"><code>ae535d3</code></a>
try changing ilammy/msvc-dev-cmd@v1 to
step-security/msvc-dev-cmd@v1</li>
<li><a
href="9a00dba069"><code>9a00dba</code></a>
update vendored deps</li>
<li><a
href="3f7a3edcf6"><code>3f7a3ed</code></a>
bump some stuff to get rid of warnings</li>
<li><a
href="4e7e30f2d8"><code>4e7e30f</code></a>
update publish versions</li>
<li><a
href="fd32011ab8"><code>fd32011</code></a>
lua 5.5 alias, make default version lua 5.5</li>
<li>See full diff in <a
href="https://github.com/leafo/gh-actions-lua/compare/v12...v13">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=leafo/gh-actions-lua&package-manager=github_actions&previous-version=12&new-version=13)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 10:15:53 +02:00
Jones Melton
9d674e6e7c
add lpeg parsing library (#9212)
Completes the addition of the
[lpeg](https://www.inf.puc-rio.br/~roberto/lpeg/) parsing library to
mudlet on all targets.

It had previously been [partially
added](ea57a6dc1c/src/mudlet-lua/lua/LuaGlobal.lua (L6)),
and may be available in windows builds already.

Muds involve a lot of text processing, but are not necessarily regular
languages and so cannot be fully handled by regular expressions alone.
LPEG is an extremely sophisticated parsing tool; it is small,
performant, influential, and still represents the state of the art in
parsing expression grammars.

LPEG is as close as anything gets to being in the standard library of
lua. It was written by the same author as lua, is hosted and maintained
by PUC RIO, its official docs are right there alongside the main lua
docs. It is a blessed lib and can be considered extremely stable.

This PR to mudlet depends on [this
PR](https://github.com/Mudlet/installers/pull/142) to the installers
repo, to ship the binary for linux and macos. As far as I can tell it is
already included for windows.
2026-04-23 21:14:41 +02:00
dependabot[bot]
0eb93656b2
Infrastructure: Bump carlosperate/download-file-action from 2.0.2 to 2.0.3 (#9203)
Bumps
[carlosperate/download-file-action](https://github.com/carlosperate/download-file-action)
from 2.0.2 to 2.0.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/carlosperate/download-file-action/releases">carlosperate/download-file-action's
releases</a>.</em></p>
<blockquote>
<h2>v2.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Updated Action to node v24 to remove warnings (<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/45">#45</a>
thanks <a
href="https://github.com/pzhlkj6612"><code>@​pzhlkj6612</code></a>!)</li>
<li>Fixed issue detecting file type of files without extensions.</li>
<li>Updated dependencies (<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/29">#29</a>
<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/39">#39</a>
<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/42">#42</a>
<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/43">#43</a>
<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/44">#44</a>
<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/41">#41</a>
<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/45">#45</a>)</li>
<li>Improved tests</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/carlosperate/download-file-action/compare/v2.0.2...v2.0.3">https://github.com/carlosperate/download-file-action/compare/v2.0.2...v2.0.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7021d227a4"><code>7021d22</code></a>
action: Uprev to 2.0.3.</li>
<li><a
href="8fd3cac6f0"><code>8fd3cac</code></a>
ci: Update checkout GH Action version.</li>
<li><a
href="418b1d19c4"><code>418b1d1</code></a>
tests: Fix PNG_MAGIC buffer for file-type v21.3.3+</li>
<li><a
href="71a61aa374"><code>71a61aa</code></a>
deps: Fix &quot;file-type&quot; version to avoid issues with tests (<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/46">#46</a>)</li>
<li><a
href="18ca61c0fb"><code>18ca61c</code></a>
project: Action default node to v24 &amp; update some dev dependencies
(<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/45">#45</a>)</li>
<li><a
href="8e3e8d0841"><code>8e3e8d0</code></a>
deps: Bump file-type from 18.0.0 to 21.3.2 (<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/41">#41</a>)</li>
<li><a
href="d6965a0e32"><code>d6965a0</code></a>
tests: Add basic actions tests calling the packaged dist/index.js.</li>
<li><a
href="833b0a1de6"><code>833b0a1</code></a>
action: Convert download-mod to TypeScript ESM for file-type dep.</li>
<li><a
href="c15a354a72"><code>c15a354</code></a>
action: Update download-mod header comment with info about changes.</li>
<li><a
href="04bc8a7cfc"><code>04bc8a7</code></a>
deps: Bump picomatch from 2.3.1 to 2.3.2 (<a
href="https://redirect.github.com/carlosperate/download-file-action/issues/44">#44</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/carlosperate/download-file-action/compare/v2.0.2...v2.0.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=carlosperate/download-file-action&package-manager=github_actions&previous-version=2.0.2&new-version=2.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-18 09:50:45 +02:00
Vadim Peretokin
fbc61aace4
infrastructure: fix partial PTB releases not triggering when push build exists at same SHA (#9192)
#### Brief overview of PR changes/additions
Add `event` filter to the workflow run query in
`create-github-release.yml` so scheduled PTB builds only match other
scheduled builds, not push builds at the same SHA

#### Motivation for adding to Mudlet
When a push build and a scheduled build exist at the same commit, the
release workflow could find the push build (which has no release
metadata) instead of the failed scheduled build, silently skipping the
release and preventing the partial-PTB logic from #9163 from ever
kicking in.

#### Other info (issues closed, discussion etc)
On 2026-04-15 no PTB was created despite only macOS failing a flaky test
- the Windows and Linux builds succeeded but no release was made because
the platform check matched a push build from #9191 instead of the failed
scheduled build.

**Test case:** Next scheduled PTB build where one platform fails should
still create a partial release with the successful platforms' assets.

Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2026-04-17 08:09:05 +02:00
Vadim Peretokin
5ec6aa71ab
Infrastructure: fix Windows SHA256 missing from PTB releases (#9191)
<!-- Keep the title short & concise so anyone non-technical can
understand it,
     the title appears in PTB changelogs -->
#### Brief overview of PR changes/additions
fix Windows SHA256 missing from PTB releases
#### Motivation for adding to Mudlet
necessary for updates' download to have validated integrity
#### Other info (issues closed, discussion etc)
download-artifact@v8 doesn't create a subdirectory when only one
artifact matches the pattern. The Windows build produces a single
release-asset-* artifact, so its files end up flat in assets/ instead of
assets/release-asset-Windows-X64/. The glob assets/*/*.sha256 missed it.
Use find instead, matching the pattern already used elsewhere in the
workflow.
2026-04-14 21:38:53 +02:00
Vadim Peretokin
e83a08a5b9
infrastructure: allow partial PTB releases when not all platforms succeed (#9163)
#### Brief overview of PR changes/additions
Release workflow no longer blocks PTB creation when one platform build
fails - proceeds with available assets and updates when remaining
platforms complete.

#### Motivation for adding to Mudlet
PTB releases were missing Windows builds because the gate required all
platforms to succeed, contradicting the asset verification which already
tolerates partial PTBs.

#### Other info (issues closed, discussion etc)
None

**Test case:** Trigger a PTB where one platform fails; verify the
release is created with available assets and updated when the remaining
platform succeeds.
2026-04-13 18:56:01 +02:00
Vadim Peretokin
289a86b9aa
infrastructure: migrate undo/redo tests to QTest framework (#8867)
#### Brief overview of PR changes/additions
Consolidates the procedural undo/redo test suite into QTest framework so
all C++ tests use a single test runner integrated with ctest/CI (-1373
lines net).

#### Motivation for adding to Mudlet
Standardizes all C++ tests on QTest framework for consistency.

#### Other info (issues closed, discussion etc)
None

**Test case:** Run `ctest -R dlgTriggerEditorUndoRedoTest
--output-on-failure` from build directory - all 14 test categories
should pass.

---------

Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
Co-authored-by: Zooka <136661366+ZookaOnGit@users.noreply.github.com>
2026-04-13 18:54:40 +02:00
Vadim Peretokin
a167029f81
fix: changelog rendering in PTB update dialog (#9182)
#### Brief overview of PR changes/additions
Fix the in-app PTB changelog dialog which was showing garbled text
(random commit hashes, file paths, broken formatting) by converting
unsupported `<details>` HTML to plain markdown and fixing several
changelog generation bugs.

#### Motivation for adding to Mudlet
The PTB changelog was unreadable for users - Qt's markdown renderer
can't handle `<details>/<summary>` HTML tags, causing backtick content
to leak out as random strings. Additionally, the markdown changelog
builder was incorrectly HTML-escaping text, and empty changelog sections
appeared when consecutive PTBs had no changes.

#### Other info (issues closed, discussion etc)
2026-04-12 17:57:11 +02:00
Vadim Peretokin
4728bf9c07
infrastructure: stop deleting and recreating GitHub releases on every build (#9176)
#### Brief overview of PR changes/additions
Both build workflows (Linux/macOS and Windows) independently trigger the
release workflow, causing the same release to be deleted and recreated
twice per commit. Now the workflow checks if the release already exists
and uploads assets to it instead of destroying and recreating it.

#### Motivation for adding to Mudlet
Eliminates notification spam to repository watchers.

#### Other info (issues closed, discussion etc)
N/A

**Test case:** Wait for the next nightly PTB build and verify only one
"New release published" notification appears in the activity feed
instead of two delete/create cycles.

<img width="1556" height="1570" alt="Screenshot from 2026-04-10
18-04-03"
src="https://github.com/user-attachments/assets/eea90d57-f56a-45c4-b678-7b5b9499edfe"
/>
2026-04-12 17:52:30 +02:00
dependabot[bot]
994d138d62
Infrastructure: Bump actions/download-artifact from 4 to 8 (#9179)
Bumps
[actions/download-artifact](https://github.com/actions/download-artifact)
from 4 to 8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/download-artifact/releases">actions/download-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v8.0.0</h2>
<h2>v8 - What's new</h2>
<blockquote>
<p>[!IMPORTANT]
actions/download-artifact@v8 has been migrated to an ESM module. This
should be transparent to the caller but forks might need to make
significant changes.</p>
</blockquote>
<blockquote>
<p>[!IMPORTANT]
Hash mismatches will now error by default. Users can override this
behavior with a setting change (see below).</p>
</blockquote>
<h3>Direct downloads</h3>
<p>To support direct uploads in <code>actions/upload-artifact</code>,
the action will no longer attempt to unzip all downloaded files.
Instead, the action checks the <code>Content-Type</code> header ahead of
unzipping and skips non-zipped files. Callers wishing to download a
zipped file as-is can also set the new <code>skip-decompress</code>
parameter to <code>true</code>.</p>
<h3>Enforced checks (breaking)</h3>
<p>A previous release introduced digest checks on the download. If a
download hash didn't match the expected hash from the server, the action
would log a warning. Callers can now configure the behavior on mismatch
with the <code>digest-mismatch</code> parameter. To be secure by
default, we are now defaulting the behavior to <code>error</code> which
will fail the workflow run.</p>
<h3>ESM</h3>
<p>To support new versions of the @actions/* packages, we've upgraded
the package to ESM.</p>
<h2>What's Changed</h2>
<ul>
<li>Don't attempt to un-zip non-zipped downloads by <a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a> in
<a
href="https://redirect.github.com/actions/download-artifact/pull/460">actions/download-artifact#460</a></li>
<li>Add a setting to specify what to do on hash mismatch and default it
to <code>error</code> by <a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a> in
<a
href="https://redirect.github.com/actions/download-artifact/pull/461">actions/download-artifact#461</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/download-artifact/compare/v7...v8.0.0">https://github.com/actions/download-artifact/compare/v7...v8.0.0</a></p>
<h2>v7.0.0</h2>
<h2>v7 - What's new</h2>
<blockquote>
<p>[!IMPORTANT]
actions/download-artifact@v7 now runs on Node.js 24 (<code>runs.using:
node24</code>) and requires a minimum Actions Runner version of 2.327.1.
If you are using self-hosted runners, ensure they are updated before
upgrading.</p>
</blockquote>
<h3>Node.js 24</h3>
<p>This release updates the runtime to Node.js 24. v6 had preliminary
support for Node 24, however this action was by default still running on
Node.js 20. Now this action by default will run on Node.js 24.</p>
<h2>What's Changed</h2>
<ul>
<li>Update GHES guidance to include reference to Node 20 version by <a
href="https://github.com/patrikpolyak"><code>@​patrikpolyak</code></a>
in <a
href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li>
<li>Download Artifact Node24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li>
<li>fix: update <code>@​actions/artifact</code> to fix Node.js 24
punycode deprecation by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/451">actions/download-artifact#451</a></li>
<li>prepare release v7.0.0 for Node.js 24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/452">actions/download-artifact#452</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/patrikpolyak"><code>@​patrikpolyak</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li>
<li><a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0">https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0</a></p>
<h2>v6.0.0</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3e5f45b2cf"><code>3e5f45b</code></a>
Add regression tests for CJK characters (<a
href="https://redirect.github.com/actions/download-artifact/issues/471">#471</a>)</li>
<li><a
href="e6d03f6737"><code>e6d03f6</code></a>
Add a regression test for artifact name + content-type mismatches (<a
href="https://redirect.github.com/actions/download-artifact/issues/472">#472</a>)</li>
<li><a
href="70fc10c6e5"><code>70fc10c</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/461">#461</a>
from actions/danwkennedy/digest-mismatch-behavior</li>
<li><a
href="f258da9a50"><code>f258da9</code></a>
Add change docs</li>
<li><a
href="ccc058e5fb"><code>ccc058e</code></a>
Fix linting issues</li>
<li><a
href="bd7976ba57"><code>bd7976b</code></a>
Add a setting to specify what to do on hash mismatch and default it to
<code>error</code></li>
<li><a
href="ac21fcf45e"><code>ac21fcf</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/460">#460</a>
from actions/danwkennedy/download-no-unzip</li>
<li><a
href="15999bff51"><code>15999bf</code></a>
Add note about package bumps</li>
<li><a
href="974686ed50"><code>974686e</code></a>
Bump the version to <code>v8</code> and add release notes</li>
<li><a
href="fbe48b1d27"><code>fbe48b1</code></a>
Update test names to make it clearer what they do</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/download-artifact/compare/v4...v8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/download-artifact&package-manager=github_actions&previous-version=4&new-version=8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-10 17:26:17 +00:00
dependabot[bot]
91e7405519
Infrastructure: Bump actions/github-script from 7 to 9 (#9181)
Bumps [actions/github-script](https://github.com/actions/github-script)
from 7 to 9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/github-script/releases">actions/github-script's
releases</a>.</em></p>
<blockquote>
<h2>v9.0.0</h2>
<p><strong>New features:</strong></p>
<ul>
<li><strong><code>getOctokit</code> factory function</strong> —
Available directly in the script context. Create additional
authenticated Octokit clients with different tokens for multi-token
workflows, GitHub App tokens, and cross-org access. See <a
href="https://github.com/actions/github-script#creating-additional-clients-with-getoctokit">Creating
additional clients with <code>getOctokit</code></a> for details and
examples.</li>
<li><strong>Orchestration ID in user-agent</strong> — The
<code>ACTIONS_ORCHESTRATION_ID</code> environment variable is
automatically appended to the user-agent string for request
tracing.</li>
</ul>
<p><strong>Breaking changes:</strong></p>
<ul>
<li><strong><code>require('@actions/github')</code> no longer works in
scripts.</strong> The upgrade to <code>@actions/github</code> v9
(ESM-only) means <code>require('@actions/github')</code> will fail at
runtime. If you previously used patterns like <code>const { getOctokit }
= require('@actions/github')</code> to create secondary clients, use the
new injected <code>getOctokit</code> function instead — it's available
directly in the script context with no imports needed.</li>
<li><code>getOctokit</code> is now an injected function parameter.
Scripts that declare <code>const getOctokit = ...</code> or <code>let
getOctokit = ...</code> will get a <code>SyntaxError</code> because
JavaScript does not allow <code>const</code>/<code>let</code>
redeclaration of function parameters. Use the injected
<code>getOctokit</code> directly, or use <code>var getOctokit =
...</code> if you need to redeclare it.</li>
<li>If your script accesses other <code>@actions/github</code> internals
beyond the standard <code>github</code>/<code>octokit</code> client, you
may need to update those references for v9 compatibility.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>Add ACTIONS_ORCHESTRATION_ID to user-agent string by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/695">actions/github-script#695</a></li>
<li>ci: use deployment: false for integration test environments by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/712">actions/github-script#712</a></li>
<li>feat!: add getOctokit to script context, upgrade
<code>@​actions/github</code> v9, <code>@​octokit/core</code> v7, and
related packages by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/700">actions/github-script#700</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Copilot"><code>@​Copilot</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/github-script/pull/695">actions/github-script#695</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/github-script/compare/v8.0.0...v9.0.0">https://github.com/actions/github-script/compare/v8.0.0...v9.0.0</a></p>
<h2>v8.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update Node.js version support to 24.x by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/637">actions/github-script#637</a></li>
<li>README for updating actions/github-script from v7 to v8 by <a
href="https://github.com/sneha-krip"><code>@​sneha-krip</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/653">actions/github-script#653</a></li>
</ul>
<h2>⚠️ Minimum Compatible Runner Version</h2>
<p><strong>v2.327.1</strong><br />
<a
href="https://github.com/actions/runner/releases/tag/v2.327.1">Release
Notes</a></p>
<p>Make sure your runner is updated to this version or newer to use this
release.</p>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/github-script/pull/637">actions/github-script#637</a></li>
<li><a
href="https://github.com/sneha-krip"><code>@​sneha-krip</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/github-script/pull/653">actions/github-script#653</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/github-script/compare/v7.1.0...v8.0.0">https://github.com/actions/github-script/compare/v7.1.0...v8.0.0</a></p>
<h2>v7.1.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Upgrade husky to v9 by <a
href="https://github.com/benelan"><code>@​benelan</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/482">actions/github-script#482</a></li>
<li>Add workflow file for publishing releases to immutable action
package by <a
href="https://github.com/Jcambass"><code>@​Jcambass</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/485">actions/github-script#485</a></li>
<li>Upgrade IA Publish by <a
href="https://github.com/Jcambass"><code>@​Jcambass</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/486">actions/github-script#486</a></li>
<li>Fix workflow status badges by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/497">actions/github-script#497</a></li>
<li>Update usage of <code>actions/upload-artifact</code> by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/512">actions/github-script#512</a></li>
<li>Clear up package name confusion by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/514">actions/github-script#514</a></li>
<li>Update dependencies with <code>npm audit fix</code> by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/515">actions/github-script#515</a></li>
<li>Specify that the used script is JavaScript by <a
href="https://github.com/timotk"><code>@​timotk</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/478">actions/github-script#478</a></li>
<li>chore: Add Dependabot for NPM and Actions by <a
href="https://github.com/nschonni"><code>@​nschonni</code></a> in <a
href="https://redirect.github.com/actions/github-script/pull/472">actions/github-script#472</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3a2844b7e9"><code>3a2844b</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/github-script/issues/700">#700</a>
from actions/salmanmkc/expose-getoctokit + prepare re...</li>
<li><a
href="ca10bbdd1a"><code>ca10bbd</code></a>
fix: use <code>@​octokit/core/</code>types import for v7
compatibility</li>
<li><a
href="86e48e20ac"><code>86e48e2</code></a>
merge: incorporate main branch changes</li>
<li><a
href="c1084728b5"><code>c108472</code></a>
chore: rebuild dist for v9 upgrade and getOctokit factory</li>
<li><a
href="afff112e4f"><code>afff112</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/github-script/issues/712">#712</a>
from actions/salmanmkc/deployment-false + fix user-ag...</li>
<li><a
href="ff8117e5b7"><code>ff8117e</code></a>
ci: fix user-agent test to handle orchestration ID</li>
<li><a
href="81c6b78760"><code>81c6b78</code></a>
ci: use deployment: false to suppress deployment noise from integration
tests</li>
<li><a
href="3953caf885"><code>3953caf</code></a>
docs: update README examples from <a
href="https://github.com/v8"><code>@​v8</code></a> to <a
href="https://github.com/v9"><code>@​v9</code></a>, add getOctokit docs
and v9 brea...</li>
<li><a
href="c17d55b90d"><code>c17d55b</code></a>
ci: add getOctokit integration test job</li>
<li><a
href="a047196d9a"><code>a047196</code></a>
test: add getOctokit integration tests via callAsyncFunction</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/github-script/compare/v7...v9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/github-script&package-manager=github_actions&previous-version=7&new-version=9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-10 17:21:11 +00:00