name: Build on: push: branches: - main - release/* tags: - "v*" pull_request: branches: - main - release/* types: [ labeled, opened, synchronize, reopened ] jobs: Build: strategy: matrix: isARM: - ${{ contains(github.event.pull_request.labels.*.name, 'arch:arm32') || contains(github.event.pull_request.labels.*.name, 'arch:arm64') }} options: - os: ubuntu-latest framework: net8.0 sdk: 8.0.x runtime: -x64 codecov: false - os: macos-13 # macos-latest runs on arm64 runners where libgdiplus is unavailable framework: net8.0 sdk: 8.0.x runtime: -x64 codecov: false - os: windows-latest framework: net8.0 sdk: 8.0.x runtime: -x64 codecov: false - os: buildjet-4vcpu-ubuntu-2204-arm framework: net8.0 sdk: 8.0.x runtime: -x64 codecov: false exclude: - isARM: false options: os: buildjet-4vcpu-ubuntu-2204-arm runs-on: ${{matrix.options.os}} steps: - name: Install libgdi+, which is required for tests running on ubuntu if: ${{ matrix.options.os == 'buildjet-4vcpu-ubuntu-2204-arm' }} run: sudo apt-get -y install libgdiplus libgif-dev libglib2.0-dev libcairo2-dev libtiff-dev libexif-dev - name: Git Config shell: bash run: | git config --global core.autocrlf false git config --global core.longpaths true - name: Git Checkout uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive # See https://github.com/actions/checkout/issues/165#issuecomment-657673315 - name: Git Create LFS FileList run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id - name: Git Setup LFS Cache uses: actions/cache@v4 id: lfs-cache with: path: .git/lfs key: ${{ runner.os }}-lfs-${{ hashFiles('.lfs-assets-id') }}-v1 - name: Git Pull LFS run: git lfs pull - name: NuGet Install uses: NuGet/setup-nuget@v2 - name: NuGet Setup Cache uses: actions/cache@v4 id: nuget-cache with: path: ~/.nuget key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/*.props', '**/*.targets') }} restore-keys: ${{ runner.os }}-nuget- - name: DotNet Setup if: ${{ matrix.options.sdk-preview != true }} uses: actions/setup-dotnet@v4 with: dotnet-version: | 8.0.x - name: DotNet Setup Preview if: ${{ matrix.options.sdk-preview == true }} uses: actions/setup-dotnet@v4 with: dotnet-version: | 8.0.x - name: DotNet Build if: ${{ matrix.options.sdk-preview != true }} shell: pwsh run: ./ci-build.ps1 "${{matrix.options.framework}}" env: SIXLABORS_TESTING: True - name: DotNet Build Preview if: ${{ matrix.options.sdk-preview == true }} shell: pwsh run: ./ci-build.ps1 "${{matrix.options.framework}}" env: SIXLABORS_TESTING_PREVIEW: True - name: DotNet Test if: ${{ matrix.options.sdk-preview != true }} shell: pwsh run: ./ci-test.ps1 "${{matrix.options.os}}" "${{matrix.options.framework}}" "${{matrix.options.runtime}}" "${{matrix.options.codecov}}" env: SIXLABORS_TESTING: True XUNIT_PATH: .\tests\ImageSharp.Tests # Required for xunit - name: DotNet Test Preview if: ${{ matrix.options.sdk-preview == true }} shell: pwsh run: ./ci-test.ps1 "${{matrix.options.os}}" "${{matrix.options.framework}}" "${{matrix.options.runtime}}" "${{matrix.options.codecov}}" env: SIXLABORS_TESTING_PREVIEW: True XUNIT_PATH: .\tests\ImageSharp.Tests # Required for xunit - name: Export Failed Output uses: actions/upload-artifact@v4 if: failure() with: name: actual_output_${{ runner.os }}_${{ matrix.options.framework }}${{ matrix.options.runtime }}.zip path: tests/Images/ActualOutput/ Publish: needs: [Build] runs-on: ubuntu-latest if: (github.event_name == 'push') steps: - name: Git Config shell: bash run: | git config --global core.autocrlf false git config --global core.longpaths true - name: Git Checkout uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - name: NuGet Install uses: NuGet/setup-nuget@v2 - name: NuGet Setup Cache uses: actions/cache@v4 id: nuget-cache with: path: ~/.nuget key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/*.props', '**/*.targets') }} restore-keys: ${{ runner.os }}-nuget- - name: DotNet Pack shell: pwsh run: ./ci-pack.ps1 - name: Feedz Publish shell: pwsh run: | dotnet nuget push .\artifacts\*.nupkg -k ${{secrets.FEEDZ_TOKEN}} -s https://f.feedz.io/sixlabors/sixlabors/nuget/index.json --skip-duplicate dotnet nuget push .\artifacts\*.snupkg -k ${{secrets.FEEDZ_TOKEN}} -s https://f.feedz.io/sixlabors/sixlabors/symbols --skip-duplicate - name: NuGet Publish if: ${{ startsWith(github.ref, 'refs/tags/') }} shell: pwsh run: | dotnet nuget push .\artifacts\*.nupkg -k ${{secrets.NUGET_TOKEN}} -s https://api.nuget.org/v3/index.json --skip-duplicate dotnet nuget push .\artifacts\*.snupkg -k ${{secrets.NUGET_TOKEN}} -s https://api.nuget.org/v3/index.json --skip-duplicate