Release Process
Versioning
OpenWatchParty uses Semantic Versioning:
MAJOR.MINOR.PATCH
- MAJOR: Breaking changes
- MINOR: New features (backwards compatible)
- PATCH: Bug fixes (backwards compatible)
Release Checklist
Pre-Release
- All tests pass
- Documentation updated
- CHANGELOG updated
- Version numbers updated
- Manual testing completed
Version Locations
Update version in:
- Rust (
Cargo.toml):[package] version = "0.2.0" - C# Plugin (
.csproj):<Version>0.2.0</Version> - Plugin metadata (
Plugin.cs) if applicable
CHANGELOG Format
# Changelog
## [0.2.0] - 2024-01-15
### Added
- New feature description
### Changed
- Change description
### Fixed
- Bug fix description
### Security
- Security fix description
## [0.1.0] - 2024-01-01
Initial release.
Build Process
Build All Components
make build
Build Individually
# Rust session server
cd server
cargo build --release
# C# plugin
cd plugins/jellyfin/OpenWatchParty
dotnet build -c Release
Build Artifacts
| Component | Output Location |
|---|---|
| Session Server | server/target/release/session-server |
| Plugin DLL | plugins/jellyfin/OpenWatchParty/bin/Release/net9.0/OpenWatchParty.dll |
Release Steps
1. Create Release Branch
git checkout main
git pull origin main
git checkout -b release/v0.2.0
2. Update Versions
Update all version numbers as listed above.
3. Update CHANGELOG
Add release notes to CHANGELOG.md.
4. Commit Changes
git add -A
git commit -m "Release v0.2.0"
5. Create Tag
git tag -a v0.2.0 -m "Version 0.2.0"
6. Push Release
git push origin release/v0.2.0
git push origin v0.2.0
7. Create GitHub Release
Using the GitHub CLI (recommended):
gh release create v0.2.0 --title "v0.2.0" --notes-file CHANGELOG.md
Or via GitHub UI:
- Go to GitHub > Releases > New Release
- Select tag
v0.2.0 - Title:
v0.2.0 - Description: Copy from CHANGELOG
- Click Publish release
The workflow will automatically:
- Build and push Docker images to GHCR
- Build and attach the Jellyfin plugin zip
8. Merge to Main
git checkout main
git merge release/v0.2.0
git push origin main
9. Clean Up
git branch -d release/v0.2.0
Docker Images
Docker images are automatically built and pushed to GitHub Container Registry (GHCR).
Available Tags
| Tag | Description | Updated |
|---|---|---|
latest |
Latest stable release | On release |
vX.Y.Z |
Specific version (e.g., v0.1.0) |
On release |
vX.Y |
Minor version (e.g., v0.1) |
On release |
beta |
Latest development build | On push to main |
Pull Images
# Latest stable
docker pull ghcr.io/mhbxyz/openwatchparty-session-server:latest
# Specific version
docker pull ghcr.io/mhbxyz/openwatchparty-session-server:v0.1.0
# Development
docker pull ghcr.io/mhbxyz/openwatchparty-session-server:beta
Build Locally (optional)
docker build -t openwatchparty-session-server:local ./server
Automated Releases
Releases are fully automated via GitHub Actions (.github/workflows/docker-publish.yml).
What Happens on Release
When you create a GitHub Release:
- Docker Image: Built for amd64 and arm64, pushed to GHCR with version +
latesttags - Jellyfin Plugin: Built, zipped, and attached to the release
- Plugin Repository:
manifest.jsonupdated with new version and deployed to GitHub Pages
What Happens on Push to Main
When server code changes (server/**) are pushed to main:
- Docker Image: Built and pushed with
betatag - Allows testers to always have the latest development version
Plugin Distribution
Users can install the plugin in two ways:
Via Jellyfin UI (Recommended)
- Go to Dashboard > Plugins > Repositories
- Add:
https://mhbxyz.github.io/OpenWatchParty/jellyfin-plugin-repo/manifest.json - Go to Catalog > Find “OpenWatchParty” > Install
- Restart Jellyfin
Via Direct Download
- Go to Releases
- Download
OpenWatchParty-vX.Y.Z.zip - Extract to Jellyfin plugins folder
- Restart Jellyfin
Hotfix Process
For critical bug fixes:
- Branch from the release tag:
git checkout -b hotfix/v0.2.1 v0.2.0 -
Apply fix and commit
-
Update patch version
-
Follow normal release process with new tag
v0.2.1 - Merge fix back to main:
git checkout main git merge hotfix/v0.2.1
Deprecation Policy
- Announce deprecations in release notes
- Maintain for at least one minor version
- Provide migration guide when removing features
Rollback Process
If a release has critical issues:
- Immediate: Advise users to use previous version
- GitHub: Mark release as pre-release or delete
- Fix: Create hotfix release
- Communicate: Update issue/discussion with status
Release Communication
Channels
- GitHub Releases (primary)
- GitHub Discussions (announcements)
- Jellyfin forums (if applicable)
Template
## What's New
Brief summary of changes.
## Highlights
- Feature 1
- Feature 2
## Breaking Changes
List any breaking changes and migration steps.
## Installation
See [Installation Guide](docs/operations/installation.md).
## Upgrading
See [Upgrade Procedure](docs/operations/deployment.md#upgrade-procedure).
## Changelog
Full changelog in CHANGELOG.md.
Next Steps
- Contributing - How to contribute
- Testing - Testing before release
- Deployment - Production deployment