mirror of https://github.com/Sonarr/Sonarr
258 lines
8.1 KiB
YAML
258 lines
8.1 KiB
YAML
name: Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- develop
|
|
- main
|
|
paths-ignore:
|
|
- "src/Sonarr.Api.*/openapi.json"
|
|
pull_request:
|
|
branches:
|
|
- develop
|
|
paths-ignore:
|
|
- "src/NzbDrone.Core/Localization/Core/**"
|
|
- "src/Sonarr.Api.*/openapi.json"
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
FRAMEWORK: net6.0
|
|
RAW_BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
|
SONARR_MAJOR_VERSION: 4
|
|
VERSION: 4.0.8
|
|
|
|
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@v4
|
|
|
|
- name: Setup .NET
|
|
uses: actions/setup-dotnet@v4
|
|
|
|
- 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 "BRANCH=${RAW_BRANCH_NAME//\//-}" >> "$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-arm64 Test Artifact
|
|
uses: ./.github/actions/publish-test-artifact
|
|
with:
|
|
framework: ${{ env.FRAMEWORK }}
|
|
runtime: osx-arm64
|
|
|
|
# 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@v4
|
|
|
|
- name: Volta
|
|
uses: volta-cli/action@v4
|
|
|
|
- name: Yarn Install
|
|
run: yarn install
|
|
|
|
- name: Lint
|
|
run: yarn lint
|
|
|
|
- name: Stylelint
|
|
run: yarn stylelint -f github
|
|
|
|
- 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-arm64
|
|
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@v4
|
|
|
|
- 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@v4
|
|
|
|
- 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:
|
|
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
|
|
binary_artifact: build_linux
|
|
binary_path: linux-x64/${{ needs.backend.outputs.framework }}/Sonarr
|
|
- os: macos-latest
|
|
artifact: tests-osx-arm64
|
|
filter: TestCategory!=ManualTest&TestCategory!=WINDOWS&TestCategory=IntegrationTest
|
|
binary_artifact: build_macos
|
|
binary_path: osx-arm64/${{ needs.backend.outputs.framework }}/Sonarr
|
|
- os: windows-latest
|
|
artifact: tests-win-x64
|
|
filter: TestCategory!=ManualTest&TestCategory!=LINUX&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@v4
|
|
|
|
- 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, frontend, 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 }}
|
|
|
|
notify:
|
|
name: Discord Notification
|
|
needs:
|
|
[
|
|
backend,
|
|
frontend,
|
|
unit_test,
|
|
unit_test_postgres,
|
|
integration_test,
|
|
deploy,
|
|
]
|
|
if: ${{ !cancelled() && (github.ref_name == 'develop' || github.ref_name == 'main') }}
|
|
env:
|
|
STATUS: ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Notify
|
|
uses: tsickert/discord-webhook@v6.0.0
|
|
with:
|
|
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
|
username: "GitHub Actions"
|
|
avatar-url: "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png"
|
|
embed-title: "${{ github.workflow }}: ${{ env.STATUS == 'success' && 'Success' || 'Failure' }}"
|
|
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
embed-description: |
|
|
**Branch** ${{ github.ref }}
|
|
**Build** ${{ needs.backend.outputs.version }}
|
|
embed-color: ${{ env.STATUS == 'success' && '3066993' || '15158332' }}
|