Skip to content

Enable fork PRs CI to run codecov #191

Enable fork PRs CI to run codecov

Enable fork PRs CI to run codecov #191

Workflow file for this run

name: CI
on:
push:
branches:
- master
tags:
- '[0-9]+\.[0-9]+\.[0-9]+'
pull_request_target: # forks don't have access to secrets if we use `pull_request`, which is required for codecov
branches:
- master
types: [labeled] # ensure PRs are labelled, which can only be done by users with triage access
env:
# https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#xcode
DEVELOPER_DIR: "/Applications/Xcode_15.2.app/Contents/Developer"
IOS_DESTINATION: "platform=iOS Simulator,name=iPhone 15 Pro,OS=latest"
concurrency:
# cancel in progress jobs only from PRs, as run_id is unique
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
jobs:
env-details:
name: Environment details
runs-on: macos-14
if: ${{ if: startsWith(github.ref, 'refs/tags/') || contains(github.event.pull_request.labels.*.name, 'ready for ci') }}

Check failure on line 28 in .github/workflows/ci.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/ci.yml

Invalid workflow file

You have an error in your yaml syntax on line 28
steps:
- name: xcode version
run: xcodebuild -version -sdk
- name: list simulators
run: |
xcrun simctl delete unavailable
xcrun simctl list
- name: brew version
run: brew --version
build-test:
name: Build and Test
runs-on: macos-14
if: ${{ if: startsWith(github.ref, 'refs/tags/') || contains(github.event.pull_request.labels.*.name, 'ready for ci') }}
env:
WORKSPACE: Alicerce.xcworkspace
SCHEME: Alicerce
DERIVED_DATA_PATH: /tmp/DerivedData
SPM_CLONED_DEPENDENCIES_PATH: /tmp/spm-dependencies
RESULT_BUNDLE_PATH: build-test.xcresult
COBERTURA_REPORT_PATH: coverage.xml
LOG_PATH: xcodebuild.log
steps:
- name: git checkout
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: set Homebrew cache path
run: |
HOMEBREW_CACHE_DIR="$(brew --cache)"
echo "Homebrew cache directory: $HOMEBREW_CACHE_DIR"
echo "HOMEBREW_CACHE_PATH=$HOMEBREW_CACHE_DIR" >> "$GITHUB_ENV"
- name: cache Homebrew
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.HOMEBREW_CACHE_PATH }}
key: ${{ runner.os }}-brew-${{ hashFiles('**/Brewfile.lock.json') }}
restore-keys: ${{ runner.os }}-brew-
- name: install Homebrew formulas
run: |
brew update
brew bundle install
- name: cache SPM
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.SPM_CLONED_DEPENDENCIES_PATH }}
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: ${{ runner.os }}-spm-
- name: cache DerivedData
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.DERIVED_DATA_PATH }}
key: ${{ runner.os }}-DerivedData-${{ hashFiles('**/Package.resolved') }}
restore-keys: ${{ runner.os }}-DerivedData-
- name: unit tests
run: |
set -o pipefail
xcodebuild clean build test \
-workspace "$WORKSPACE" \
-scheme "$SCHEME" \
-destination "$IOS_DESTINATION" \
-derivedDataPath "$DERIVED_DATA_PATH" \
-enableCodeCoverage YES \
-resultBundlePath "$RESULT_BUNDLE_PATH" \
-onlyUsePackageVersionsFromResolvedFile \
-skipPackagePluginValidation \
-skipMacroValidation \
-clonedSourcePackagesDirPath $SPM_CLONED_DEPENDENCIES_PATH \
| tee $LOG_PATH \
| xcbeautify
# https://about.codecov.io/blog/pre-converting-xcresult-files-for-codecov-using-xcresultparser/
- name: convert .xcresult bundle
run: |
set -o pipefail
xcresultparser \
--output-format cobertura \
"$RESULT_BUNDLE_PATH" >"$COBERTURA_REPORT_PATH"
- name: codecov upload
uses: codecov/codecov-action@v4
with:
plugin: xcode
file: ${{ env.COBERTURA_REPORT_PATH }}
token: ${{ secrets.CODECOV_TOKEN }}
- name: Archive artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: artifacts
path: |
${{ env.RESULT_BUNDLE_PATH }}
${{ env.COBERTURA_REPORT_PATH }}
${{ env.LOG_PATH }}
swiftpm:
name: SwiftPM Build
runs-on: macos-14
if: ${{ if: startsWith(github.ref, 'refs/tags/') || contains(github.event.pull_request.labels.*.name, 'ready for ci') }}
env:
WORKSPACE: Alicerce.xcworkspace
SCHEME: "Alicerce (SPM)"
DERIVED_DATA_PATH: /tmp/DerivedData
SPM_CLONED_DEPENDENCIES_PATH: /tmp/spm-dependencies
LOG_PATH: spm-xcodebuild.log
steps:
- name: git checkout
uses: actions/checkout@v3
- name: set Homebrew cache path
run: |
HOMEBREW_CACHE_DIR="$(brew --cache)"
echo "Homebrew cache directory: $HOMEBREW_CACHE_DIR"
echo "HOMEBREW_CACHE_PATH=$HOMEBREW_CACHE_DIR" >> "$GITHUB_ENV"
- name: cache Homebrew
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.HOMEBREW_CACHE_PATH }}
key: ${{ runner.os }}-brew-${{ hashFiles('**/Brewfile.lock.json') }}
restore-keys: ${{ runner.os }}-brew-
- name: install Homebrew formulas
run: |
brew update
brew bundle install
- name: cache SPM
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.SPM_CLONED_DEPENDENCIES_PATH }}
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: ${{ runner.os }}-spm-
- name: cache DerivedData
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.DERIVED_DATA_PATH }}
key: ${{ runner.os }}-DerivedData-${{ hashFiles('**/Package.resolved') }}
restore-keys: ${{ runner.os }}-DerivedData-
- name: build
run: |
set -o pipefail
xcodebuild clean build \
-workspace "$WORKSPACE" \
-scheme "$SCHEME" \
-destination "$IOS_DESTINATION" \
-derivedDataPath $DERIVED_DATA_PATH \
-onlyUsePackageVersionsFromResolvedFile \
-skipPackagePluginValidation \
-skipMacroValidation \
-clonedSourcePackagesDirPath $SPM_CLONED_DEPENDENCIES_PATH \
| tee $LOG_PATH \
| xcbeautify
- name: Archive logs
if: always()
uses: actions/upload-artifact@v4
with:
name: spm-xcodebuild.log
path: ${{ env.LOG_PATH }}
cocoapods:
name: CocoaPods Verification
runs-on: macos-14
if: ${{ if: startsWith(github.ref, 'refs/tags/') || contains(github.event.pull_request.labels.*.name, 'ready for ci') }}
steps:
- name: git checkout
uses: actions/checkout@v3
- name: ruby versions
run: |
ruby --version
gem --version
bundler --version
- name: cache gems
uses: actions/cache@v4
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: ${{ runner.os }}-gem-
- name: bundle install
run: |
gem install bundler --no-document
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: pod lint
run: bundle exec pod lib lint
carthage:
name: Carthage Verification
runs-on: macos-14
if: ${{ if: startsWith(github.ref, 'refs/tags/') || contains(github.event.pull_request.labels.*.name, 'ready for ci') }}
env:
# Use Xcode 15.3 (latest) for Carthage to avoid iOS device/simulator version mismatches
DEVELOPER_DIR: "/Applications/Xcode_15.3.app/Contents/Developer"
DERIVED_DATA_PATH: /tmp/DerivedData
LOG_PATH: carthage.log
steps:
- name: git checkout
uses: actions/checkout@v3
- name: set Homebrew cache path
run: |
HOMEBREW_CACHE_DIR="$(brew --cache)"
echo "Homebrew cache directory: $HOMEBREW_CACHE_DIR"
echo "HOMEBREW_CACHE_PATH=$HOMEBREW_CACHE_DIR" >> "$GITHUB_ENV"
- name: cache Homebrew
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.HOMEBREW_CACHE_PATH }}
key: ${{ runner.os }}-brew-${{ hashFiles('**/Brewfile.lock.json') }}
restore-keys: ${{ runner.os }}-brew-
- name: install Homebrew formulas
run: |
brew update
brew bundle install
- name: cache DerivedData
uses: actions/cache@v4
with:
save-always: true
path: ${{ env.DERIVED_DATA_PATH }}
key: ${{ runner.os }}-DerivedData-${{ hashFiles('**/Package.resolved') }}
restore-keys: ${{ runner.os }}-DerivedData-
- name: carthage build
run: |
defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES
# remove SPM scheme because Carthage builds all shared schemes...
rm ".swiftpm/xcode/xcshareddata/xcschemes/Alicerce (SPM).xcscheme"
./script/carthage.sh build \
--cache-builds \
--no-skip-current \
--use-xcframeworks \
--derived-data $DERIVED_DATA_PATH \
--log-path $LOG_PATH
- name: Archive logs
if: always()
uses: actions/upload-artifact@v4
with:
name: carthage.log
path: ${{ env.LOG_PATH }}
release-github:
name: GitHub Release
runs-on: macos-14
needs: [build-test, swiftpm, cocoapods, carthage]
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: git checkout
uses: actions/checkout@v3
- name: create release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
body: |
# Changes
- <!-- Insert changes here -->
release-cocoapods:
name: CocoaPods Release
runs-on: macos-14
needs: [build-test, swiftpm, cocoapods, carthage]
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: git checkout
uses: actions/checkout@v3
- name: ruby versions
run: |
ruby --version
gem --version
bundler --version
- name: cache gems
uses: actions/cache@v4
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: ${{ runner.os }}-gem-
- name: bundle install
run: |
gem install bundler --no-document
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: pod trunk push
env:
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
run: pod trunk push --allow-warnings