Skip to content

Merge pull request #40 from gumob:release/v2.2.0 #43

Merge pull request #40 from gumob:release/v2.2.0

Merge pull request #40 from gumob:release/v2.2.0 #43

Workflow file for this run

# This workflow will build a Swift project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift
name: main
on:
push:
# branches:
# - develop
branches-ignore:
- "release/**"
- "feature/**"
paths:
- .github/workflows/**
- .swiftlint.yml
- Package.swift
- Punycode.podspec
- Punycode.xcodeproj/**
- Source/**
- Tests/**
pull_request:
# branches:
# - develop
branches-ignore:
- "release/**"
- "feature/**"
paths:
- .github/workflows/**
- .swiftlint.yml
- Package.swift
- Punycode.podspec
- Punycode.xcodeproj/**
- Source/**
- Tests/**
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
swiftlint:
name: SwiftLint
runs-on: macos-14
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install SwiftLint
run: brew install swiftlint
- name: Lint
run: |
set -o pipefail
swiftlint lint --quiet | sed -E 's/^(.*):([0-9]+):([0-9]+): (warning|error|[^:]+): (.*)/::\4 title=Lint error,file=\1,line=\2,col=\3::\5\n\1:\2:\3/'
### ref: https://github.com/Alamofire/Alamofire/blob/master/.github/workflows/ci.yml
test_macOS:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
include:
- xcode: "Xcode_15.4"
runsOn: macos-14
name: "Test: macOS 14, Xcode 15.4, Swift 5.10"
testPlan: "macOS"
outputFilter: xcbeautify --renderer github-actions
- xcode: "Xcode_15.2"
runsOn: macos-14
name: "Test: macOS 14, Xcode 15.2, Swift 5.9.2"
testPlan: "macOS"
outputFilter: xcbeautify --renderer github-actions
- xcode: "Xcode_14.3.1"
runsOn: macOS-13
name: "Test: macOS 13, Xcode 14.3.1, Swift 5.8.0"
testPlan: "macOS"
outputFilter: xcbeautify --renderer github-actions
- xcode: "Xcode_14.2"
runsOn: macOS-12
name: "Test: macOS 12, Xcode 14.2, Swift 5.7.2"
testPlan: "macOS"
outputFilter: xcpretty
steps:
- uses: actions/checkout@v4
- name: ${{ matrix.name }}
run: |-
set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Punycode.xcodeproj" -scheme "Punycode-macOS" -destination "platform=macOS" clean test | ${{ matrix.outputFilter }}
needs: swiftlint
# test_Catalyst:
# name: ${{ matrix.name }}
# runs-on: ${{ matrix.runsOn }}
# env:
# DEVELOPER_DIR: /Applications/${{ matrix.xcode }}.app/Contents/Developer
# timeout-minutes: 10
# strategy:
# fail-fast: false
# matrix:
# include:
# - xcode: "Xcode_15.4"
# name: "Test: Catalyst 15.4"
# runsOn: macos-14
# - xcode: "Test: Xcode_14.3.1"
# name: "Catalyst 14.3.1"
# runsOn: macOS-13
# steps:
# - uses: actions/checkout@v4
# - name: Catalyst
# run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Punycode.xcodeproj" -scheme "Punycode-iOS" -destination "platform=macOS" clean test 2>&1 | xcbeautify --renderer github-actions
test_iOS:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
include:
- destination: "OS=17.5,name=iPhone 15 Pro"
name: "Test: iOS 17.6"
testPlan: "iOS"
xcode: "Xcode_15.4"
runsOn: macos-14
- destination: "OS=16.4,name=iPhone 14 Pro"
name: "Test: iOS 16.4"
testPlan: "iOS"
xcode: "Xcode_14.3.1"
runsOn: macOS-13
steps:
- uses: actions/checkout@v4
- name: ${{ matrix.name }}
run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Punycode.xcodeproj" -scheme "Punycode-iOS" -destination "${{ matrix.destination }}" clean test 2>&1 | xcbeautify --renderer github-actions
needs: swiftlint
test_tvOS:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
DEVELOPER_DIR: /Applications/${{ matrix.xcode }}.app/Contents/Developer
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
include:
- destination: "OS=17.5,name=Apple TV"
name: "Test: tvOS 17.5"
testPlan: "tvOS"
xcode: "Xcode_15.4"
runsOn: macos-14
- destination: "OS=16.4,name=Apple TV"
name: "Test: tvOS 16.4"
testPlan: "tvOS"
xcode: "Xcode_14.3.1"
runsOn: macOS-13
steps:
- uses: actions/checkout@v4
- name: ${{ matrix.name }}
run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Punycode.xcodeproj" -scheme "Punycode-tvOS" -destination "${{ matrix.destination }}" clean test 2>&1 | xcbeautify --renderer github-actions
needs: swiftlint
# test_visionOS:
# name: ${{ matrix.name }}
# runs-on: ${{ matrix.runsOn }}
# env:
# DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
# timeout-minutes: 10
# strategy:
# fail-fast: false
# matrix:
# include:
# - destination: "OS=1.2,name=Apple Vision Pro"
# name: "Test: visionOS 1.2"
# testPlan: "visionOS"
# scheme: "Punycode visionOS"
# xcode: "Xcode_15.4"
# runsOn: macos-14
# steps:
# - uses: actions/checkout@v4
# - name: ${{ matrix.name }}
# run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Punycode.xcodeproj" -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" clean test 2>&1 | xcbeautify --renderer github-actions
# test_watchOS:
# name: ${{ matrix.name }}
# runs-on: ${{ matrix.runsOn }}
# env:
# DEVELOPER_DIR: /Applications/${{ matrix.xcode }}.app/Contents/Developer
# timeout-minutes: 10
# strategy:
# fail-fast: false
# matrix:
# include:
# - destination: "OS=10.5,name=Apple Watch Series 9 (45mm)"
# name: "Test: watchOS 10.5"
# testPlan: "watchOS"
# xcode: "Xcode_15.4"
# runsOn: macos-14
# - destination: "OS=9.4,name=Apple Watch Series 8 (45mm)"
# name: "Test: watchOS 9.4"
# testPlan: "watchOS"
# xcode: "Xcode_14.3.1"
# runsOn: macOS-13
# steps:
# - uses: actions/checkout@v4
# - name: ${{ matrix.name }}
# run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Punycode.xcodeproj" -scheme "Punycode-watchOS" -destination "${{ matrix.destination }}" clean test 2>&1 | xcbeautify --renderer github-actions
SPM:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
include:
- xcode: "Xcode_15.4"
runsOn: macOS-14
name: "SPM: macOS 14, Swift 5.10"
outputFilter: xcbeautify --renderer github-actions
- xcode: "Xcode_15.2"
runsOn: macOS-14
name: "SPM: macOS 14, Swift 5.9.2"
outputFilter: xcbeautify --renderer github-actions
- xcode: "Xcode_14.3.1"
runsOn: macOS-13
name: "SPM: macOS 13, Swift 5.8.0"
outputFilter: xcbeautify --renderer github-actions
- xcode: "Xcode_14.2"
runsOn: macOS-12
name: "SPM: macOS 12, Swift 5.7.2"
outputFilter: xcpretty
steps:
- uses: actions/checkout@v4
- name: Test SPM
run: swift test -c debug 2>&1 | ${{ matrix.outputFilter }}
needs: [test_macOS, test_iOS, test_tvOS]
carthage:
runs-on: macos-14
strategy:
fail-fast: true
matrix:
# platform: ["ios", "macos", "tvos", "visionos", "watchos --skip-tests"]
platform: ["ios", "macos", "tvos"]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run SwiftLint and Build Carthage for ${{ matrix.platform }}
run: |
carthage build \
--no-skip-current \
--platform ${{ matrix.platform }} \
--use-xcframeworks \
--cache-builds
needs: SPM
cocoapods:
runs-on: macos-14
strategy:
fail-fast: true
matrix:
### watchOS fails linting when there are test, wedge in --skip-tests for those runs.
scheme: ["Punycode-iOS", "Punycode-macOS", "Punycode-tvOS"]
# platform: ["ios", "macos", "tvos", "visionos", "watchos --skip-tests"]
platform: ["ios", "macos", "tvos"]
configuration: ["Debug", "Release"]
steps:
### The "macos-14" image defaults to 15.0.1, select the newer Xcode.
- name: Xcode version
run: sudo xcode-select -switch /Applications/Xcode_15.4.app
### The "macos-14" image has CocoaPods 1.14.x, and 1.15 is needed for visionOS
- name: Update CocoaPods
if: ${{ matrix.platform == 'visionos' }}
run: gem install cocoapods
- name: Checkout
uses: actions/checkout@v4
### Manually expanding out static frameworks to avoid making to many jobs.
- name: Pod lib lint
run: |
pod lib lint --verbose \
--configuration=${{ matrix.configuration }} \
--platforms=${{ matrix.platform }} \
Punycode.podspec
- name: Pod lib lint - Use Static Frameworks
run: |
pod lib lint --verbose --use-static-frameworks \
--configuration=${{ matrix.configuration }} \
--platforms=${{ matrix.platform }} \
Punycode.podspec
needs: carthage