feat: Add PeerTube & PieFed auto-update, improve classifier

Add auto-update scripts and review examples for PeerTube and PieFed,
bringing total auto-updating services to three.

The classifier now includes the current and target version in the
prompt so it can correctly evaluate conditional upgrade notes like
"follow v8.1.0 instructions if upgrading from <= v8.0.2". Without
this context the model would conservatively flag patch releases as
manual.

All auto-update wrappers now use `bash -euo pipefail` when calling
remote scripts so failures in upstream deploy/upgrade scripts
propagate correctly instead of silently succeeding.

test_classifier.py now accepts a service name argument and derives
realistic version numbers from the release notes for testing.
This commit is contained in:
Jeena 2026-04-12 23:13:26 +00:00
parent f55f3d8e91
commit 67a9509eaa
13 changed files with 376 additions and 10 deletions

View file

@ -0,0 +1,12 @@
action: auto
reason: Bug fix release. No migration scripts, no configuration changes. The note to follow v8.1.0 instructions only applies if upgrading from v8.0.2 or older, not for patch-to-patch upgrades.
---
### IMPORTANT NOTES
* Follow v8.1.0 IMPORTANT NOTES if you upgrade from PeerTube <= v8.0.2
### Bug fixes
* Fix infinite loop when processing some GIF images
* Correctly inject custom admin colors in dark theme
* Fix broken player when loading the page in background

View file

@ -0,0 +1,17 @@
action: auto
reason: Bug fix and security patch release. No migration scripts or configuration changes needed. The v8.1.0 note only applies when upgrading from v8.0.2 or older.
---
### IMPORTANT NOTES
* Follow v8.1.0 IMPORTANT NOTES if you upgrade from PeerTube <= v8.0.2
### SECURITY
* Updates vulnerable dependencies
### Bug fixes
* Fix error 500 in home page if there are many channels
* Prevent 500 error for podcast feed
* Re-fetch remote videos if the thumbnail if not found
* Handle non jpg remote thumbnails

View file

@ -0,0 +1,120 @@
action: manual
reason: Requires manually running a migration script after upgrade while PeerTube is running. Also recommends running regenerate-thumbnails and prune-storage scripts, and has configuration changes for thumbnail sizes and object storage prefixes.
---
**Blog post: https://joinpeertube.org/news/release-8.1**
### IMPORTANT NOTES
* You need to manually execute a migration script **after upgrading**, while PeerTube is running and the database migration is complete (`Migrations finished. New migration version schema: 1000` in PeerTube startup logs):
* Classic installation: `cd /var/www/peertube/peertube-latest && sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production node dist/scripts/migrations/peertube-8.1.js`
* Docker installation: `cd /var/www/peertube-docker && docker compose exec -u peertube peertube node dist/scripts/migrations/peertube-8.1.js`
* Running [regenerate-thumbnails](https://docs.joinpeertube.org/maintain/tools#regenerate-video-thumbnails) and [prune-storage](https://docs.joinpeertube.org/maintain/tools#prune-filesystem-object-storage) scripts after the upgrade and migration script is highly recommended
* If you run PostgreSQL or Redis with TLS connection and self signed certificates, you must explicitly set `reject_unauthorized` to `true` or fill `ca`, `cert` and `key` settings in your [production.yaml](https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L84)
### Maintenance
* Migrate to the `sharp` NodeJS dependency to process images. This is a native dependency that provides prebuilt binaries for most system.
FreeBSD systems, however, require an additional step after PeerTube dependencies installation:
* Install `sharp` build dependencies: https://sharp.pixelplumbing.com/install/#building-from-source
* Run `npm explore sharp -- npm run build` in `peertube-latest` directory
* Merge the `previews` directory into the `thumbnails` directory. The migration script will automatically move files
The `previews` directory and configuration are kept for compatibility reasons
* The `cache` directory is no longer deleted at PeerTube startup, to keep files cached from the previous run
### Configuration
*This section is not exhaustive*
* **Important** Generate more thumbnail sizes for videos in `thumbnails.sizes`. We recommend admins apply the same settings
* Update default object storage configuration to use different `prefix` values with the same `bucket_name` for each object type (`web_videos`, `user_exports`, etc.), so it is easier to add more object types in the future
* Use the `lucide` player theme by default
* `import.videos.http.force_ipv4` is now `true` by default to reduce rate limiting on some platforms
* Add *On Primary* color configuration (`theme.customization.on_primary_color`) to choose the foreground color when the background color is *Primary*
### Docker
* Add `va-driver-all` to the PeerTube Docker image [#7346](https://github.com/Chocobozzz/PeerTube/pull/7346)
### Plugins/Themes/Embed/REST APIs
* REST API:
* Deprecate `previewfile` when publishing a video. Use `thumbnailfile` instead
* Deprecate `thumbnailPath` and `previewPath` `Video` fields. Use the `thumbnails` array instead
* Deprecate the `thumbnailPath` `VideoPlaylist` field. Use the `thumbnails` array instead
* Remove unused `fileUrl` from `UserExport` and `VideoSource`
* Deprecate `/lazy-static/previews/:filename`. Use `/lazy-static/thumbnails/:filename` instead
* Server plugin hooks (https://docs.joinpeertube.org/api/plugins):
* Add `filter:feed.videos.list.result` [#7355](https://github.com/Chocobozzz/PeerTube/pull/7355)
* Replace `torrentPath` with `torrentFilename` and `torrentStream` for remote torrents in `filter:api.download.torrent.allowed.result` context
### Features
* :tada: Allow uploaders to restrict domains where their video can be embedded :tada:
* Add an admin config to ensure an optimized podcast audio file is transcoded
* Support 3.0x playback speed for non-premium users :grin:
* Optimize transcoding job queue:
* Do not wait for all transcoding tasks to publish the video
* Do not wait for all transcoding tasks to move video files in object storage
* Lower priority on low video resolutions to avoid blocking video publication during bursts of uploads
* More transcoding job parallelization
* More reliable channel sync:
* Reduce youtube-dl calls to reduce rate limiting
* Handle cases where the video is not available/doesn't exist
* Handle lives that are still being post-processed
* Stop sync on get video info failure to retry at the same point next time
* UX:
* Support raw hex colors in color picker input [#7337](https://github.com/Chocobozzz/PeerTube/pull/7337)
* Group notifications by date
* Display blocked video information on the video manage page
* Add a loading icon when updating the video
* Improve the error message when the user password is too long
* Add `g l` hotkey to go to the login page
* Add ability to display video language on the `My Videos` page (column is hidden by default)
* Improve video SEO
* Support `png` and `webp` video thumbnails
* Support `svg` logos for admins
* Better email notification when a subscribed channel published a video [#7395](https://github.com/Chocobozzz/PeerTube/pull/7395)
* Add compatibility with ActivityPub FEP-1b12 (used by Lemmy, PieFed, Mbin...)
* Introduce a new cache system for remote thumbnails, storyboards, captions, and actor avatars/banners
* Support Redis TLS connections [#7404](https://github.com/Chocobozzz/PeerTube/pull/7404)
* Support PostgreSQL TLS connections [#7366](https://github.com/Chocobozzz/PeerTube/pull/7366)
* Support path style requests for object storage
* Improve channel collaboration:
* An editor can now move a video they can manage to a channel they can manage (owner/editor)
* An editor can send a *change ownership request* for a video they can manage
* Editors can add videos to playlists of collaborated channels
* Add quick actions (*Manage*, *Remove*) to the video dropdown for editors too
* Performance:
* Create video file torrents in a worker thread
* Optimize videos list SQL query with complex sort (trending, hot, etc.)
* When possible, send raw files directly instead of muxing when downloading a video
* Improve podcast feed images compatibility with Apple Podcast
* Add ability to set the default "download enabled" policy in admin configuration
### Bug fixes
* Fix videos list inconsistencies when going back to that page
* Do not display an empty details block in embed on error
* Prevent incomplete segment reads for live streams [#7333](https://github.com/Chocobozzz/PeerTube/pull/7333)
* Fix video download filename on Safari
* Fix broken P2P when updating object storage base URL
* Fix Redis sentinel support [#7365](https://github.com/Chocobozzz/PeerTube/pull/7365)
* Correctly use header colors defined by the admin
* Fix broken transcoding on remote runner when split video/audio is enabled
* Fix server config not refreshing after admin settings save [#7413](https://github.com/Chocobozzz/PeerTube/pull/7413)
* Prevent exception when the account is not loaded yet in the user moderation dropdown
* Prevent black borders when embedding a video
* Fix default scope defined by the admin when browsing videos
* Force transcoding even if the video state is not compatible
* Fix broken video studio task when updating video privacy at the same time
* Reset selected rows when loading data in tables
* Take into account channel owner video quota when an editor publishes a video to a collaborated channel
* Fix watching a password protected video as an editor
* Fix video metadata in `filter:api.video.upload.accept.result` context
* Correctly take into account the user language filter when browsing videos
* Fix `.ts` video file upload [#7458](https://github.com/Chocobozzz/PeerTube/pull/7458)
* Fix `.mkv` video file upload on latest Chrome
* Fix deleting all instance logo when deleting a specific logo
* Fix getting unsupported Node.js from PATH with yt-dlp [#7468](https://github.com/Chocobozzz/PeerTube/pull/7468)
* Inherit border color from primary color
* Fix PeerTube client that automatically updates interface language to English

View file

@ -0,0 +1,97 @@
action: manual
reason: Major release with long-running database migrations (up to 30 minutes), a required post-upgrade migration script, package manager change from yarn to pnpm that must be installed beforehand, and NodeJS version requirements.
---
### IMPORTANT NOTES
* Database migrations of this version can take a long time (up to 30 minutes on an instance with many users/federation actors and a slow database disk)
* You need to manually execute a migration script **after your upgrade** while PeerTube is running and the database migration is complete (`Migrations finished. New migration version schema: 970` in PeerTube startup logs):
* Classic installation: `cd /var/www/peertube/peertube-latest && sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production node dist/scripts/migrations/peertube-8.0.js`
* Docker installation: `cd /var/www/peertube-docker && docker compose exec -u peertube peertube node dist/scripts/migrations/peertube-8.0.js`
* `yarn` NodeJS packages manager has been removed in favor of `pnpm`. Follow the [dependencies guide](https://docs.joinpeertube.org/support/doc/dependencies) to install `pnpm` on your system **before the upgrade**
* Ensure `storage.uploads` directory is set in your [production.yaml](https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L139)
* Supported NodeJS versions are `>= 20.19 and < 21` or `>= 22.12 and <23`
* For Docker users, please read the Docker section below
### Configuration
* Remove `http_server` unused section from `.yaml` configuration files
* Introduce `views.videos.local.max_age` configuration to cleanup old views from local videos
* Add more STUN Servers to `webrtc.stun_servers` to improve P2P robustness
* Add ability to increase video transcription timeout in `video_transcription.timeout`
* Add `client.new_features_info` configuration to disable popups explaining new features to users
* Add `user.password_constraints.min_length` config to specify user password minimum length [#6945](https://github.com/Chocobozzz/PeerTube/pull/6945)
### Docker
* PeerTube Dockerfile is now based on Debian Trixie. `chocobozzz/peertube:production` can be used instead of `chocobozzz/peertube:production-trixie` (Debian suffix version is deprecated)
* PostgreSQL version has been upgraded in [Docker Compose](https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/docker-compose.yml). Please follow [this guide](https://docs.joinpeertube.org/install/docker#upgrade-postgresql-container) if you want to upgrade PostgreSQL in your Docker Compose
* Redis version has been upgraded in [Docker Compose](https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/docker-compose.yml). No maintenance task is required if you upgrade Redis in your Docker Compose
### Plugins/Themes/Embed/REST APIs
* REST API:
* Remove deprecated `filename` field from `VideoSource` object
* Remove deprecated `commentsEnabled` field from `Video` object
* Remove deprecated `redundancies.files`field from `VideoRedundancy` object
* Deprecate `captionPath` field from `VideoCaption` object. Use `fileUrl` instead
* Deprecate `storyboardPath` from `Storyboard` object. Use `fileUrl` instead
* Deprecate `path` from `ActorImage` object (avatars, banners). Use `fileUrl` instead
* The HTTP response code for password-protected videos can be either 401 or 403, depending on the request headers
* Theme:
* Rename `--input-placeholder` CSS variables into `--input-placeholder-color`
* Introduce `--input-placeholder-font-size` CSS variable
### Features
* :tada: Add channel collaboration :tada:
* Channel owners can invite users of their instance to become editors of their channel
* Editors can accept or reject the invitation
* Editors can manage videos, playlists & comments of the channel
* An *Activity* page has been added to list actions performed within a channel
* :tada: Video player redesign :tada:
* Introduce a new clean and modern theme named **Lucide**
* Original theme is still used by default, and has been renamed to **Galaxy**
* The player theme can be changed by the admin for the entire instance or by the channel for all its videos. It can also be changed for individual videos.
* Use vertical audio volume control for **Galaxy** player theme
* Improve video imports UX
* Introduce an *Import failed* state to clearly identify failed imports
* Display import state in video manage page and watch page
* Add ability to retry video imports
* Channel synchronization automatically retry failed imports
* Redesign notifications popup and page
* Replace `yarn` package manager by `pnpm` to provide faster PeerTube installation/upgrade and faster plugin installation/upgrade
* Add admin options to customize default *Browse videos* behaviour [#7193](https://github.com/Chocobozzz/PeerTube/pull/7193)
* Add ability to handle storyboard generation job by runners [#7191](https://github.com/Chocobozzz/PeerTube/pull/7191)
* Add *Resend verification email* button to admin users list [#7272](https://github.com/Chocobozzz/PeerTube/pull/7272)
* Improve video manage and admin config forms accessibility
* Add ability to insert a new playlist at first position in the channel
* Add ability to copy codecs, if possible, for HLS transcoding
* Also search by account name when searching for channels
* Faster start time seek on HLS videos
### Bug fixes
* Fix avatar max size information
* Fix scroll issue when navigating from homepage
* Fix viewers stats date filter label after a reset
* Fix select languages component label
* Correctly load user video language settings in video filters
* Accept non-HTTPS URLs for the search index
* Fix admin abuse URL in emails
* Show videos to owners even if they are muted on the instance
* Correctly sort scheduled videos when listing my videos
* Fix account mention redirection
* Display all countries/regions labels in viewer stats graph
* Keep videos order after user import
* Fix HTML headings hierarchy to improve SEO
* Users logged-in by an external auth plugin can choose to display their email publicly (required by Apple for the podcast feed)
* Fix podcast feed video bitrate attribute that can be refused by some podcast applications
* Fix video quota information estimation
* Translate RSS feeds title
* Fix transcription CORS issue if the caption file is stored externally
* Do no uppercase video tags
* Fix resetting instance categories/languages
* Fix black screen when updating web video resolution in player
* Fix displaying more than 100 live sessions
* Reload page after login to respect user lang
* Do not run storyboard/transcription jobs without the appropriate stream