Fix cross-platform compilation for Windows and Android #411
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: BushelKit | |
| on: | |
| push: | |
| branches-ignore: | |
| - '*WIP' | |
| env: | |
| PACKAGE_NAME: BushelKit | |
| jobs: | |
| build-ubuntu: | |
| name: Build on Ubuntu | |
| runs-on: ubuntu-latest | |
| if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} | |
| strategy: | |
| matrix: | |
| image: | |
| - swift:6.0 | |
| - swift:6.1 | |
| - swift:6.2 | |
| - swiftlang/swift:nightly-6.3-noble | |
| container: ${{ matrix.image }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: brightdigit/swift-build@v1.5.0-beta.2 | |
| - uses: sersoft-gmbh/swift-coverage-action@v4 | |
| id: coverage-files | |
| with: | |
| fail-on-empty-output: true | |
| - name: Set coverage flag | |
| id: set-flag | |
| run: echo "CODECOV_FLAGS=${MATRIX_IMAGE//\//-}" | sed 's/:/-/g' >> $GITHUB_ENV | |
| env: | |
| MATRIX_IMAGE: ${{ matrix.image }} | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| fail_ci_if_error: true | |
| flags: ${{ env.CODECOV_FLAGS }} | |
| verbose: true | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: ${{ join(fromJSON(steps.coverage-files.outputs.files), ',') }} | |
| build-windows: | |
| name: Build on Windows | |
| runs-on: ${{ matrix.runs-on }} | |
| if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runs-on: [windows-2022, windows-2025] | |
| include: | |
| - swift-version: swift-6.2-release | |
| swift-build: 6.2-RELEASE | |
| - swift-version: swift-6.1-release | |
| swift-build: 6.1-RELEASE | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: brightdigit/swift-build@v1.5.0-beta.2 | |
| with: | |
| windows-swift-version: ${{ matrix.swift-version }} | |
| windows-swift-build: ${{ matrix.swift-build }} | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| fail_ci_if_error: true | |
| flags: swift-${{ matrix.swift-version }},windows | |
| verbose: true | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| os: windows | |
| swift_project: BushelKit | |
| build-android: | |
| name: Build on Android | |
| runs-on: ubuntu-latest | |
| if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| api-level: [28, 33, 34] | |
| swift-version: [swift-6.2-release] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: brightdigit/swift-build@v1.5.0-beta.2 | |
| with: | |
| type: android | |
| android-swift-version: ${{ matrix.swift-version }} | |
| android-api-level: ${{ matrix.api-level }} | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| fail_ci_if_error: true | |
| flags: android-${{ matrix.api-level }},swift-${{ matrix.swift-version }} | |
| verbose: true | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| build-wasm: | |
| name: Build on WASM | |
| runs-on: ubuntu-latest | |
| container: swift:6.2-jammy | |
| if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| wasm-type: [wasm, wasm-embedded] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: brightdigit/swift-build@v1.5.0-beta.2 | |
| with: | |
| type: ${{ matrix.wasm-type }} | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| fail_ci_if_error: true | |
| flags: ${{ matrix.wasm-type }},swift-6.2 | |
| verbose: true | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| build-macos: | |
| name: Build on macOS | |
| env: | |
| PACKAGE_NAME: BushelKit | |
| runs-on: ${{ matrix.runs-on }} | |
| if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # SPM Build Matrix | |
| - runs-on: macos-15 | |
| xcode: "/Applications/Xcode_16.4.app" | |
| - runs-on: macos-26 | |
| xcode: "/Applications/Xcode_26.0.app" | |
| # macOS Build Matrix | |
| - type: macos | |
| runs-on: macos-15 | |
| xcode: "/Applications/Xcode_16.4.app" | |
| - type: macos | |
| runs-on: macos-26 | |
| xcode: "/Applications/Xcode_26.0.app" | |
| # iOS Build Matrix | |
| - type: ios | |
| runs-on: macos-15 | |
| xcode: "/Applications/Xcode_26.0.app" | |
| deviceName: "iPhone Air" | |
| osVersion: "26.0.1" | |
| download-platform: true | |
| - type: ios | |
| runs-on: macos-15 | |
| xcode: "/Applications/Xcode_16.4.app" | |
| deviceName: "iPhone 16" | |
| osVersion: "18.5" | |
| # watchOS Build Matrix | |
| - type: watchos | |
| runs-on: macos-15 | |
| xcode: "/Applications/Xcode_26.0.app" | |
| deviceName: "Apple Watch Series 11 (46mm)" | |
| osVersion: "26.0" | |
| download-platform: true | |
| - type: watchos | |
| runs-on: macos-15 | |
| xcode: "/Applications/Xcode_16.4.app" | |
| deviceName: "Apple Watch Series 10 (42mm)" | |
| osVersion: "11.5" | |
| # visionOS Build Matrix | |
| - type: visionos | |
| runs-on: macos-15 | |
| xcode: "/Applications/Xcode_26.0.app" | |
| deviceName: "Apple Vision Pro" | |
| osVersion: "26.0" | |
| download-platform: true | |
| - type: visionos | |
| runs-on: macos-26 | |
| xcode: "/Applications/Xcode_26.0.app" | |
| deviceName: "Apple Vision Pro" | |
| osVersion: "26.0" | |
| download-platform: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Build and Test | |
| uses: brightdigit/swift-build@v1.5.0-beta.2 | |
| with: | |
| scheme: ${{ env.PACKAGE_NAME }}-Package | |
| type: ${{ matrix.type }} | |
| xcode: ${{ matrix.xcode }} | |
| deviceName: ${{ matrix.deviceName }} | |
| osVersion: ${{ matrix.osVersion }} | |
| download-platform: ${{ matrix.download-platform || false }} | |
| # Common Coverage Steps | |
| - name: Process Coverage | |
| uses: sersoft-gmbh/swift-coverage-action@v4 | |
| - name: Upload Coverage | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| flags: ${{ matrix.type && format('{0}{1}', matrix.type, matrix.osVersion) || 'spm' }} | |
| lint: | |
| name: Linting | |
| if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} | |
| runs-on: ubuntu-latest | |
| needs: [build-ubuntu, build-windows, build-android, build-wasm, build-macos] | |
| env: | |
| MINT_PATH: .mint/lib | |
| MINT_LINK_PATH: .mint/bin | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Restore mint cache | |
| id: cache-mint | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: | | |
| .mint | |
| Mint | |
| key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }} | |
| restore-keys: | | |
| ${{ runner.os }}-mint- | |
| - name: Install mint | |
| if: steps.cache-mint.outputs.cache-matched-key == '' | |
| run: | | |
| git clone https://github.com/yonaskolb/Mint.git | |
| cd Mint | |
| swift run mint install yonaskolb/mint | |
| - name: Save mint cache | |
| if: steps.cache-mint.outputs.cache-matched-key == '' && success() | |
| uses: actions/cache/save@v4 | |
| with: | |
| path: | | |
| .mint | |
| Mint | |
| key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }} | |
| - name: Lint | |
| run: ./Scripts/lint.sh | |
| build-docc: | |
| name: Build DocC | |
| needs: [lint] | |
| runs-on: ubuntu-latest | |
| container: | |
| image: swift:6.1-noble | |
| volumes: | |
| - ${{ github.workspace }}:/workspace | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cache swift package modules | |
| id: cache-spm-linux | |
| uses: actions/cache@v4 | |
| env: | |
| cache-name: cache-spm | |
| with: | |
| path: .build | |
| key: ${{ runner.os }}-${{ env.cache-name }}-6.1-${{ hashFiles('Package.resolved') }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ env.cache-name }}-6.1- | |
| ${{ runner.os }}-${{ env.cache-name }}- | |
| - name: Build DocC | |
| run: swift package generate-documentation --platform "name=macos,version=15.1" --transform-for-static-hosting --hosting-base-path "swift-docc" --disable-indexing --enable-experimental-combined-documentation | |
| - name: Package DocArchive | |
| if: github.ref == 'refs/heads/main' | |
| working-directory: .build/plugins/Swift-DocC/outputs | |
| run: tar -cf BushelKit.doccarchive.tar BushelKit.doccarchive | |
| - name: Upload a Build Artifact | |
| uses: actions/upload-artifact@v4 | |
| if: github.ref == 'refs/heads/main' | |
| with: | |
| overwrite: true | |
| path: /workspace/.build/plugins/Swift-DocC/outputs/BushelKit.doccarchive.tar | |
| retention-days: 30 | |
| - uses: peter-evans/repository-dispatch@v3 | |
| if: github.ref == 'refs/heads/main' | |
| with: | |
| token: ${{ secrets.PAT_TOKEN }} | |
| repository: brightdigit/BushelDocs | |
| event-type: docc-update | |
| client-payload: '{"run_id": "${{ github.run_id }}"}' |