chore(release): 3.1.0#938
Merged
Merged
Conversation
Remove the scheduled license-year workflow and ignore local AGENTS.md guidance. Refresh README capabilities, support links, and MSI build instructions, and clarify GPL/source wording in third-party notices.
Contributor
Author
|
Release validation passed — src tree |
Scrape the GitHub release page to fix the broken update check, and scope the changelog to the target version, honoring section order and dropping the last-edited line. Also removes unused screenshot assets. ㅤ
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…release Replace dry-run-release.yml and prepare-release.yml with a single validate-release.yml, and extend the actions/jobs scripts to support the merged flow.
Defer heavy provider/HTTP imports and fix Windows version reporting, and decouple the search job from the UI worker with deferred bootstrap setup so the app reaches an interactive window faster. ㅤ
…step The season and episode pickers share one NumberSuggestionPopup, both connecting to its number_chosen signal. UniqueConnection only blocks duplicate slots, not the prior step's slot, so choosing an episode also fired the still-connected season handler and clobbered _pending_season with the episode number -- producing terms like S07E07 from a season 1, episode 7 selection. Disconnect any existing slot before wiring the next step's handler.
Drop two commented-out helper functions in log_sanitizer, an abandoned summary_line variant in pipeline, and the disabled browse-video wiring in subtitle_workspace along with its now-unused _browse_for_video_file method and QFileDialog import. Aligns with the repo's no-dead-code comment rules.
Group terminal output under a spinning banner (title while running, done-title on close) with a single transient line for mid-banner updates. Mirror the same banner/spinner protocol into the GUI console by replaying captured console records through one state machine. The 'Waiting for user inputs' banner is owned by open_settings_window only when no immediate search runs, so the search worker's banners don't tear it down early.
…rkflow Turn on warn_return_any, disallow_untyped_defs and exclude_gitignore in mypy config, then annotate the previously untyped defs across io, parsing, providers and ui to satisfy it. Also consolidate the release validation workflow and its actions script.
Break the 924-line subtitle_workspace.py into one file per widget under cards/subtitle_workspace/, with shared constants in _constants.py. The public import path subsearch.ui.cards.subtitle_workspace is preserved via __init__ re-exports, so application.py and the tests are unchanged.
Track the connected slot and disconnect only it, instead of clearing the whole signal. Disconnecting an empty signal made PySide emit a 'Failed to disconnect (None)' RuntimeWarning on the first (season) step.
A fresh install with Subsource enabled and no API key froze the app with no logging. Provider searches run in a ThreadPoolExecutor; on a missing key the pipeline called system_tray.display_toast from that worker thread. The toast nests its own QEventLoop around a QWidget, which only the GUI thread can service, so the worker blocked forever, the search job never joined, and the UI hung with nothing logged. Collect provider notifications during the search and present them after the workers join, back on the GUI thread. display_toast now asserts it runs on the GUI thread so a worker-thread caller can never silently reintroduce the deadlock. Guard against reaching that path at all: run_conditions skips Subsource when no API key is configured, and the provider checkbox is greyed out in the UI while credentials.subsource.api_key_exists is false. Tests cover the worker-thread guard, the collect/drain ordering, the run-condition skip, and the UI grey-out. Fixes #940 ㅤ
Break the composition root into application/{window,entrypoint,
settings_interface,_constants}.py. open_settings_window moves to
entrypoint.py, where the 'Waiting for user inputs' banner is gated on
start_search_immediately so the search worker owns the banner sequence.
Console sinks ignored log level, so debug diagnostics (run_conditions evaluation, guard skip/call lines, dataclass dumps) leaked to the terminal and GUI console. Gate sinks on level: debug now goes to the file log only; info and above reach the console. Stop the guard decorator from announcing skips on-console — it logs at debug only; meaningful skips are reported by the step's caller under its banner. Make the GUI console 1-to-1 with the terminal: clear the transient status line when a banner finishes, and render the finished banner as the plain done-title (no checkmark), exactly as the terminal prints it. Add parity and level-gating tests.
The validation result was only a marker comment, which renders inline with the commit/CI timeline. Mirror it into a release-validation block at the top of the PR body so the latest result always sits above the timeline. jobs.py preserves the block across body regeneration, the same way it preserves the manual-summary block. The hidden marker comment is kept as the machine-readable state that should_validate/last_validation parse, so re-validation gating is unchanged. Add tests for the body-block upsert and preservation.
…words requests was only referenced by a TYPE_CHECKING-only hint; all HTTP goes through curl_cffi. Simplify the download_response annotation to CurlResponse and remove the dead dependency. Also drop the stale subscene keyword and add subsource, tvsubtitles, and gestdown.
Move ui/application/* plus the top-level qt_application and system_tray modules into a single ui/core package, and promote the entrypoint to ui/entrypoint. Retarget the background warmup import to the new entrypoint module and update its test.
Important commits (body ending with U+3164) render above the fold, displacing normal commits into a collapsible <details> block per section. Fold limits per section type keep changelogs scannable at a glance.
Split validate-release triggers so the prepare job (changelog render + PR body update) runs on every push to dev, while build and test remain cron/manual-only via the existing gate proceed logic. Also collapse all normal commits into a blockquoted <details> block in the changelog template; only important-marked commits render above fold.
Previously all non-important commits were pushed directly into the <details> block, making the fold limits (5/5/3) have no effect.
Push to dev now only updates the release PR; binary builds only run on schedule (when src changed) or workflow_dispatch.
push to dev triggers update-release-pr.yml (PR update only). schedule and dispatch trigger validate-release.yml (build + test + record).
- Remove --draft filter from open_release_pr so validation works against both draft and ready-for-review release PRs - On workflow_dispatch with no open PR, fail immediately instead of silently skipping - On workflow_dispatch with a PR, always proceed regardless of src tree hash - Cron path still uses should_validate to skip unchanged src trees
Pass the launched process into assert_window_rendered so it can detect process death before the timeout fires, and surface stderr in the error message. Also capture stderr=PIPE in _launch_executable. Drops html from the Build excluded-modules list.
On first launch the app data directory does not exist yet, so the atomic-write temp file open fails with ENOENT and logs an ERROR.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release validation passed — src tree
6a3a19d407cd6b77362690c1d3add1db02cfc23f(run 28131605434)✨ Features:
🐛 Fixes:
⚙️ Other:
Full changelog: 3.0.0...3.1.0