Skip to content

Update Xcode Version

Actions
Update Xcode versions used in GitHub Actions workflows
v0.4.0
Latest
Star (7)

update-xcode-version-action

Tests codecov

update-xcode-version-action is a GitHub Action that utilises xcutils to automate the creation of pull requests when a new Xcode version is available (on GitHub Actions).

It can be configured to update GitHub Actions workflow files and create a pull request with the changes.

Thanks to xcutils versions can be specified as latest, beta, last-minor, etc., allowing for a single configuration to continue working without the need for extra tweaking. You can think of your versions specification as a lock file for Xcode versions.

Configuration

Xcode versions are configured using a yaml file. By default the action will look for a file at .github/xcode-versions.yml, but you can configure it to look elsewhere.

For example to have a release workflow use the latest Xcode and tests to use the next available beta and the last minor version you can create a yaml file such as:

workflows:
  workflows/test.yml:
    jobs:
      run_tests:
        strategy:
          matrix:
            xcode:
              - last-minor
              - latest
              - beta

  workflows/release.yml:
    jobs:
      release:
        strategy:
          matrix:
            xcode:
              - latest

This would update a workflow file with the following structure:

name: Tests

on: [push]

jobs:
  run_tests:
    name: Run Tests
    runs-on: macos-latest
    strategy:
      fail-fast: false
      matrix:
        xcode: ["11.1", "11.2.1", "11.3-beta"]

    steps:
      - uses: actions/checkout@v2

      - name: Select Xcode ${{ matrix.xcode }}
        run: sudo xcode-select --switch /Applications/Xcode_${{ matrix.xcode }}.app

      run: xcodebuild ... # Run your tests

Running a check for updates can be done automatically or manually by adding a new workflow to the project that runs the update-xcode-version-action action, e.g.:

name: "Check for Xcode Updates"

on:
  # Allow to be run manually
  workflow_dispatch:

  # Run at 8am UTC daily
  schedule:
    - cron: "0 8 * * *"

jobs:
  update-xcode-versions:
    name: Check for Xcode Updates
    runs-on: macOS-latest
    steps:
      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.UPDATE_XCODE_VERSIONS_GITHUB_TOKEN }} # A token that can update workflows, required to push changes to workflow files

      - name: Update Xcode Versions
        uses: josephduffy/update-xcode-version-action@master
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }} # Required to create pull requests, can be the default token provided by GitHub Actions
          xcode-versions-file: .github/xcode-versions.yml # Default, not required, but can be changed

When update-xcode-version-action discovers a change in the resolved versions it will create a pull request with the changes.

Badge Generation

update-xcode-version-action can be configured to create a badge that displays the supported Xcode versions, which fits in well for use in READMEs.

# ...
- name: Update Xcode Versions
  uses: josephduffy/update-xcode-version-action@master
  with:
    xcode-version-badge-path: ./.github/xcode-versions-badge.svg # Provide a path to output the badge to
    xcode-version-badge-versions: "last-major, latest, beta" # A comma separated list of versions to display in the badge. Defaults to "latest".
    # ...

This would produce: Example badge

Update Xcode Version is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.

About

Update Xcode versions used in GitHub Actions workflows
v0.4.0
Latest

Update Xcode Version is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.