/xcresulttool

A GitHub Action that generates a human-readable test report from the Xcode result bundle and shows it on GitHub Checks.

Primary LanguageTypeScriptMIT LicenseMIT

xcresulttool status

xcresulttool GitHub Action

A GitHub Action that generates a human-readable test report from the Xcode result bundle and shows it on GitHub Checks.

Screen Shot

The result is formatted into a test report that shows the success or failure of the tests, code coverages, logs, activities, and saved screenshots.

Here is an example result.

Screen Shot Screen Shot

Screen Shot Screen Shot

Screen Shot Screen Shot

Pre-Requisites

This action only works on macOS builders.

By default xcodebuild will generate the xcresult bundle file to a randomly named directory in DerivedData. To use this action xcodebuild needs to generate xcresult bundle to an accessible location.

This can be done using the -resultBundlePath flag in xcodebuild.

The following action uses a script action to invoke xcodebuild and store the results in TestResults.xcresult

jobs:
  test:
    runs-on: macos-11
      - name: Run Tests
        run: |
          xcodebuild -scheme MyFramework -resultBundlePath TestResults test

Usage

For complete input/output documentation, see action.yml.

Example

- uses: kishikawakatsumi/xcresulttool@v1
  with:
    path: TestResults.xcresult
  if: success() || failure()
  # ^ This is important because the action will be run
  # even if the test fails in the previous step.
jobs:
  test:
    runs-on: macos-11
    name: Test
    steps:
      - uses: actions/checkout@v2
      - name: Test
        run: |
          xcodebuild -scheme MyFramework -resultBundlePath TestResults test

      - uses: kishikawakatsumi/xcresulttool@v1
        with:
          path: TestResults.xcresult
        if: success() || failure()
        # ^ This is important because the action will be run
        # even if the test fails in the previous step.

Multiple result bundle paths

- uses: kishikawakatsumi/xcresulttool@v1
  with:
    path: |
      results/Example.xcresult
      results/TestResult.xcresult
      results/Result.xcresult
  if: success() || failure()

Input parameters

- uses: kishikawakatsumi/xcresulttool@v1
  with:
    # Path to the xcresult bundle.
    path: 'TestResults.xcresult'

    # The GitHub authentication token to create the check.
    #
    # Default: ${{ github.token }}
    token: ''

    # Title for the check results.
    #
    # Default: 'Xcode test results'
    title:

    # Whether to show the details of passed tests;
    # if false, only failed tests will be reported in detail section.
    #
    # Default: true
    show-passed-tests:

    # Whether to show code coverage (if coverage data exists).
    #
    # Default: true
    show-code-coverage:

    # Whether to upload the xcresult bundles. possible values: always, failure, never. Specifying failure will only upload the bundle if all the tests do not pass.
    #
    # Default: 'always'
    upload-bundles:

    #'Will result be reported as check. If false, the result will be added only as job summary.'
    #
    # Default: 'true'
    need-to-create-job-result-check:

Limitations

GitHub Checks has a maximum text limit of 65535 characters. Currently, any text longer than that will be automatically truncated.

There is a limit of 50 annotations in GitHub Checks. Currently, any annotations longer than that will be automatically truncated.

You can set the show-passed-tests option to false to reduce the output to avoid the limitation.