Skip to content

chore: Make iOS device tests work again (#3333) #8239

chore: Make iOS device tests work again (#3333)

chore: Make iOS device tests work again (#3333) #8239

Workflow file for this run

name: build
on:
push:
branches:
- main
- release/*
pull_request:
paths-ignore:
- "**.md"
env:
XCODE_VERSION: 15.1
jobs:
build-sentry-native:
name: sentry-native (${{ matrix.os }})
runs-on: ${{ matrix.os }}-latest
strategy:
fail-fast: false
matrix:
os: [ubuntu, windows, macos]
steps:
- name: Checkout
uses: actions/checkout@v4
- run: git submodule update --init modules/sentry-native
- uses: actions/cache@v4
id: cache
with:
path: src/Sentry/Platforms/Native/sentry-native
key: sentry-native-${{ runner.os }}-${{ hashFiles('scripts/build-sentry-native.ps1') }}-${{ hashFiles('.git/modules/modules/sentry-native/HEAD') }}
enableCrossOsArchive: true
- name: Install build dependencies
if: steps.cache.outputs.cache-hit != 'true' && runner.os == 'Linux'
run: |
sudo apt update
sudo apt install libcurl4-openssl-dev
- run: scripts/build-sentry-native.ps1
if: steps.cache.outputs.cache-hit != 'true'
shell: pwsh
build:
needs: build-sentry-native
name: .NET (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# Pinning `macos-13` because Microsoft.iOS 16.4 requires Xcode 14.3 which is only built-in in 13
os: [ubuntu-latest, windows-latest, macos-13]
steps:
- name: Cancel Previous Runs
if: github.ref_name != 'main' && !startsWith(github.ref_name, 'release/')
uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # Tag: 0.12.1
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 2 # default is 1 and codecov needs > 1
# We use macOS for the final publishing build so we we get all the iOS/macCatalyst targets in the packages
- name: Set Environment Variables
if: startsWith(matrix.os, 'macos')
run: echo "CI_PUBLISHING_BUILD=true" >> $GITHUB_ENV
- name: Download sentry-native (Linux)
if: ${{ (env.CI_PUBLISHING_BUILD == 'true') || (runner.os == 'Linux') }}
uses: actions/cache/restore@v4
with:
path: src/Sentry/Platforms/Native/sentry-native
key: sentry-native-Linux-${{ hashFiles('scripts/build-sentry-native.ps1') }}-${{ hashFiles('.git/modules/modules/sentry-native/HEAD') }}
fail-on-cache-miss: true
- name: Download sentry-native (macOS)
if: ${{ (env.CI_PUBLISHING_BUILD == 'true') || (runner.os == 'macOS') }}
uses: actions/cache/restore@v4
with:
path: src/Sentry/Platforms/Native/sentry-native
key: sentry-native-macOS-${{ hashFiles('scripts/build-sentry-native.ps1') }}-${{ hashFiles('.git/modules/modules/sentry-native/HEAD') }}
fail-on-cache-miss: true
- name: Download sentry-native (Windows)
if: ${{ (env.CI_PUBLISHING_BUILD == 'true') || (runner.os == 'Windows') }}
uses: actions/cache/restore@v4
with:
path: src/Sentry/Platforms/Native/sentry-native
key: sentry-native-Windows-${{ hashFiles('scripts/build-sentry-native.ps1') }}-${{ hashFiles('.git/modules/modules/sentry-native/HEAD') }}
fail-on-cache-miss: true
enableCrossOsArchive: true
- name: Setup Environment
uses: ./.github/actions/environment
- name: Build Native Dependencies
uses: ./.github/actions/buildnative
- name: Build Cocoa SDK
if: runner.os == 'macOS'
uses: ./.github/actions/buildcocoasdk
# Only switch to newer xcode after building the Cocoa SDK so that it can keep IPHONEOS_DEPLOYMENT_TARGET=11.0
- run: sudo xcode-select -s /Applications/Xcode_${{ env.XCODE_VERSION }}.app
if: runner.os == 'macOS'
- name: Restore .NET Dependencies
run: dotnet restore Sentry-CI-Build-${{ runner.os }}.slnf --nologo
- name: Build
run: dotnet build Sentry-CI-Build-${{ runner.os }}.slnf -c Release --no-restore --nologo -flp:logfile=build.log -p:CopyLocalLockFileAssemblies=true
- name: Test
run: dotnet test Sentry-CI-Build-${{ runner.os }}.slnf -c Release --no-build --nologo -l GitHubActions -l "trx;LogFilePrefix=testresults_${{ runner.os }}" --collect "XPlat Code Coverage"
- name: Upload code coverage
uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed
- name: Upload build and test outputs
if: failure()
uses: actions/upload-artifact@v4
with:
name: verify-test-results
path: "**/*.received.*"
# To save time and disk space, we only create and archive the Nuget packages when we're actually releasing.
- name: Create Nuget Packages
if: env.CI_PUBLISHING_BUILD == 'true'
run: dotnet pack Sentry-CI-Build-${{ runner.os }}.slnf -c Release --no-build --nologo
- name: Archive Nuget Packages
if: env.CI_PUBLISHING_BUILD == 'true'
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}
if-no-files-found: error
path: |
src/**/Release/*.nupkg
src/**/Release/*.snupkg
integration-test:
needs: build
name: Integration test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-13]
steps:
- uses: actions/checkout@v4
with:
# We only check out what is absolutely necessary to reduce a chance of local files impacting
# integration tests, e.g. Directory.Build.props, nuget.config, ...
sparse-checkout: |
Directory.Build.props
integration-test
- name: Fetch Nuget Packages
uses: actions/download-artifact@v4
with:
name: ${{ github.sha }}
path: src
- name: Install build dependencies
if: runner.os == 'Linux'
run: |
sudo apt update
sudo apt install libcurl4-openssl-dev
- run: sudo xcode-select -s /Applications/Xcode_${{ env.XCODE_VERSION }}.app
if: runner.os == 'macOS'
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
# Needed for Android SDK setup step
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Setup Android SDK
uses: android-actions/setup-android@00854ea68c109d98c75d956347303bf7c45b0277 # v3.2.1
- run: dotnet workload install android maui-android
- name: Test
uses: getsentry/github-workflows/sentry-cli/integration-test/@v2
with:
path: integration-test
test-solution-filters:
runs-on: ubuntu-latest
if: ${{ !startsWith(github.ref_name, 'release/') }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Rebuild Solution Filters
shell: pwsh
run: pwsh scripts/generate-solution-filters.ps1
- name: Ensure Solution Filters are up to date
shell: pwsh
run: scripts/dirty-check.ps1 -PathToCheck ./*.sln* -GuidanceOnFailure "Uncommitted changes to the solution filters detected. Run `scripts/generate-solution-filters.ps1` locally and commit changes."