Add CodeQL analysis #94
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: PerformanceSuite Tests | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- '*' | |
jobs: | |
swiftpm-build: | |
runs-on: macos-13 | |
steps: | |
- name: Set Xcode version | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: latest | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: SwiftLint | |
run: | |
Pods/SwiftLint/swiftlint lint --strict | |
# to compile swift package we should remove workspace and xcodeproj | |
# otherwise xcodebuild takes schemes from them | |
- name: Remove workspace | |
run: | | |
rm -rf Project.xcodeproj | |
rm -rf Project.xcworkspace | |
- name: Compile | |
run: | | |
xcodebuild -scheme PerformanceSuite -destination 'generic/platform=iOS' | |
xcodebuild -scheme PerformanceSuiteCrashlytics -destination 'generic/platform=iOS' | |
xcodebuild -scheme PerformanceApp -destination 'generic/platform=iOS' | |
# restore removed files just in case it is needed for the further steps | |
- name: Restore workspace | |
run: | | |
git checkout -- Project.xcodeproj | |
git checkout -- Project.xcworkspace | |
unit-tests: | |
runs-on: macos-latest | |
steps: | |
- name: Set Xcode version | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: latest | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install CocoaPods | |
run: | | |
pod install | |
- name: Run Unit Tests | |
env: | |
scheme: UnitTests | |
destination: platform=iOS Simulator,name=iPhone 15 Pro,OS=17.5 | |
workspace: Project.xcworkspace | |
run: | | |
xcodebuild test -scheme "$scheme" -workspace "$workspace" -destination "$destination" -derivedDataPath DerivedData | |
- name: Slather | |
env: | |
scheme: UnitTests | |
workspace: Project.xcworkspace | |
project: Project.xcodeproj | |
binary_file: DerivedData/Build/Products/Debug-iphonesimulator/PerformanceSuite/PerformanceSuite.framework/PerformanceSuite | |
build_directory: DerivedData/Build | |
run: | | |
gem install slather | |
slather coverage --simple-output --workspace $workspace --scheme $scheme --binary-file "$binary_file" --build-directory $build_directory $project | grep -E '^Test Coverage|^Tested ' > code_coverage.txt | |
slather coverage --cobertura-xml --workspace $workspace --scheme $scheme --binary-file "$binary_file" --build-directory $build_directory $project | |
- name: Upload code_coverage.txt | |
uses: actions/upload-artifact@v4 | |
with: | |
name: code_coverage.txt | |
path: code_coverage.txt | |
- name: Upload cobertura.xml | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cobertura.xml | |
path: cobertura.xml | |
ui-tests: | |
runs-on: macos-latest | |
steps: | |
- name: Set Xcode version | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: 15.4 | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install CocoaPods | |
run: | | |
pod install | |
- name: Run UI Tests | |
env: | |
scheme: UITests | |
destination: platform=iOS Simulator,name=iPhone 15 Pro,OS=17.5 | |
workspace: Project.xcworkspace | |
run: | | |
xcodebuild test -scheme "$scheme" -workspace "$workspace" -destination "$destination" | |
coverage-report: | |
runs-on: ubuntu-latest | |
needs: unit-tests | |
steps: | |
- name: Download cobertura.xml | |
uses: actions/download-artifact@v4 | |
with: | |
name: cobertura.xml | |
- name: Code coverage markdown report | |
uses: irongut/[email protected] | |
with: | |
filename: cobertura.xml | |
badge: true | |
fail_below_min: true | |
format: markdown | |
hide_branch_rate: false | |
hide_complexity: true | |
output: both | |
thresholds: '75 85' | |
- name: Add Coverage PR Comment | |
uses: marocchino/sticky-pull-request-comment@v2 | |
if: github.event_name == 'pull_request' | |
with: | |
recreate: true | |
path: code-coverage-results.md | |
- name: Upload code-coverage-results.md | |
uses: actions/upload-artifact@v4 | |
with: | |
name: code-coverage-results.md | |
path: code-coverage-results.md | |
coverage-badge: | |
if: github.ref == 'refs/heads/main' | |
needs: unit-tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: badges | |
- name: Download code_coverage.txt | |
uses: actions/download-artifact@v4 | |
with: | |
name: code_coverage.txt | |
- name: Commit code_coverage.txt | |
run: | | |
git config --local user.email "[email protected]" | |
git config --local user.name "GitHub Action" | |
if [[ `git status --porcelain` ]]; then | |
git add code_coverage.txt | |
git commit -m "Update code_coverage.txt" | |
git push | |
else | |
echo "No changes to code coverage" | |
fi | |
- name: Load coverage data | |
id: load-coverage | |
run: | | |
echo "coverage=$(cat code_coverage.txt | grep -o -E '[0-9\.]+%' | awk '{print $1}')" >> $GITHUB_OUTPUT | |
- name: Make Coverage Badge | |
uses: action-badges/[email protected] | |
with: | |
label: coverage | |
message: "${{ steps.load-coverage.outputs.coverage }}" | |
message-color: brightgreen | |
file-name: code_coverage.svg | |
badge-branch: badges | |
github-token: "${{ secrets.GITHUB_TOKEN }}" |