mirror of
https://github.com/Sonarr/Sonarr
synced 2024-12-21 23:33:00 +00:00
Build and publish using GitHub actions
This commit is contained in:
parent
a49cf72869
commit
6b92b556bb
13 changed files with 676 additions and 32 deletions
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'
|
outputFolder='_output'
|
||||||
testPackageFolder='_tests'
|
testPackageFolder='_tests'
|
||||||
artifactsFolder="_artifacts";
|
artifactsFolder="_artifacts";
|
||||||
|
framework="${FRAMEWORK:=net6.0}"
|
||||||
|
|
||||||
ProgressStart()
|
ProgressStart()
|
||||||
{
|
{
|
||||||
echo "##teamcity[blockOpened name='$1']"
|
echo "::group::$1"
|
||||||
echo "##teamcity[progressStart '$1']"
|
|
||||||
echo "Start '$1'"
|
echo "Start '$1'"
|
||||||
}
|
}
|
||||||
|
|
||||||
ProgressEnd()
|
ProgressEnd()
|
||||||
{
|
{
|
||||||
echo "Finish '$1'"
|
echo "Finish '$1'"
|
||||||
echo "##teamcity[progressFinish '$1']"
|
echo "::endgroup::"
|
||||||
echo "##teamcity[blockClosed name='$1']"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateVersionNumber()
|
UpdateVersionNumber()
|
||||||
|
@ -140,7 +139,7 @@ PackageLinux()
|
||||||
|
|
||||||
echo "Adding Sonarr.Mono to UpdatePackage"
|
echo "Adding Sonarr.Mono to UpdatePackage"
|
||||||
cp $folder/Sonarr.Mono.* $folder/Sonarr.Update
|
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/Mono.Posix.NETStandard.* $folder/Sonarr.Update
|
||||||
cp $folder/libMonoPosixHelper.* $folder/Sonarr.Update
|
cp $folder/libMonoPosixHelper.* $folder/Sonarr.Update
|
||||||
fi
|
fi
|
||||||
|
@ -168,7 +167,7 @@ PackageMacOS()
|
||||||
|
|
||||||
echo "Adding Sonarr.Mono to UpdatePackage"
|
echo "Adding Sonarr.Mono to UpdatePackage"
|
||||||
cp $folder/Sonarr.Mono.* $folder/Sonarr.Update
|
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/Mono.Posix.NETStandard.* $folder/Sonarr.Update
|
||||||
cp $folder/libMonoPosixHelper.* $folder/Sonarr.Update
|
cp $folder/libMonoPosixHelper.* $folder/Sonarr.Update
|
||||||
fi
|
fi
|
||||||
|
@ -400,20 +399,20 @@ then
|
||||||
|
|
||||||
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
||||||
then
|
then
|
||||||
PackageTests "net6.0" "win-x64"
|
PackageTests "$framework" "win-x64"
|
||||||
PackageTests "net6.0" "win-x86"
|
PackageTests "$framework" "win-x86"
|
||||||
PackageTests "net6.0" "linux-x64"
|
PackageTests "$framework" "linux-x64"
|
||||||
PackageTests "net6.0" "linux-musl-x64"
|
PackageTests "$framework" "linux-musl-x64"
|
||||||
PackageTests "net6.0" "osx-x64"
|
PackageTests "$framework" "osx-x64"
|
||||||
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
||||||
then
|
then
|
||||||
PackageTests "net6.0" "freebsd-x64"
|
PackageTests "$framework" "freebsd-x64"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
PackageTests "$FRAMEWORK" "$RID"
|
PackageTests "$FRAMEWORK" "$RID"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
UploadTestArtifacts "net6.0"
|
UploadTestArtifacts "$framework"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$FRONTEND" = "YES" ];
|
if [ "$FRONTEND" = "YES" ];
|
||||||
|
@ -435,22 +434,22 @@ then
|
||||||
|
|
||||||
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
||||||
then
|
then
|
||||||
Package "net6.0" "win-x64"
|
Package "$framework" "win-x64"
|
||||||
Package "net6.0" "win-x86"
|
Package "$framework" "win-x86"
|
||||||
Package "net6.0" "linux-x64"
|
Package "$framework" "linux-x64"
|
||||||
Package "net6.0" "linux-musl-x64"
|
Package "$framework" "linux-musl-x64"
|
||||||
Package "net6.0" "linux-arm64"
|
Package "$framework" "linux-arm64"
|
||||||
Package "net6.0" "linux-musl-arm64"
|
Package "$framework" "linux-musl-arm64"
|
||||||
Package "net6.0" "linux-arm"
|
Package "$framework" "linux-arm"
|
||||||
Package "net6.0" "osx-x64"
|
Package "$framework" "osx-x64"
|
||||||
Package "net6.0" "osx-arm64"
|
Package "$framework" "osx-arm64"
|
||||||
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
||||||
then
|
then
|
||||||
Package "net6.0" "freebsd-x64"
|
Package "$framework" "freebsd-x64"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
Package "$FRAMEWORK" "$RID"
|
Package "$FRAMEWORK" "$RID"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
UploadArtifacts "net6.0"
|
UploadArtifacts "$framework"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -3,8 +3,5 @@
|
||||||
@REM SET BRANCH=develop
|
@REM SET BRANCH=develop
|
||||||
@REM SET FRAMEWORK=net6.0
|
@REM SET FRAMEWORK=net6.0
|
||||||
@REM SET RUNTIME=win-x64
|
@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}
|
AppContact={#ForumsURL}
|
||||||
VersionInfoVersion={#MajorVersion}
|
VersionInfoVersion={#MajorVersion}
|
||||||
SetupLogging=yes
|
SetupLogging=yes
|
||||||
OutputDir=output
|
OutputDir="..\..\..\_artifacts"
|
||||||
AppverName={#AppName}
|
AppverName={#AppName}
|
||||||
|
|
||||||
[Languages]
|
[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
|
Name: "none"; Description: "Do not start automatically"; GroupDescription: "Start automatically"; Flags: exclusive unchecked
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "..\..\..\_artifacts\{#Runtime}\{#Framework}\Sonarr\Sonarr.exe"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "..\..\..\_output\{#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\*"; Excludes: "Sonarr.Update"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
|
|
3
docs.sh
3
docs.sh
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
FRAMEWORK="net6.0"
|
||||||
PLATFORM=$1
|
PLATFORM=$1
|
||||||
|
|
||||||
if [ "$PLATFORM" = "Windows" ]; then
|
if [ "$PLATFORM" = "Windows" ]; then
|
||||||
|
@ -32,7 +33,7 @@ dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p
|
||||||
dotnet new tool-manifest
|
dotnet new tool-manifest
|
||||||
dotnet tool install --version 6.5.0 Swashbuckle.AspNetCore.Cli
|
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
|
sleep 30
|
||||||
|
|
||||||
|
|
5
global.json
Normal file
5
global.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"sdk": {
|
||||||
|
"version": "6.0.405"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue