# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json name: Build & Test on: push: paths-ignore: - "wiki/**" - "**.md" pull_request: paths-ignore: - "wiki/**" - "**.md" env: dotnetVersion: "6.0.x" jobs: build: name: Build strategy: fail-fast: true matrix: runtime: - win-x64 - win-arm64 - linux-x64 - linux-arm - linux-arm64 - osx-x64 - osx-arm64 - linux-musl-x64 - linux-musl-arm - linux-musl-arm64 # Must run on Windows so that version info gets properly set in host EXE. See: # https://github.com/dotnet/runtime/issues/3828 runs-on: windows-latest steps: - name: Checkout Source Code uses: actions/checkout@v2 with: fetch-depth: 0 # avoid shallow clone for GitVersion - name: Setup .NET Core SDK ${{ env.dotnetVersion }} uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.dotnetVersion }} - name: Test run: dotnet test src --configuration Release --logger GitHubActions - name: Publish shell: pwsh run: ci/Publish.ps1 ${{ matrix.runtime }} - name: Upload Artifacts uses: actions/upload-artifact@v3 with: name: recyclarr-${{ matrix.runtime }} path: publish/${{ matrix.runtime }}/* smoke: name: Smoke Test needs: build strategy: fail-fast: false matrix: include: - image: windows-latest runtime: win-x64 - image: ubuntu-latest runtime: linux-x64 - image: macos-latest runtime: osx-x64 runs-on: ${{ matrix.image }} steps: - name: Checkout uses: actions/checkout@v2 - name: Download Artifacts uses: actions/download-artifact@v3 with: name: recyclarr-${{ matrix.runtime }} - name: Run Smoke Test shell: pwsh run: ci/SmokeTest.ps1 ./recyclarr release: name: Release needs: smoke runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/v') steps: - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 0 # avoid shallow clone for GitVersion # token: ${{ secrets.GITHUB_TOKEN }} # Allows git push - name: Install GitVersion uses: gittools/actions/gitversion/setup@v0 with: versionSpec: 5.x - name: Determine Version uses: gittools/actions/gitversion/execute@v0 id: gitversion - name: Download Artifacts uses: actions/download-artifact@v3 with: path: publish - name: Create Zip Files shell: pwsh run: ci/CreateZip.ps1 publish - name: Extract Changelog id: changelog uses: ffurrer2/extract-release-notes@v1 - name: Create Release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.PAT }} with: files: publish-zip/recyclarr-*.zip body: ${{ steps.changelog.outputs.release_notes }} tag_name: ${{ github.event.create.ref }} draft: false prerelease: ${{ steps.gitversion.outputs.preReleaseTag != '' }} # The main purpose of this job is to group all the other jobs together into one single job status # that can be set as a requirement to merge pull requests. This is easier than enumerating all # jobs in a workflow to ensure they all pass. check: if: always() name: Check Build Succeeds needs: [build, smoke] runs-on: ubuntu-latest steps: - name: Check if all jobs succeeded uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }}