Build-JellyFin.ps1 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. [CmdletBinding()]
  2. param(
  3. [switch]$InstallFFMPEG,
  4. [switch]$GenerateZip,
  5. [string]$InstallLocation = "$Env:AppData/JellyFin-Server/",
  6. [ValidateSet('Debug','Release')][string]$BuildType = 'Release',
  7. [ValidateSet('Quiet','Minimal', 'Normal')][string]$DotNetVerbosity = 'Minimal',
  8. [ValidateSet('win','win7', 'win8','win81','win10')][string]$WindowsVersion = 'win',
  9. [ValidateSet('x64','x86', 'arm', 'arm64')][string]$Architecture = 'x64'
  10. )
  11. function Build-JellyFin {
  12. if($Architecture -eq 'arm64'){
  13. if($WindowsVersion -ne 'win10'){
  14. Write-Error "arm64 only supported with Windows10 Version"
  15. exit
  16. }
  17. }
  18. if($Architecture -eq 'arm'){
  19. if($WindowsVersion -notin @('win10','win81','win8')){
  20. Write-Error "arm only supported with Windows 8 or higher"
  21. exit
  22. }
  23. }
  24. dotnet publish -c $BuildType -r "$windowsversion-$Architecture" MediaBrowser.sln -o $InstallLocation -v $DotNetVerbosity
  25. }
  26. function Install-FFMPEG {
  27. param(
  28. [string]$InstallLocation,
  29. [string]$Architecture
  30. )
  31. Write-Verbose "Checking Architecture"
  32. if($Architecture -notin @('x86','x64')){
  33. Write-Warning "No builds available for your selected architecture of $Architecture"
  34. Write-Warning "FFMPEG will not be installed"
  35. }elseif($Architecture -eq 'x64'){
  36. Write-Verbose "Downloading 64 bit FFMPEG"
  37. Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-4.1-win64-static.zip -UseBasicParsing -OutFile "$env:TEMP/fmmpeg.zip" | Write-Verbose
  38. }else{
  39. Write-Verbose "Downloading 32 bit FFMPEG"
  40. Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-4.1-win32-static.zip -UseBasicParsing -OutFile "$env:TEMP/fmmpeg.zip" | Write-Verbose
  41. }
  42. Expand-Archive "$env:TEMP/fmmpeg.zip" -DestinationPath "$env:TEMP/ffmpeg/" | Write-Verbose
  43. if($Architecture -eq 'x64'){
  44. Write-Verbose "Copying Binaries to Jellyfin location"
  45. Get-ChildItem "$env:temp/ffmpeg/ffmpeg-4.1-win64-static/bin" | ForEach-Object {
  46. Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
  47. }
  48. }else{
  49. Write-Verbose "Copying Binaries to Jellyfin location"
  50. Get-ChildItem "$env:temp/ffmpeg/ffmpeg-4.1-win32-static/bin" | ForEach-Object {
  51. Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
  52. }
  53. }
  54. Remove-Item "$env:TEMP/ffmpeg/" -Recurse -Force -ErrorAction Continue | Write-Verbose
  55. Remove-Item "$env:TEMP/fmmpeg.zip" -Force -ErrorAction Continue | Write-Verbose
  56. }
  57. Write-Verbose "Starting Build Process: Selected Environment is $WindowsVersion-$Architecture"
  58. Build-JellyFin
  59. if($InstallFFMPEG.IsPresent -or ($InstallFFMPEG -eq $true)){
  60. Write-Verbose "Starting FFMPEG Install"
  61. Install-FFMPEG $InstallLocation $Architecture
  62. }
  63. if($GenerateZip.IsPresent -or ($GenerateZip -eq $true)){
  64. Compress-Archive -Path $InstallLocation -DestinationPath "$InstallLocation/jellyfin.zip" -Force
  65. }
  66. Write-Verbose "Finished"