From 4ea7cb0e5e2f83379819bb1b34e4fcaeffb9f0e9 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 08:44:54 +0000 Subject: [PATCH] Move the artifact actions onto Node 24 I got this wrong twice before getting it right, so the reasoning is worth recording. First I claimed the release job ran a step on "the deprecated Node 20" -- an assumption, not a check. Then I read the actions' own action.yml files, found upload-artifact@v5 and download-artifact@v5/v6 all declaring using: node20, and concluded there was nothing to fix, since bumping within those majors changed nothing. The v1.1.3 release run settled it: ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/upload-artifact@v5 The runner is already overriding them and GitHub says that override is temporary -- exactly the "revisit only if a release run actually warns" condition the roadmap entry named. The fix is a higher major, not a different v5. Verified from each action's own action.yml: upload-artifact@v6 and download-artifact@v7 declare node24. Both are post-v4 so they stay a compatible pair; the only documented artifact incompatibility is v4-and-above being unable to read upload-artifact@v3 or below. checkout@v5, cache@v5 and setup-java@v5 did not appear in the warning and are already on Node 24, so they stay. Roadmap item 8 now tracks the real dated fuse instead: every Android build warns that the app and six plugins apply the Kotlin Gradle Plugin, and that future Flutter versions will fail to build because of it. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01B62qvJ25JCrwnV2uiDrnCQ --- .github/workflows/build.yml | 16 ++++++++-------- .github/workflows/pr-checks.yml | 2 +- docs/CHANGELOG.md | 7 +++++++ docs/ROADMAP.md | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b87abca8..6b987ccc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -166,7 +166,7 @@ jobs: Compress-Archive -Path "build\windows\x64\runner\Release\*" -DestinationPath "PlayTorrioMod-Windows-x64-Portable.zip" -Force - name: Upload Windows Artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-Windows path: | @@ -288,7 +288,7 @@ jobs: fi - name: Upload Android Artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-Android path: android_apks/*.apk @@ -398,7 +398,7 @@ jobs: android_apks/PlayTorrioMod-Android-Universal.apk - name: Upload Android Universal Artifact - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-Android-Universal path: android_apks/*.apk @@ -496,7 +496,7 @@ jobs: tar -czvf PlayTorrioMod-Linux-x86_64.tar.gz -C build/linux/x64/release/bundle . - name: Upload Linux Artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-Linux-x64 path: | @@ -570,7 +570,7 @@ jobs: zip -ry ../../../../../PlayTorrioMod-macOS-arm64.zip PlayTorrioMod.app - name: Upload macOS ARM64 Artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-macOS-arm64 path: | @@ -642,7 +642,7 @@ jobs: zip -ry ../../../../../PlayTorrioMod-macOS-intel.zip PlayTorrioMod.app - name: Upload macOS Intel Artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-macOS-intel path: | @@ -699,7 +699,7 @@ jobs: zip -ry ../../../PlayTorrioMod-iOS.ipa Payload - name: Upload iOS Artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-iOS path: PlayTorrioMod-iOS.ipa @@ -722,7 +722,7 @@ jobs: contents: write steps: - name: Download all build artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: merge-multiple: true diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index 1c007a85..8192e315 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -151,7 +151,7 @@ jobs: run: flutter build apk --release --dart-define-from-file=.env - name: Upload APK - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: PlayTorrioMod-Android-PR${{ github.event.pull_request.number || github.run_number }} path: build/app/outputs/flutter-apk/app-release.apk diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 8d053d8e..d9fc9707 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to PlayTorrio V3 will be documented in this file. ## [unreleased] — 2026-08-22 +### Move the artifact actions onto Node 24 — 2026-08-31 +- **I got this wrong twice before getting it right.** First I wrote that the release job ran a step on "the deprecated Node 20" — an assumption. Then I checked the actions' own `action.yml`, found `upload-artifact@v5` and `download-artifact@v5`/`v6` all declaring `using: node20`, and concluded there was nothing to fix, since bumping within those majors changed nothing. +- **The v1.1.3 release run settled it**: `##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/upload-artifact@v5`. The runner is already overriding them, and GitHub says that override is temporary. That is exactly the "revisit only if a release run actually warns" condition the roadmap entry named. +- The fix is a *higher major*, not a different v5. Verified from each action's own `action.yml`: `upload-artifact@v6` and `download-artifact@v7` declare `node24`. Both are post-v4, so they remain a compatible pair — the only documented artifact incompatibility is v4-and-above being unable to read `upload-artifact@v3` or below. +- `checkout@v5`, `cache@v5` and `setup-java@v5` did not appear in the warning and are already on Node 24; they stay. +- Roadmap item 8 now tracks the real dated fuse instead: every Android build warns that the app and six plugins apply the Kotlin Gradle Plugin, and that *"future versions of Flutter will fail to build"* because of it. + ### One answer to "is this desktop?" (AUDIT: breakpoint values disagree) — 2026-08-31 - **Eight pages asked the question against four different literals** — `>= 900`, `>= 800`, `> 800`, `>= 750`, `> 700`. At an 820px window the nav chrome rendered tablet while Discover, Catalog, Anime, IPTV, the details page and the Arabic anime details page rendered desktop: a visible split down the middle of one screen. - All eight now ask `AppBreakpoints.of(context)`. Its 900 was already canonical and already what the nav chrome used, so the outliers moved up to it rather than the shared value moving down for them. Pages in the 800–899 band now get the tablet layout they were meant to have instead of a desktop one that disagreed with the chrome around it. diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 6fd2ed8c..8d187418 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -49,7 +49,7 @@ Once a build has actually been through this, clear `AppInfo.channel` and the | 6 | **35 files do ad-hoc `MediaQuery.sizeOf(context).width`** instead of `AppBreakpoints.of(context)` | 35 independent call sites, no shared risk, no user-visible bug. Migrate opportunistically when a file is touched for another reason, not as a batch pass. | | 7 | **`music_page.dart` is 5,220 lines** | Four other files are over 2,000. Splitting is worthwhile but is a refactor with no user-visible payoff, so it waits behind anything that a user would notice. | | 7b | **The Music Player Studio's "Mini Player" tab configures a widget that does not exist** | This fork replaced upstream's per-page mini players with the shared `UniversalPlayBar`, which reads no `MusicSettings`. So the studio's preset picker, drag-to-reorder and live preview all persist state (`selectedMiniPreset`, `componentOrderMini`) that nothing consumes — a settings screen that lies. Either remove the Mini Player half of the studio (consistent with one-shared-bar, loses nothing that works today) or teach `UniversalPlayBar` to honour it, which first needs an answer for what a *music* preset means when the bar is showing a video or an audiobook. Found 2026-08-31. | -| 8 | **`actions/download-artifact` is still on v4** | Checked 2026-08-31 and there is **nothing to fix**, recorded so it is not re-raised. The only documented incompatibility is that v4-and-above cannot read artifacts from `upload-artifact@v3` or below, so v4 download alongside v5 upload is a supported pair. Nor is it a runtime issue: `upload-artifact@v5`, `download-artifact@v5` and `download-artifact@v6` all declare `using: node20` in their own `action.yml`, so none of the v5 bumps moved anything off Node 20. Bumping it would be churn. Revisit only if a release run actually warns. | +| 8 | **Kotlin Gradle Plugin will break future Flutter builds** | Every Android build warns: the app and six plugins (`package_info_plus`, `shared_preferences_android`, `torrserver_flutter`, `url_launcher_android`, `video_player_android`, `wakelock_plus`) apply KGP, and *"future versions of Flutter will fail to build if your app uses plugins that apply KGP"*. The app's own `build.gradle.kts` can migrate to Built-in Kotlin; the plugins cannot be fixed here — each needs a version that supports it, or an upstream issue. Not urgent, but it is a dated fuse rather than a style nit. | ## Content sources