[mise-lock] chore: migrate CI to mise-action - #7
Conversation
Add mise.toml/mise.lock and replace actions/setup-python with step-security/mise-action in python-package.yml, overriding the tool version per matrix job via mise_toml so the existing 3.7/3.8/3.9/3.10 test matrix is preserved. docker-build.yml has no toolchain install step, so it is untouched.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
…26.8.12 Pins step-security/mise-action to v4.2.4 (mise CLI 2026.8.12) and regenerates mise.lock to the versioned lockfile format mise 2026.8.11+ requires. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
dyl-sv
left a comment
There was a problem hiding this comment.
Blocking bug: in .github/workflows/python-package.yml, the second commit (5bac3b8, "pin mise-action to 2026.8.12") tries to pin the mise-action version but adds it as a second with: key on the "Setup mise" step instead of merging it into the existing with: block:
- name: Setup mise
uses: step-security/mise-action@6e96d2ffbc65c037f23c78818f2a339d6cf830f7 # v4.2.4
with:
version: '2026.8.12'
with:
mise_toml: |
[tools]
python = "${{ matrix.python-version }}"
This is a duplicate mapping key, which is invalid YAML.
Evidence this is currently broken on HEAD (5bac3b8):
- The workflow run for this exact head commit (run 32952604392, confirmed via API to be attached to PR #7 / this head SHA) has conclusion "failure", completed in 0 seconds, with GitHub's own message: "This run likely failed because of a workflow file issue." No jobs ran — the workflow file fails to parse.
gh pr checks 7doesn't even list a "Python package" check for the current head, because the workflow is unparseable and never registers a check run.- I independently parsed the file with a lenient YAML parser to sanity-check the duplicate-key semantics: a lenient parser silently drops the first
with:block (silently discarding the intended version pin), while GitHub Actions' stricter parser rejects the file outright. Either way, the stated intent of the commit ("Pins step-security/mise-action to v4.2.4 (mise CLI 2026.8.12)") is not actually in effect, and CI cannot run at all on the current head.
This is a new regression introduced by this PR (specifically the second commit), not pre-existing: master's prior "Python package" failures were ordinary test failures under the old actions/setup-python setup, a different failure mode than a workflow-file parse error.
Fix: merge into a single with: block, e.g.
with:
version: '2026.8.12'
mise_toml: |
[tools]
python = "${{ matrix.python-version }}"
Please fix and confirm a green run on the resulting head commit before re-requesting review.
The version pin was added as a second with: mapping instead of being merged into the existing block, which is invalid YAML and made the workflow file fail to parse (CI red on this PR's head SHA).
dyl-sv
left a comment
There was a problem hiding this comment.
Re-verified from scratch on head SHA f874c93.
Good news: the original defect is fixed. The "Setup mise" step in .github/workflows/python-package.yml now has a single merged with: block (version + mise_toml), the workflow file is valid YAML, and it actually runs — no more "workflow file issue" / zero-jobs failure.
However, CI is still red on this head SHA, so it does not meet the bar of "real jobs run and pass":
build (3.8): mise itself fails to install —Failed to install core:python@3.8: No GitHub artifact attestations found for python@3.8.20. mise's attestation verification (default-on in 2026.8.12) rejects this specific python-build-standalone release.build (3.9)andbuild (3.10): mise install succeeds, but tests fail at collection —ImportError: cannot import name 'url_quote' from 'werkzeug.urls'. The mise-managed environment resolves a newer Werkzeug than the previous actions/setup-python + pip cache did, and Flask's installed version is incompatible with it.build (3.7): tests run further but still fail —4 failed, 194 passed, 15 errorsintests/webhooks_test.py(TimeoutError against the webserver plugin), likely a knock-on effect of the same dependency drift.
Only the non-build checks (Socket Security, StepSecurity Optional Checks) are green.
Please pin/resolve the Flask/Werkzeug versions (or add an upper bound) so the wsview import works again, and either pin a python-build-standalone release that has attestations for 3.8.20 or set MISE_PYTHON_GITHUB_ATTESTATIONS=false / python.github_attestations = false for that toolchain. Requesting changes until the 3.7-3.10 matrix is green.
flask==2.0.2 imports werkzeug.urls.url_quote, which was removed in werkzeug>=2.1 — pin werkzeug==2.0.3 to match. Also mise's default-on GitHub artifact attestation check rejects the python-build-standalone release for 3.8.20, so disable it for this workflow's mise-managed python installs.
pyOpenSSL==21.0.0 breaks against the modern `cryptography` release mise's python resolves (AttributeError: module 'lib' has no attribute 'X509_V_FLAG_NOTIFY_POLICY' / 'GEN_EMAIL'), which crashes the Webserver plugin on load and manifests as webhooks_test.py timeouts across the whole matrix. Verified locally (python 3.8 via mise) that pyOpenSSL 26.2.0 works with the resolved cryptography 47.0.0 and that errbot's actual cert-generation call path (X509/PKey/dump_certificate/ dump_privatekey) still works unchanged.
Summary
mise.toml([tools] python = "3.10") and generatesmise.lock, in the versionedlockfile_version = 1format mise 2026.8.11+ requires.actions/setup-pythoninpython-package.ymlwithstep-security/mise-action, pinned tov4.2.4(mise CLI2026.8.12).docker-build.ymlhas no toolchain-install step, so it is left untouched..gitignorenow excludes.github/actions.lock.yaml..github/actions.lock.yamlviaalflow.Judgment call
.tool-versionsor existingmise.tomlwas present.python-package.ymltests a matrix of Python versions (3.7/3.8/3.9/"3.10") rather than a single pinned version. To preserve that matrix coverage, the mise-action step overrides the tool version per job via itsmise_tomlinput (python = "${{ matrix.python-version }}"), following the same override pattern already used elsewhere in the org (see app-b2c-api-gateway'supdate-ampli.yaml). The rootmise.tomlitself pinspython = "3.10"(the newest matrix entry) as the default/lockfile version.Test plan