mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-06 06:58:26 +00:00
Summary: Our CI harness for IGListKit on GitHub recently started to consistently fail at the unit test phase (https://github.com/Instagram/IGListKit/actions/runs/4683650178/jobs/8298963444). After researching it, it looks like GitHub Actions changed some configurations with their older versions of macOS, and our existing build script no longer seems to be working now. The build output seems to imply that Xcode simply hangs when it gets to the testing phase. I decided to take this chance to do a thorough audit of all our build steps and update as many of the dependencies as I could to their latest versions. This has fixed the issue, and hopefully given us a decent amount of future-proofing at the same time. :) Reviewed By: candance Differential Revision: D45002141 fbshipit-source-id: 40b22da4a9282900ff299b5e41f3a8566c4071f0
275 lines
10 KiB
YAML
275 lines
10 KiB
YAML
name: "IGListKit CI"
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
branches:
|
|
- '*'
|
|
|
|
jobs:
|
|
macOS:
|
|
name: Unit Test macOS
|
|
runs-on: macos-12
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.2.app
|
|
WORKSPACE_NAME: IGListKit.xcworkspace
|
|
SCHEME_NAME: IGListKit-macOS
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Cache RubyGems
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: vendor/bundle
|
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gems-
|
|
|
|
- name: Install ruby gems.
|
|
run: bundle install
|
|
|
|
- name: Install pods.
|
|
run: pod install
|
|
|
|
- name: Run unit tests for macOS
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build build-for-testing -workspace "${{ env.WORKSPACE_NAME }}" -scheme "${{ env.SCHEME_NAME }}" -destination "platform=macOS" -configuration Debug ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=YES | bundle exec xcpretty -c
|
|
xcodebuild analyze test-without-building -workspace "${{ env.WORKSPACE_NAME }}" -scheme "${{ env.SCHEME_NAME }}" -destination "platform=macOS" -configuration Debug ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=YES | bundle exec xcpretty -c
|
|
|
|
iOS:
|
|
name: Unit Test iOS
|
|
runs-on: macos-12
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.2.app
|
|
WORKSPACE_NAME: IGListKit.xcworkspace
|
|
SCHEME_NAME: IGListKit
|
|
strategy:
|
|
matrix:
|
|
destination: ["platform=iOS Simulator,name=iPhone 13 Pro"]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Cache RubyGems
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: vendor/bundle
|
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gems-
|
|
|
|
- name: Install ruby gems.
|
|
run: bundle install
|
|
|
|
- name: Install pods.
|
|
run: pod install
|
|
|
|
- name: iOS - ${{ matrix.destination }}
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build build-for-testing -workspace "${{ env.WORKSPACE_NAME }}" -scheme "${{ env.SCHEME_NAME }}" -destination "${{ matrix.destination }}" -configuration Debug ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=YES | bundle exec xcpretty -c
|
|
xcodebuild analyze test-without-building -workspace "${{ env.WORKSPACE_NAME }}" -scheme "${{ env.SCHEME_NAME }}" -destination "${{ matrix.destination }}" -configuration Debug ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=YES | bundle exec xcpretty -c
|
|
|
|
- name: Upload code coverage
|
|
run: bundle exec slather
|
|
env:
|
|
COVERAGE_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
CI_PULL_REQUEST: ${{ github.event.number }}
|
|
GIT_BRANCH: ${{ github.head_ref || github.ref_name }}
|
|
|
|
Cocoapods:
|
|
name: Cocoapods Lint
|
|
runs-on: macos-12
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_13.4.1.app
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Cache RubyGems
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: vendor/bundle
|
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gems-
|
|
|
|
- name: Install ruby gems.
|
|
run: bundle install
|
|
|
|
- name: Run IGListDiffKit podspec lint
|
|
run: bundle exec pod lib lint IGListDiffKit.podspec --allow-warnings
|
|
|
|
- name: Run IGListKit podspec lint
|
|
run: bundle exec pod lib lint IGListKit.podspec --allow-warnings "--include-podspecs=IGListDiffKit.podspec"
|
|
|
|
- name: Run IGListSwiftKit podspec lint
|
|
run: bundle exec pod lib lint IGListSwiftKit.podspec --allow-warnings "--include-podspecs=*.podspec"
|
|
|
|
SPM-layout-generator:
|
|
name: Verify generate_spm_sources_layout.sh is not broken
|
|
runs-on: macos-12
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.2.app
|
|
WORKSPACE_NAME: IGListKit.xcworkspace
|
|
PROJECT_NAME: IGListKit.xcodeproj
|
|
IOS_DESTINATION: "platform=iOS Simulator,name=iPhone 13 Pro"
|
|
SPM_IG_LIST_DIFF_KIT_PUBLIC_HEADERS_PATH: "spm/Sources/IGListDiffKit/include"
|
|
SPM_IG_LIST_DIFF_KIT_SOURCES_PATH: "spm/Sources/IGListDiffKit"
|
|
SPM_IG_LIST_KIT_PUBLIC_HEADERS_PATH: "spm/Sources/IGListKit/include"
|
|
SPM_IG_LIST_KIT_SOURCES_PATH: "spm/Sources/IGListKit"
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Manually clean SPM Sources folder
|
|
run: |
|
|
rm -rf "${{ env.SPM_IG_LIST_DIFF_KIT_PUBLIC_HEADERS_PATH }}/*.*"
|
|
rm -rf "${{ env.SPM_IG_LIST_DIFF_KIT_SOURCES_PATH }}/*.*"
|
|
rm -rf "${{ env.SPM_IG_LIST_KIT_PUBLIC_HEADERS_PATH }}/*.*"
|
|
rm -rf "${{ env.SPM_IG_LIST_KIT_SOURCES_PATH }}/*.*"
|
|
|
|
- name: Regenerate SPM layout
|
|
run: sh scripts/generate_spm_sources_layout.sh
|
|
|
|
- name: Clean project's ${{ env.PROJECT_NAME }} and ${{ env.WORKSPACE_NAME }}
|
|
run: |
|
|
rm -rf "${{ env.WORKSPACE_NAME }}"
|
|
rm -rf "${{ env.PROJECT_NAME }}"
|
|
|
|
- name: Verify IGListKit can be build using Package.swift which was generated by 'scripts/generate_spm_sources_layout.sh'
|
|
run: xcodebuild -scheme "IGListKit" build -destination "${{ env.IOS_DESTINATION }}" | xcpretty
|
|
|
|
SPM-build-from-Package:
|
|
name: Verify SPM build by invoking `xcodebuild` on Package.swift
|
|
runs-on: macos-12
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.2.app
|
|
WORKSPACE_NAME: IGListKit.xcworkspace
|
|
PROJECT_NAME: IGListKit.xcodeproj
|
|
IOS_DESTINATION: "platform=iOS Simulator,name=iPhone 13 Pro"
|
|
strategy:
|
|
matrix:
|
|
schemeName: ["IGListDiffKit",
|
|
"IGListKit",
|
|
"IGListSwiftKit"]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Clean project's ${{ env.PROJECT_NAME }} and ${{ env.WORKSPACE_NAME }}
|
|
run: |
|
|
rm -rf "${{ env.WORKSPACE_NAME }}"
|
|
rm -rf "${{ env.PROJECT_NAME }}"
|
|
|
|
- name: Run ${{ matrix.schemeName}} using Package.swift
|
|
run: xcodebuild -scheme "${{ matrix.schemeName}}" build -destination "${{ env.IOS_DESTINATION }}" | xcpretty
|
|
|
|
Carthage-XCFramework:
|
|
name: Verify Carthage build XCFramework
|
|
runs-on: macos-12
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.2.app
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Carthage build framework
|
|
run: carthage build --no-skip-current --use-xcframeworks
|
|
|
|
Carthage-Legacy-Lipo-Binaries:
|
|
name: Verify Carthage build lipo binaries
|
|
runs-on: macos-11
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_11.7.app
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Carthage build framework
|
|
run: carthage build --no-skip-current
|
|
|
|
Build-Examples:
|
|
name: Build Examples and UI tests.
|
|
runs-on: macos-12
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.2.app
|
|
IOS_EXAMPLE_XCODEPROJ: Examples/Examples-iOS/IGListKitExamples.xcodeproj
|
|
TVOS_EXAMPLE_XCODEPROJ: Examples/Examples-tvOS/IGListKitExamples.xcodeproj
|
|
MACOS_EXAMPLE_XCODEPROJ: Examples/Examples-macOS/IGListKitExamples.xcodeproj
|
|
EXAMPLE_SCHEME: IGListKitExamples
|
|
strategy:
|
|
matrix:
|
|
iosDestination: ["platform=iOS Simulator,name=iPhone 13 Pro"]
|
|
tvOSDestination: ["platform=tvOS Simulator,name=Apple TV 4K (3rd generation)"]
|
|
macOSDestination: ["platform=macOS"]
|
|
macCatalystDestination: ["platform=macOS,variant=Mac Catalyst"]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Cache RubyGems
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: vendor/bundle
|
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gems-
|
|
|
|
- name: Install ruby gems.
|
|
run: bundle install
|
|
|
|
- name: Build iOS Example - ${{ matrix.iosDestination }}
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build -project "${{ env.IOS_EXAMPLE_XCODEPROJ }}" -scheme "${{ env.EXAMPLE_SCHEME }}" -destination "${{ matrix.iosDestination }}" ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO | bundle exec xcpretty -c
|
|
|
|
- name: Run iOS Example's UI Tests - ${{ matrix.iosDestination }}
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build test -project "${{ env.IOS_EXAMPLE_XCODEPROJ }}" -scheme "${{ env.EXAMPLE_SCHEME }}" -destination "${{ matrix.iosDestination }}" -configuration Debug ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO | bundle exec xcpretty -c
|
|
|
|
- name: Build tvOS Example - ${{ matrix.tvOSDestination }}
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build -project "${{ env.TVOS_EXAMPLE_XCODEPROJ }}" -scheme "${{ env.EXAMPLE_SCHEME }}" -destination "${{ matrix.tvOSDestination }}" ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO | bundle exec xcpretty -c
|
|
|
|
- name: Build macOS Example - ${{ matrix.macOSDestination }}
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build -project "${{ env.MACOS_EXAMPLE_XCODEPROJ }}" -scheme "${{ env.EXAMPLE_SCHEME }}" -destination "${{ matrix.macOSDestination }}" ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO | bundle exec xcpretty -c
|
|
|
|
- name: Build Mac Catalyst Example - ${{ matrix.macCatalystDestination }}
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build -project "${{ env.IOS_EXAMPLE_XCODEPROJ }}" -scheme "${{ env.EXAMPLE_SCHEME }}" -destination "${{ matrix.macCatalystDestination }}" ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO | bundle exec xcpretty -c
|
|
|
|
Danger:
|
|
name: Run Danger
|
|
if: github.event_name == 'pull_request'
|
|
runs-on: macos-12
|
|
env:
|
|
DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Cache RubyGems
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: vendor/bundle
|
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gems-
|
|
|
|
- name: Install ruby gems.
|
|
run: bundle install
|
|
|
|
- name: Run Danger
|
|
run: bundle exec danger --verbose
|