mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-24 09:48:21 +00:00
Summary: After landing the diff to add a privacy manifest to IGListKit's SPM package, the `Carthage-Legacy-Lipo-Binaries` build pipeline started failing. Looking into it, this is because in order to support bundled resources in a Swift Package (Which is necessary to staple the manifest to the framework), the build tools version must be set at Swift 5.3. Meanwhile, the legacy build pipeline requires Xcode 11 in order to support the `lipo` command, and that one only goes up to Swift build tools 5.2. The reason why XCFramework superseded fat binaries is because fat binaries may only have 1 slice of any given architecture in it (eg arm64). And with Apple Silicon, 2 arm64 slices (One for the iOS Simulator, and one for iOS hardware) are basically the norm now. With that in mind, now that the Apple Silicon transition is complete, and in order to properly support privacy manifests, I think it's time we retire the `lipo` build pipeline in favour of supporting just the XCFramework route. Reviewed By: benhgreen Differential Revision: D55005596 fbshipit-source-id: ad9bc9512160065dfc699cd05d2bb1e92883e957
270 lines
10 KiB
YAML
270 lines
10 KiB
YAML
name: "IGListKit CI"
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
branches:
|
|
- '*'
|
|
|
|
jobs:
|
|
macOS:
|
|
name: Unit Test macOS
|
|
runs-on: macos-13
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.3.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-13
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.3.app
|
|
WORKSPACE_NAME: IGListKit.xcworkspace
|
|
SCHEME_NAME: IGListKit
|
|
strategy:
|
|
matrix:
|
|
destination: ["platform=iOS Simulator,name=iPhone 14 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-13
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.3.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-13
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.3.app
|
|
WORKSPACE_NAME: IGListKit.xcworkspace
|
|
PROJECT_NAME: IGListKit.xcodeproj
|
|
IOS_DESTINATION: "platform=iOS Simulator,name=iPhone 14 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-13
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.3.app
|
|
WORKSPACE_NAME: IGListKit.xcworkspace
|
|
PROJECT_NAME: IGListKit.xcodeproj
|
|
IOS_DESTINATION: "platform=iOS Simulator,name=iPhone 14 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-13
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.3.app
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Carthage build framework
|
|
run: carthage build --no-skip-current --use-xcframeworks
|
|
|
|
Build-Examples:
|
|
name: Build Examples and UI tests.
|
|
runs-on: macos-13
|
|
env:
|
|
DEVELOPER_DIR: /Applications/Xcode_14.3.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 14 Pro,OS=16.4"]
|
|
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: Preboot iOS Simulator
|
|
uses: futureware-tech/simulator-action@v2
|
|
with:
|
|
model: 'iPhone 14 Pro'
|
|
os_version: '=16.4'
|
|
|
|
- name: Build iOS Example - ${{ matrix.iosDestination }}
|
|
run: |
|
|
set -o pipefail
|
|
xcodebuild build build-for-testing -project "${{ env.IOS_EXAMPLE_XCODEPROJ }}" -scheme "${{ env.EXAMPLE_SCHEME }}" -destination "${{ matrix.iosDestination }}" -configuration Debug ONLY_ACTIVE_ARCH=YES 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=YES 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 }}" -configuration Debug ONLY_ACTIVE_ARCH=YES 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 }}" -configuration Debug ONLY_ACTIVE_ARCH=YES 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 }}" -configuration Debug ONLY_ACTIVE_ARCH=YES CODE_SIGNING_REQUIRED=NO | bundle exec xcpretty -c
|
|
|
|
Danger:
|
|
name: Run Danger
|
|
if: github.event_name == 'pull_request'
|
|
runs-on: macos-13
|
|
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
|
|
|