Various CI fixes (#161)

* Update homebrew dependencies like on the other workflows. Fixes problems caused by buggy swiftformat prebundled on the github actions macos runner

* Removed UI tests from PR tests and running them on a schedule instead. Hopefuly fixed code coverage.

* Added back simulator versions as they need to match UI test snapshots

* Allow UI tests to run on this PR

* Added back skipped UI tests

* Fix danger sometimes not working on forks and disable integration tests on them
This commit is contained in:
Stefan Ceriu
2022-08-19 17:42:03 +03:00
committed by GitHub
parent 78df4abc7f
commit 142180b1f3
10 changed files with 113 additions and 27 deletions
+2 -3
View File
@@ -4,10 +4,9 @@ on: [pull_request]
jobs: jobs:
build: build:
# Don't run for forks as secrets are unavailable.
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
name: Danger name: Danger
runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
+7 -1
View File
@@ -2,12 +2,14 @@ name: Integration tests
on: on:
schedule: schedule:
- cron: '0 3 * * 1-5' - cron: '0 2 * * 1-5'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
integration_tests: integration_tests:
if: github.event.pull_request.head.repo.full_name == github.repository
name: Integration Tests name: Integration Tests
runs-on: macos-12 runs-on: macos-12
@@ -19,6 +21,10 @@ jobs:
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Brew bundle
run:
brew update && brew bundle && brew upgrade
- uses: actions/cache@v3 - uses: actions/cache@v3
with: with:
path: vendor/bundle path: vendor/bundle
@@ -1,8 +1,11 @@
name: Tests name: UI Tests
on: on:
push: workflow_dispatch:
branches: [ develop ]
schedule:
- cron: '0 0 * * 1-5'
pull_request: pull_request:
jobs: jobs:
@@ -13,7 +16,7 @@ jobs:
concurrency: concurrency:
# When running on develop, use the sha to allow all runs of this workflow to run concurrently. # When running on develop, use the sha to allow all runs of this workflow to run concurrently.
# Otherwise only allow a single run of this workflow on each branch, automatically cancelling older runs. # Otherwise only allow a single run of this workflow on each branch, automatically cancelling older runs.
group: ${{ github.ref == 'refs/heads/develop' && format('tests-develop-{0}', github.sha) || format('tests-{0}', github.ref) }} group: ${{ github.ref == 'refs/heads/develop' && format('ui-tests-develop-{0}', github.sha) || format('ui-tests-{0}', github.ref) }}
cancel-in-progress: true cancel-in-progress: true
steps: steps:
@@ -26,6 +29,10 @@ jobs:
with: with:
lfs: true lfs: true
- name: Brew bundle
run:
brew update && brew bundle && brew upgrade
- uses: actions/cache@v3 - uses: actions/cache@v3
with: with:
path: vendor/bundle path: vendor/bundle
@@ -33,17 +40,13 @@ jobs:
restore-keys: | restore-keys: |
${{ runner.os }}-gems- ${{ runner.os }}-gems-
- name: Brew bundle
run:
brew update && brew bundle && brew upgrade
- name: Bundle install - name: Bundle install
run: | run: |
bundle config path vendor/bundle bundle config path vendor/bundle
bundle install --jobs 4 --retry 3 bundle install --jobs 4 --retry 3
- name: Run tests - name: Run tests
run: bundle exec fastlane tests run: bundle exec fastlane ui_tests
- name: Archive artifacts - name: Archive artifacts
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
+45
View File
@@ -0,0 +1,45 @@
name: Unit Tests
on:
workflow_dispatch:
push:
branches: [ develop ]
pull_request:
jobs:
tests:
name: Tests
runs-on: macos-12
concurrency:
# When running on develop, use the sha to allow all runs of this workflow to run concurrently.
# Otherwise only allow a single run of this workflow on each branch, automatically cancelling older runs.
group: ${{ github.ref == 'refs/heads/develop' && format('unit-tests-develop-{0}', github.sha) || format('unit-tests-{0}', github.ref) }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v3
- name: Brew bundle
run:
brew update && brew bundle && brew upgrade
- uses: actions/cache@v3
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Run tests
run: bundle exec fastlane unit_tests
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
+1 -2
View File
@@ -49,7 +49,6 @@ let allowList = ["stefanceriu",
"manuroe", "manuroe",
"gileluard", "gileluard",
"phlniji", "phlniji",
"MaximeEvrard42",
"aringenbach"] "aringenbach"]
let requiresSignOff = !allowList.contains(where: { let requiresSignOff = !allowList.contains(where: {
@@ -64,7 +63,7 @@ if requiresSignOff {
}.isEmpty }.isEmpty
if !hasPRBodySignOff, isMissingCommitsSignOff { if !hasPRBodySignOff, isMissingCommitsSignOff {
fail("Please add a sign-off to either the PR description or to the commits themselves.") warn("Please add a sign-off to either the PR description or to the commits themselves.")
} }
} }
@@ -29,7 +29,7 @@
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES" codeCoverageEnabled = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO" onlyGenerateCoverageForSpecifiedTargets = "YES"
systemAttachmentLifetime = "keepNever"> systemAttachmentLifetime = "keepNever">
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
@@ -54,6 +54,15 @@
</Testables> </Testables>
<CommandLineArguments> <CommandLineArguments>
</CommandLineArguments> </CommandLineArguments>
<CodeCoverageTargets>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C0FAEB81CFD9776CD78CE489"
BuildableName = "ElementX.app"
BlueprintName = "ElementX"
ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference>
</CodeCoverageTargets>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
+11 -2
View File
@@ -29,6 +29,15 @@
"addressSanitizer" : { "addressSanitizer" : {
"enabled" : true "enabled" : true
}, },
"codeCoverage" : {
"targets" : [
{
"containerPath" : "container:ElementX.xcodeproj",
"identifier" : "C0FAEB81CFD9776CD78CE489",
"name" : "ElementX"
}
]
},
"environmentVariableEntries" : [ "environmentVariableEntries" : [
{ {
"key" : "SNAPSHOT_ARTIFACTS", "key" : "SNAPSHOT_ARTIFACTS",
@@ -41,8 +50,8 @@
}, },
"targetForVariableExpansion" : { "targetForVariableExpansion" : {
"containerPath" : "container:ElementX.xcodeproj", "containerPath" : "container:ElementX.xcodeproj",
"identifier" : "C0FAEB81CFD9776CD78CE489", "identifier" : "0E28CD62691FDBC63147D5E3",
"name" : "ElementX" "name" : "UITests"
}, },
"uiTestingScreenshotsLifetime" : "keepNever", "uiTestingScreenshotsLifetime" : "keepNever",
"undefinedBehaviorSanitizerEnabled" : true, "undefinedBehaviorSanitizerEnabled" : true,
+2
View File
@@ -21,6 +21,8 @@ schemes:
disableMainThreadChecker: false disableMainThreadChecker: false
captureScreenshotsAutomatically: false captureScreenshotsAutomatically: false
gatherCoverageData: true gatherCoverageData: true
coverageTargets:
- ElementX
targets: targets:
- UnitTests - UnitTests
+13 -7
View File
@@ -72,19 +72,25 @@ lane :adhoc do
) )
end end
lane :tests do lane :unit_tests do
run_tests( run_tests(
project: "ElementX.xcodeproj",
scheme: "UnitTests" scheme: "UnitTests"
) )
slather(
cobertura_xml: true,
output_directory: "./fastlane/test_output",
proj: "ElementX.xcodeproj",
scheme: "UnitTests",
)
end
lane :ui_tests do
run_tests( run_tests(
project: "ElementX.xcodeproj",
scheme: "UITests", scheme: "UITests",
devices: ["iPhone 13 Pro Max", "iPad (9th generation)"], devices: ["iPhone 13 Pro Max (15.5)", "iPad (9th generation) (15.5)"],
ensure_devices_found: true, ensure_devices_found: true,
prelaunch_simulator: true, prelaunch_simulator: true,
output_directory: "fastlane/test_output/",
result_bundle: true result_bundle: true
) )
@@ -92,9 +98,9 @@ lane :tests do
cobertura_xml: true, cobertura_xml: true,
output_directory: "./fastlane/test_output", output_directory: "./fastlane/test_output",
proj: "ElementX.xcodeproj", proj: "ElementX.xcodeproj",
scheme: "ElementX", scheme: "UITests",
binary_basename: "ElementX.app"
) )
end end
lane :integration_tests do lane :integration_tests do
+10 -2
View File
@@ -37,10 +37,18 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do
### tests ### unit_tests
```sh ```sh
[bundle exec] fastlane tests [bundle exec] fastlane unit_tests
```
### ui_tests
```sh
[bundle exec] fastlane ui_tests
``` ```