You've already forked Sonarr
							
							
				mirror of
				https://github.com/Sonarr/Sonarr.git
				synced 2025-10-31 00:07:55 +02:00 
			
		
		
		
	Build and publish using GitHub actions
This commit is contained in:
		
				
					committed by
					
						 Mark McDowall
						Mark McDowall
					
				
			
			
				
	
			
			
			
						parent
						
							a49cf72869
						
					
				
				
					commit
					6b92b556bb
				
			
							
								
								
									
										29
									
								
								.github/actions/archive/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.github/actions/archive/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| name: Archive | ||||
| description: Archive binaries for deployment | ||||
|  | ||||
| inputs: | ||||
|   os: | ||||
|     description: 'OS that the packaging is running on' | ||||
|     required: true | ||||
|   artifact: | ||||
|     description: 'Binary artifact' | ||||
|     required: true | ||||
|   archive_type: | ||||
|     description: 'File type to use for the final package' | ||||
|     required: true | ||||
|   branch: | ||||
|     description: 'Git branch used for this build' | ||||
|     required: true | ||||
|   major_version: | ||||
|     description: 'Sonarr major version' | ||||
|     required: true | ||||
|   version: | ||||
|     description: 'Sonarr version' | ||||
|     required: true | ||||
|  | ||||
| runs: | ||||
|   using: 'composite' | ||||
|   steps: | ||||
|     - name: Archive Artifact | ||||
|       uses: thedoctor0/zip-release@0.7.5 | ||||
|        | ||||
							
								
								
									
										78
									
								
								.github/actions/package/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								.github/actions/package/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| name: Package | ||||
| description: Packages binaries for deployment | ||||
|  | ||||
| inputs: | ||||
|   platform: | ||||
|     description: 'Binary platform' | ||||
|     required: true | ||||
|   framework:  | ||||
|     description: '.net framework' | ||||
|     required: true | ||||
|   artifact: | ||||
|     description: 'Binary artifact' | ||||
|     required: true | ||||
|   branch: | ||||
|     description: 'Git branch used for this build' | ||||
|     required: true | ||||
|   major_version: | ||||
|     description: 'Sonarr major version' | ||||
|     required: true | ||||
|   version: | ||||
|     description: 'Sonarr version' | ||||
|     required: true | ||||
|  | ||||
| runs: | ||||
|   using: 'composite' | ||||
|   steps: | ||||
|     - name: Download Artifact | ||||
|       uses: actions/download-artifact@v4 | ||||
|       with: | ||||
|         name: ${{ inputs.artifact }} | ||||
|         path: _output | ||||
|          | ||||
|     - name: Download UI Artifact | ||||
|       uses: actions/download-artifact@v4 | ||||
|       with: | ||||
|         name: build_ui | ||||
|         path: _output/UI | ||||
|  | ||||
|     - name: Configure Environment Variables | ||||
|       shell: bash | ||||
|       run: | | ||||
|         echo "FRAMEWORK=${{ inputs.framework }}" >> "$GITHUB_ENV" | ||||
|         echo "BRANCH=${{ inputs.branch }}" >> "$GITHUB_ENV" | ||||
|         echo "SONARR_MAJOR_VERSION=${{ inputs.major_version }}" >> "$GITHUB_ENV" | ||||
|         echo "SONARR_VERSION=${{ inputs.version }}" >> "$GITHUB_ENV" | ||||
|  | ||||
|     - name: Create Packages | ||||
|       shell: bash | ||||
|       run: $GITHUB_ACTION_PATH/package.sh | ||||
|  | ||||
|     - name: Create Windows Installer (x64) | ||||
|       if: ${{ inputs.platform == 'windows' }} | ||||
|       working-directory: distribution/windows/setup | ||||
|       shell: cmd | ||||
|       run: | | ||||
|         SET RUNTIME=win-x64 | ||||
|  | ||||
|         build.bat | ||||
|  | ||||
|     - name: Create Windows Installer (x86) | ||||
|       if: ${{ inputs.platform == 'windows' }} | ||||
|       working-directory: distribution/windows/setup | ||||
|       shell: cmd | ||||
|       run: | | ||||
|         SET RUNTIME=win-x86 | ||||
|  | ||||
|         build.bat | ||||
|  | ||||
|     - name: Upload Artifact | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: release_${{ inputs.platform }} | ||||
|         compression-level: 0 | ||||
|         if-no-files-found: error | ||||
|         path: | | ||||
|           _artifacts/*.exe | ||||
|           _artifacts/*.tar.gz | ||||
|           _artifacts/*.zip | ||||
							
								
								
									
										67
									
								
								.github/actions/package/package.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										67
									
								
								.github/actions/package/package.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| outputFolder=_output | ||||
| artifactsFolder=_artifacts | ||||
| uiFolder="$outputFolder/UI" | ||||
| framework="${FRAMEWORK:=net6.0}" | ||||
|  | ||||
| rm -rf $artifactsFolder | ||||
| mkdir $artifactsFolder | ||||
|  | ||||
| for runtime in _output/* | ||||
| do | ||||
|   name="${runtime##*/}" | ||||
|   folderName="$runtime/$framework" | ||||
|   sonarrFolder="$folderName/Sonarr" | ||||
|   archiveName="Sonarr.$BRANCH.$SONARR_VERSION.$name" | ||||
|  | ||||
|   if [[ "$name" == 'UI' ]]; then | ||||
|     continue | ||||
|   fi | ||||
|      | ||||
|   echo "Creating package for $name" | ||||
|  | ||||
|   echo "Copying UI" | ||||
|   cp -r $uiFolder $sonarrFolder | ||||
|    | ||||
|   echo "Setting permissions" | ||||
|   find $sonarrFolder -name "ffprobe" -exec chmod a+x {} \; | ||||
|   find $sonarrFolder -name "Sonarr" -exec chmod a+x {} \; | ||||
|   find $sonarrFolder -name "Sonarr.Update" -exec chmod a+x {} \; | ||||
|    | ||||
|   if [[ "$name" == *"osx"* ]]; then | ||||
|     echo "Creating macOS package" | ||||
|        | ||||
|     packageName="$name-app" | ||||
|     packageFolder="$outputFolder/$packageName" | ||||
|        | ||||
|     rm -rf $packageFolder | ||||
|     mkdir $packageFolder | ||||
|        | ||||
|     cp -r distribution/macOS/Sonarr.app $packageFolder | ||||
|     mkdir -p $packageFolder/Sonarr.app/Contents/MacOS | ||||
|        | ||||
|     echo "Copying Binaries" | ||||
|     cp -r $sonarrFolder/* $packageFolder/Sonarr.app/Contents/MacOS | ||||
|        | ||||
|     echo "Removing Update Folder" | ||||
|     rm -r $packageFolder/Sonarr.app/Contents/MacOS/Sonarr.Update | ||||
|                | ||||
|     echo "Packaging macOS app Artifact" | ||||
|     (cd $packageFolder; zip -rq "../../$artifactsFolder/$archiveName-app.zip" ./Sonarr.app) | ||||
|   fi | ||||
|  | ||||
|   echo "Packaging Artifact" | ||||
|   if [[ "$name" == *"linux"* ]] || [[ "$name" == *"osx"* ]] || [[ "$name" == *"freebsd"* ]]; then | ||||
|     tar -zcf "./$artifactsFolder/$archiveName.tar.gz" -C $folderName Sonarr | ||||
| 	fi | ||||
|      | ||||
|   if [[ "$name" == *"win"* ]]; then | ||||
|     if [ "$RUNNER_OS" = "Windows" ] | ||||
|       then | ||||
|         (cd $folderName; 7z a -tzip "../../../$artifactsFolder/$archiveName.zip" ./Sonarr) | ||||
|       else | ||||
|       (cd $folderName; zip -rq "../../../$artifactsFolder/$archiveName.zip" ./Sonarr) | ||||
|     fi | ||||
| 	fi | ||||
| done | ||||
							
								
								
									
										18
									
								
								.github/actions/publish-test-artifact/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.github/actions/publish-test-artifact/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| name: Publish Test Artifact | ||||
| description: Publishes a test artifact | ||||
|  | ||||
| inputs: | ||||
|   framework: | ||||
|     description: '.net framework' | ||||
|     required: true | ||||
|   runtime: | ||||
|     description: '.net runtime' | ||||
|     required: true | ||||
|  | ||||
| runs: | ||||
|   using: 'composite' | ||||
|   steps: | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: tests-${{ inputs.runtime }} | ||||
|         path: _tests/${{ inputs.framework }}/${{ inputs.runtime }}/publish/**/* | ||||
							
								
								
									
										88
									
								
								.github/actions/test/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								.github/actions/test/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| name: Test | ||||
| description: Runs unit/integration tests | ||||
|  | ||||
| inputs: | ||||
|   use_postgres: | ||||
|     description: 'Whether postgres should be used for the database' | ||||
|   os: | ||||
|     description: 'OS that the tests are running on' | ||||
|     required: true | ||||
|   artifact: | ||||
|     description: 'Test binary artifact' | ||||
|     required: true | ||||
|   pattern: | ||||
|     description: 'Pattern for DLLs' | ||||
|     required: true | ||||
|   filter: | ||||
|     description: 'Filter for tests' | ||||
|     required: true | ||||
|   integration_tests: | ||||
|     description: 'True if running integration tests' | ||||
|   binary_artifact: | ||||
|     description: 'Binary artifact for integration tests' | ||||
|   binary_path: | ||||
|     description: 'Path witin binary artifact for integration tests' | ||||
|  | ||||
| runs: | ||||
|   using: 'composite' | ||||
|   steps: | ||||
|     - name: Setup .NET | ||||
|       uses: actions/setup-dotnet@v3 | ||||
|  | ||||
|     - name: Setup Postgres | ||||
|       if: ${{ inputs.use_postgres }} | ||||
|       uses: ikalnytskyi/action-setup-postgres@v4 | ||||
|  | ||||
|     - name: Setup Test Variables | ||||
|       shell: bash | ||||
|       run: | | ||||
|         echo "RESULTS_NAME=${{ inputs.integration_tests && 'integation-' || 'unit-' }}${{ inputs.artifact }}${{ inputs.use_postgres && '-postgres' }}" >> "$GITHUB_ENV" | ||||
|  | ||||
|     - name: Setup Postgres Environment Variables | ||||
|       if: ${{ inputs.use_postgres }} | ||||
|       shell: bash | ||||
|       run: | | ||||
|         echo "Sonarr__Postgres__Host=localhost" >> "$GITHUB_ENV" | ||||
|         echo "Sonarr__Postgres__Port=5432" >> "$GITHUB_ENV" | ||||
|         echo "Sonarr__Postgres__User=postgres" >> "$GITHUB_ENV" | ||||
|         echo "Sonarr__Postgres__Password=postgres" >> "$GITHUB_ENV" | ||||
|  | ||||
|     - name: Download Artifact | ||||
|       uses: actions/download-artifact@v4 | ||||
|       with: | ||||
|         name: ${{ inputs.artifact }} | ||||
|         path: _tests | ||||
|  | ||||
|     - name: Download Binary Artifact | ||||
|       if: ${{ inputs.integration_tests }} | ||||
|       uses: actions/download-artifact@v4 | ||||
|       with: | ||||
|         name: ${{ inputs.binary_artifact }} | ||||
|         path: _output | ||||
|  | ||||
|     - name: Set up binary artifact | ||||
|       if: ${{ inputs.binary_path != '' }} | ||||
|       shell: bash | ||||
|       run: mv ./_output/${{inputs.binary_path}} _tests/bin | ||||
|  | ||||
|     - name: Make executable | ||||
|       if: startsWith(inputs.os, 'windows') != true | ||||
|       shell: bash | ||||
|       run: chmod +x ./_tests/Sonarr.Test.Dummy && chmod +x ./_tests/ffprobe | ||||
|  | ||||
|     - name: Make Sonarr binary executable | ||||
|       if: ${{ inputs.integration_tests && !startsWith(inputs.os, 'windows') }} | ||||
|       shell: bash | ||||
|       run: chmod +x ./_tests/bin/Sonarr | ||||
|  | ||||
|     - name: Run tests | ||||
|       shell: bash | ||||
|       run: dotnet test ./_tests/Sonarr.*.Test.dll --filter "${{ inputs.filter }}" --logger trx --results-directory "${{ env.RESULTS_NAME }}" | ||||
|  | ||||
|     - name: Publish Test Results | ||||
|       if: ${{ !cancelled() }} | ||||
|       uses: phoenix-actions/test-reporting@v12 | ||||
|       with: | ||||
|         name: ${{ env.RESULTS_NAME }} | ||||
|         path: ${{ env.RESULTS_NAME }}/*.trx | ||||
|         reporter: dotnet-trx | ||||
							
								
								
									
										9
									
								
								.github/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.github/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
|  changelog: | ||||
|   exclude: | ||||
|     authors: | ||||
|       - Weblate | ||||
|       - SonarrBot | ||||
|   categories: | ||||
|     - title: Changes | ||||
|       labels: | ||||
|         - '*' | ||||
							
								
								
									
										219
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,219 @@ | ||||
| name: Build | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - develop | ||||
|       - main | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - develop | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | ||||
|   cancel-in-progress: true | ||||
|  | ||||
| env: | ||||
|   FRAMEWORK: net6.0 | ||||
|   BRANCH: ${{ github.head_ref || github.ref_name }} | ||||
|   SONARR_MAJOR_VERSION: 4 | ||||
|   VERSION: 4.0.0 | ||||
|  | ||||
| jobs: | ||||
|   backend: | ||||
|     runs-on: windows-latest | ||||
|     outputs: | ||||
|       framework: ${{ steps.variables.outputs.framework }} | ||||
|       major_version: ${{ steps.variables.outputs.major_version }} | ||||
|       version: ${{ steps.variables.outputs.version }} | ||||
|     steps: | ||||
|     - name: Check out | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Setup .NET | ||||
|       uses: actions/setup-dotnet@v3 | ||||
|  | ||||
|     - name: Setup Environment Variables | ||||
|       id: variables | ||||
|       shell: bash | ||||
|       run: | | ||||
|         # Add 800 to the build number because GitHub won't let us pick an arbitrary starting point | ||||
|         SONARR_VERSION="${{ env.VERSION }}.$((${{ github.run_number }}+800))" | ||||
|         DOTNET_VERSION=$(jq -r '.sdk.version' global.json) | ||||
|  | ||||
|         echo "SDK_PATH=${{ env.DOTNET_ROOT }}/sdk/${DOTNET_VERSION}" >> "$GITHUB_ENV" | ||||
|         echo "SONARR_VERSION=$SONARR_VERSION" >> "$GITHUB_ENV" | ||||
|         echo "framework=${{ env.FRAMEWORK }}" >> "$GITHUB_OUTPUT" | ||||
|         echo "major_version=${{ env.SONARR_MAJOR_VERSION }}" >> "$GITHUB_OUTPUT" | ||||
|         echo "version=$SONARR_VERSION" >> "$GITHUB_OUTPUT" | ||||
|  | ||||
|     - name: Enable Extra Platforms In SDK | ||||
|       shell: bash | ||||
|       run: ./build.sh --enable-extra-platforms-in-sdk | ||||
|  | ||||
|     - name: Build Backend | ||||
|       shell: bash | ||||
|       run: ./build.sh --backend --enable-extra-platforms --packages | ||||
|  | ||||
|     # Test Artifacts | ||||
|  | ||||
|     - name: Publish win-x64 Test Artifact | ||||
|       uses: ./.github/actions/publish-test-artifact | ||||
|       with: | ||||
|         framework: ${{ env.FRAMEWORK }} | ||||
|         runtime: win-x64 | ||||
|  | ||||
|     - name: Publish linux-x64 Test Artifact | ||||
|       uses: ./.github/actions/publish-test-artifact | ||||
|       with: | ||||
|         framework: ${{ env.FRAMEWORK }} | ||||
|         runtime: linux-x64 | ||||
|  | ||||
|     - name: Publish osx-x64 Test Artifact | ||||
|       uses: ./.github/actions/publish-test-artifact | ||||
|       with: | ||||
|         framework: ${{ env.FRAMEWORK }} | ||||
|         runtime: osx-x64 | ||||
|  | ||||
|     # Build Artifacts (grouped by OS) | ||||
|      | ||||
|     - name: Publish FreeBSD Artifact | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: build_freebsd | ||||
|         path: _artifacts/freebsd-*/**/* | ||||
|     - name: Publish Linux Artifact | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: build_linux | ||||
|         path: _artifacts/linux-*/**/* | ||||
|     - name: Publish macOS Artifact | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: build_macos | ||||
|         path: _artifacts/osx-*/**/* | ||||
|     - name: Publish Windows Artifact | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: build_windows | ||||
|         path: _artifacts/win-*/**/* | ||||
|  | ||||
|   frontend: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - name: Check out | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Volta | ||||
|       uses: volta-cli/action@v4 | ||||
|  | ||||
|     - name: Yarn Intsall | ||||
|       run: yarn install | ||||
|  | ||||
|     - name: Lint | ||||
|       run: yarn lint | ||||
|  | ||||
|     - name: Stylelint | ||||
|       run: yarn stylelint | ||||
|  | ||||
|     - name: Build | ||||
|       run: yarn build --env production | ||||
|  | ||||
|     - name: Publish UI Artifact | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: build_ui | ||||
|         path: _output/UI/**/* | ||||
|  | ||||
|   unit_test: | ||||
|     needs: backend | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         os: [ubuntu-latest, macos-latest, windows-latest] | ||||
|         include: | ||||
|           - os: ubuntu-latest | ||||
|             artifact: tests-linux-x64 | ||||
|             filter: TestCategory!=ManualTest&TestCategory!=WINDOWS&TestCategory!=IntegrationTest&TestCategory!=AutomationTest | ||||
|           - os: macos-latest | ||||
|             artifact: tests-osx-x64 | ||||
|             filter: TestCategory!=ManualTest&TestCategory!=WINDOWS&TestCategory!=IntegrationTest&TestCategory!=AutomationTest | ||||
|           - os: windows-latest | ||||
|             artifact: tests-win-x64 | ||||
|             filter: TestCategory!=ManualTest&TestCategory!=LINUX&TestCategory!=IntegrationTest&TestCategory!=AutomationTest | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     steps: | ||||
|     - name: Check out | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Test | ||||
|       uses: ./.github/actions/test | ||||
|       with: | ||||
|         os: ${{ matrix.os }} | ||||
|         artifact: ${{ matrix.artifact }} | ||||
|         pattern: Sonarr.*.Test.dll | ||||
|         filter: ${{ matrix.filter }} | ||||
|  | ||||
|   unit_test_postgres: | ||||
|     needs: backend | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - name: Check out | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Test | ||||
|       uses: ./.github/actions/test | ||||
|       with: | ||||
|         os: ubuntu-latest | ||||
|         artifact: tests-linux-x64 | ||||
|         pattern: Sonarr.*.Test.dll | ||||
|         filter: TestCategory!=ManualTest&TestCategory!=WINDOWS&TestCategory!=IntegrationTest&TestCategory!=AutomationTest | ||||
|         use_postgres: true | ||||
|  | ||||
|   integration_test: | ||||
|     needs: backend | ||||
|     strategy: | ||||
|       matrix: | ||||
|         os: [ubuntu-latest, macos-latest, windows-latest] | ||||
|         include: | ||||
|           - os: ubuntu-latest | ||||
|             artifact: tests-linux-x64 | ||||
|             filter: TestCategory!=ManualTest&TestCategory!=WINDOWS&TestCategory=IntegrationTest | ||||
|             binary_artifact: build_linux | ||||
|             binary_path: linux-x64/${{ needs.backend.outputs.framework }}/Sonarr | ||||
|           - os: macos-latest | ||||
|             artifact: tests-osx-x64 | ||||
|             filter: TestCategory!=ManualTest&TestCategory!=WINDOWS&TestCategory=IntegrationTest | ||||
|             binary_artifact: build_macos | ||||
|             binary_path: osx-x64/${{ needs.backend.outputs.framework }}/Sonarr | ||||
|           - os: windows-latest | ||||
|             artifact: tests-win-x64 | ||||
|             filter: TestCategory!=ManualTest&TestCategory=WINDOWS&TestCategory=IntegrationTest | ||||
|             binary_artifact: build_windows | ||||
|             binary_path: win-x64/${{ needs.backend.outputs.framework }}/Sonarr | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     steps: | ||||
|     - name: Check out | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Test | ||||
|       uses: ./.github/actions/test | ||||
|       with: | ||||
|         os: ${{ matrix.os }} | ||||
|         artifact: ${{ matrix.artifact }} | ||||
|         pattern: Sonarr.*.Test.dll | ||||
|         filter: ${{ matrix.filter }} | ||||
|         integration_tests: true | ||||
|         binary_artifact: ${{ matrix.binary_artifact }} | ||||
|         binary_path: ${{ matrix.binary_path }} | ||||
|  | ||||
|   deploy: | ||||
|     if: ${{ github.ref_name == 'develop' || github.ref_name == 'main' }} | ||||
|     needs: [backend, unit_test, unit_test_postgres, integration_test] | ||||
|     secrets: inherit | ||||
|     uses: ./.github/workflows/deploy.yml | ||||
|     with: | ||||
|       framework: ${{ needs.backend.outputs.framework }} | ||||
|       branch: ${{ github.ref_name }} | ||||
|       major_version: ${{ needs.backend.outputs.major_version }} | ||||
|       version: ${{ needs.backend.outputs.version }} | ||||
							
								
								
									
										134
									
								
								.github/workflows/deploy.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								.github/workflows/deploy.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,134 @@ | ||||
| name: Deploy | ||||
|  | ||||
| on: | ||||
|   workflow_call: | ||||
|     inputs: | ||||
|       framework:  | ||||
|         description: '.net framework' | ||||
|         type: string | ||||
|         required: true | ||||
|       branch: | ||||
|         description: 'Git branch used for this build' | ||||
|         type: string | ||||
|         required: true | ||||
|       major_version: | ||||
|         description: 'Sonarr major version' | ||||
|         type: string | ||||
|         required: true | ||||
|       version: | ||||
|         description: 'Sonarr version' | ||||
|         type: string | ||||
|         required: true | ||||
|     secrets: | ||||
|       SERVICES_API_KEY: | ||||
|         required: true | ||||
|  | ||||
| jobs: | ||||
|   package: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         platform: [freebsd, linux, macos, windows] | ||||
|         include: | ||||
|           - platform: freebsd | ||||
|             os: ubuntu-latest | ||||
|           - platform: linux | ||||
|             os: ubuntu-latest | ||||
|           - platform: macos | ||||
|             os: ubuntu-latest | ||||
|           - platform: windows | ||||
|             os: windows-latest | ||||
|  | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     steps: | ||||
|     - name: Check out | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Package | ||||
|       uses: ./.github/actions/package | ||||
|       with: | ||||
|         framework: ${{ inputs.framework }} | ||||
|         platform: ${{ matrix.platform }} | ||||
|         artifact: build_${{ matrix.platform }} | ||||
|         branch: ${{ inputs.branch }} | ||||
|         major_version: ${{ inputs.major_version }} | ||||
|         version: ${{ inputs.version }} | ||||
|  | ||||
|   release: | ||||
|     needs: package | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       contents: write | ||||
|     steps: | ||||
|     - name: Check out | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Download release artifacts | ||||
|       uses: actions/download-artifact@v4 | ||||
|       with: | ||||
|         path: _artifacts | ||||
|         pattern: release_* | ||||
|         merge-multiple: true | ||||
|  | ||||
|     - name: Create release | ||||
|       uses: ncipollo/release-action@v1 | ||||
|       with: | ||||
|         artifacts: _artifacts/Sonarr.* | ||||
|         commit: ${{ github.sha }} | ||||
|         generateReleaseNotes: true | ||||
|         name: ${{ inputs.version }} | ||||
|         prerelease: ${{ inputs.branch != 'main' }} | ||||
|         skipIfReleaseExists: true | ||||
|         tag: v${{ inputs.version }} | ||||
|  | ||||
|     - name: Publish to Services | ||||
|       shell: bash | ||||
|       working-directory: _artifacts | ||||
|       run: | | ||||
|         branch=${{ inputs.branch }} | ||||
|         version=${{ inputs.version }} | ||||
|         lastCommit=${{ github.sha }} | ||||
|          | ||||
|         hashes="[" | ||||
|          | ||||
|         addHash() { | ||||
|           path=$1 | ||||
|           os=$2 | ||||
|           arch=$3 | ||||
|           type=$4 | ||||
|          | ||||
|           local hash=$(sha256sum *.$version.$path | awk '{ print $1; }') | ||||
|           echo "{ \""Os\"": \""$os\"", \""Arch\"": \""$arch\"", \""Type\"": \""$type\"", \""Hash\"": \""$hash\"" }" | ||||
|         } | ||||
|          | ||||
|         hashes="$hashes $(addHash "linux-arm.tar.gz" "linux" "arm" "archive")" | ||||
|         hashes="$hashes, $(addHash "linux-arm64.tar.gz" "linux" "arm64" "archive")" | ||||
|         hashes="$hashes, $(addHash "linux-x64.tar.gz" "linux" "x64" "archive")" | ||||
|         # hashes="$hashes, $(addHash "linux-x86.tar.gz" "linux" "x86" "archive")" | ||||
|          | ||||
|         # hashes="$hashes, $(addHash "linux-musl-arm.tar.gz" "linuxmusl" "arm" "archive")" | ||||
|         hashes="$hashes, $(addHash "linux-musl-arm64.tar.gz" "linuxmusl" "arm64" "archive")" | ||||
|         hashes="$hashes, $(addHash "linux-musl-x64.tar.gz" "linuxmusl" "x64" "archive")" | ||||
|          | ||||
|         hashes="$hashes, $(addHash "osx-arm64.tar.gz" "osx" "arm64" "archive")" | ||||
|         hashes="$hashes, $(addHash "osx-x64.tar.gz" "osx" "x64" "archive")" | ||||
|          | ||||
|         hashes="$hashes, $(addHash "osx-arm64-app.zip" "osx" "arm64" "installer")" | ||||
|         hashes="$hashes, $(addHash "osx-x64-app.zip" "osx" "x64" "installer")" | ||||
|          | ||||
|         hashes="$hashes, $(addHash "win-x64.zip" "windows" "x64" "archive")" | ||||
|         hashes="$hashes, $(addHash "win-x86.zip" "windows" "x86" "archive")" | ||||
|          | ||||
|         hashes="$hashes, $(addHash "win-x64-installer.exe" "windows" "x64" "installer")" | ||||
|         hashes="$hashes, $(addHash "win-x86-installer.exe" "windows" "x86" "installer")" | ||||
|          | ||||
|         hashes="$hashes, $(addHash "freebsd-x64.tar.gz" "freebsd" "x64" "archive")" | ||||
|          | ||||
|         hashes="$hashes ]" | ||||
|          | ||||
|         json="{\""branch\"":\""$branch\"", \""version\"":\""$version\"", \""lastCommit\"":\""$lastCommit\"", \""hashes\"":$hashes, \""gitHubRelease\"":true}" | ||||
|         url="https://services.sonarr.tv/v1/update" | ||||
|          | ||||
|         echo "Publishing update $version ($branch) to: $url" | ||||
|         echo "$json" | ||||
|          | ||||
|         curl -H "Content-Type: application/json" -H "X-Api-Key: ${{ secrets.SERVICES_API_KEY }}" -X POST -d "$json" --fail-with-body $url | ||||
							
								
								
									
										47
									
								
								build.sh
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								build.sh
									
									
									
									
									
								
							| @@ -4,19 +4,18 @@ set -e | ||||
| outputFolder='_output' | ||||
| testPackageFolder='_tests' | ||||
| artifactsFolder="_artifacts"; | ||||
| framework="${FRAMEWORK:=net6.0}" | ||||
|  | ||||
| ProgressStart() | ||||
| { | ||||
|     echo "##teamcity[blockOpened name='$1']" | ||||
|     echo "##teamcity[progressStart '$1']" | ||||
|     echo "::group::$1" | ||||
|     echo "Start '$1'" | ||||
| } | ||||
|  | ||||
| ProgressEnd() | ||||
| { | ||||
|     echo "Finish '$1'" | ||||
|     echo "##teamcity[progressFinish '$1']" | ||||
|     echo "##teamcity[blockClosed name='$1']" | ||||
|     echo "::endgroup::" | ||||
| } | ||||
|  | ||||
| UpdateVersionNumber() | ||||
| @@ -140,7 +139,7 @@ PackageLinux() | ||||
|  | ||||
|     echo "Adding Sonarr.Mono to UpdatePackage" | ||||
|     cp $folder/Sonarr.Mono.* $folder/Sonarr.Update | ||||
|     if [ "$framework" = "net6.0" ]; then | ||||
|     if [ "$framework" = "$framework" ]; then | ||||
|         cp $folder/Mono.Posix.NETStandard.* $folder/Sonarr.Update | ||||
|         cp $folder/libMonoPosixHelper.* $folder/Sonarr.Update | ||||
|     fi | ||||
| @@ -168,7 +167,7 @@ PackageMacOS() | ||||
|  | ||||
|     echo "Adding Sonarr.Mono to UpdatePackage" | ||||
|     cp $folder/Sonarr.Mono.* $folder/Sonarr.Update | ||||
|     if [ "$framework" = "net6.0" ]; then | ||||
|     if [ "$framework" = "$framework" ]; then | ||||
|         cp $folder/Mono.Posix.NETStandard.* $folder/Sonarr.Update | ||||
|         cp $folder/libMonoPosixHelper.* $folder/Sonarr.Update | ||||
|     fi | ||||
| @@ -400,20 +399,20 @@ then | ||||
|  | ||||
|     if [[ -z "$RID" || -z "$FRAMEWORK" ]]; | ||||
|     then | ||||
|         PackageTests "net6.0" "win-x64" | ||||
|         PackageTests "net6.0" "win-x86" | ||||
|         PackageTests "net6.0" "linux-x64" | ||||
|         PackageTests "net6.0" "linux-musl-x64" | ||||
|         PackageTests "net6.0" "osx-x64" | ||||
|         PackageTests "$framework" "win-x64" | ||||
|         PackageTests "$framework" "win-x86" | ||||
|         PackageTests "$framework" "linux-x64" | ||||
|         PackageTests "$framework" "linux-musl-x64" | ||||
|         PackageTests "$framework" "osx-x64" | ||||
|         if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ]; | ||||
|         then | ||||
|             PackageTests "net6.0" "freebsd-x64" | ||||
|             PackageTests "$framework" "freebsd-x64" | ||||
|         fi | ||||
|     else | ||||
|         PackageTests "$FRAMEWORK" "$RID" | ||||
|     fi | ||||
|  | ||||
|     UploadTestArtifacts "net6.0" | ||||
|     UploadTestArtifacts "$framework" | ||||
| fi | ||||
|  | ||||
| if [ "$FRONTEND" = "YES" ]; | ||||
| @@ -435,22 +434,22 @@ then | ||||
|  | ||||
|     if [[ -z "$RID" || -z "$FRAMEWORK" ]]; | ||||
|     then | ||||
|         Package "net6.0" "win-x64" | ||||
|         Package "net6.0" "win-x86" | ||||
|         Package "net6.0" "linux-x64" | ||||
|         Package "net6.0" "linux-musl-x64" | ||||
|         Package "net6.0" "linux-arm64" | ||||
|         Package "net6.0" "linux-musl-arm64" | ||||
|         Package "net6.0" "linux-arm" | ||||
|         Package "net6.0" "osx-x64" | ||||
|         Package "net6.0" "osx-arm64" | ||||
|         Package "$framework" "win-x64" | ||||
|         Package "$framework" "win-x86" | ||||
|         Package "$framework" "linux-x64" | ||||
|         Package "$framework" "linux-musl-x64" | ||||
|         Package "$framework" "linux-arm64" | ||||
|         Package "$framework" "linux-musl-arm64" | ||||
|         Package "$framework" "linux-arm" | ||||
|         Package "$framework" "osx-x64" | ||||
|         Package "$framework" "osx-arm64" | ||||
|         if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ]; | ||||
|         then | ||||
|             Package "net6.0" "freebsd-x64" | ||||
|             Package "$framework" "freebsd-x64" | ||||
|         fi | ||||
|     else | ||||
|         Package "$FRAMEWORK" "$RID" | ||||
|     fi | ||||
|  | ||||
|     UploadArtifacts "net6.0" | ||||
|     UploadArtifacts "$framework" | ||||
| fi | ||||
|   | ||||
| @@ -3,8 +3,5 @@ | ||||
| @REM SET BRANCH=develop | ||||
| @REM SET FRAMEWORK=net6.0 | ||||
| @REM SET RUNTIME=win-x64 | ||||
| echo ##teamcity[progressStart 'Building setup file'] | ||||
| inno\ISCC.exe sonarr.iss | ||||
| echo ##teamcity[progressFinish 'Building setup file'] | ||||
|  | ||||
| echo ##teamcity[publishArtifacts 'distribution\windows\setup\output\*%RUNTIME%*.exe'] | ||||
| inno\ISCC.exe sonarr.iss | ||||
|   | ||||
| @@ -40,7 +40,7 @@ Compression=lzma2/normal | ||||
| AppContact={#ForumsURL} | ||||
| VersionInfoVersion={#MajorVersion} | ||||
| SetupLogging=yes | ||||
| OutputDir=output | ||||
| OutputDir="..\..\..\_artifacts" | ||||
| AppverName={#AppName} | ||||
|  | ||||
| [Languages] | ||||
| @@ -53,8 +53,8 @@ Name: "startupShortcut"; Description: "Create shortcut in Startup folder (Starts | ||||
| Name: "none"; Description: "Do not start automatically"; GroupDescription: "Start automatically"; Flags: exclusive unchecked | ||||
|  | ||||
| [Files] | ||||
| Source: "..\..\..\_artifacts\{#Runtime}\{#Framework}\Sonarr\Sonarr.exe"; DestDir: "{app}"; Flags: ignoreversion | ||||
| Source: "..\..\..\_artifacts\{#Runtime}\{#Framework}\Sonarr\*"; Excludes: "Sonarr.Update"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | ||||
| Source: "..\..\..\_output\{#Runtime}\{#Framework}\Sonarr\Sonarr.exe"; DestDir: "{app}"; Flags: ignoreversion | ||||
| Source: "..\..\..\_output\{#Runtime}\{#Framework}\Sonarr\*"; Excludes: "Sonarr.Update"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | ||||
| ; NOTE: Don't use "Flags: ignoreversion" on any shared system files | ||||
|  | ||||
| [Icons] | ||||
|   | ||||
							
								
								
									
										3
									
								
								docs.sh
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								docs.sh
									
									
									
									
									
								
							| @@ -1,6 +1,7 @@ | ||||
| #!/bin/bash | ||||
| set -e | ||||
|  | ||||
| FRAMEWORK="net6.0" | ||||
| PLATFORM=$1 | ||||
|  | ||||
| if [ "$PLATFORM" = "Windows" ]; then | ||||
| @@ -32,7 +33,7 @@ dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p | ||||
| dotnet new tool-manifest | ||||
| dotnet tool install --version 6.5.0 Swashbuckle.AspNetCore.Cli | ||||
|  | ||||
| dotnet tool run swagger tofile --output ./src/Sonarr.Api.V3/openapi.json "$outputFolder/net6.0/$RUNTIME/Sonarr.dll" v3 & | ||||
| dotnet tool run swagger tofile --output ./src/Sonarr.Api.V3/openapi.json "$outputFolder/$FRAMEWORK/$RUNTIME/Sonarr.dll" v3 & | ||||
|  | ||||
| sleep 30 | ||||
|  | ||||
|   | ||||
							
								
								
									
										5
									
								
								global.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								global.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| { | ||||
|   "sdk": { | ||||
|     "version": "6.0.405" | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user