name: CI # PureYAML is a root Swift package. CI must prove macOS, Linux, Windows, and WASM. on: push: branches: [main] pull_request: workflow_dispatch: schedule: - cron: "0 6 * * 1" permissions: contents: read issues: read jobs: macos: name: macOS runs-on: macos-latest steps: - uses: actions/checkout@v6 - name: Install format and lint tools run: brew install swiftformat swiftlint - name: Repository gates env: GH_TOKEN: ${{ github.token }} run: | bash scripts/check-style.sh bash scripts/check-namespacing.sh bash scripts/check-forbidden-patterns.sh git fetch origin main --depth=1 || true BASE_REF=origin/main bash scripts/check-changelog-touched.sh - name: Format and lint run: | swiftformat . --config .swiftformat --lint swiftlint --config .swiftlint.yml --strict - name: Build and test run: | swift build swift test swift build -c release swift test -c release linux: name: Linux runs-on: ubuntu-latest container: swift:6.2 steps: - uses: actions/checkout@v6 - name: Build and test run: bash scripts/check-linux.sh windows: name: Windows runs-on: windows-2022 timeout-minutes: 45 steps: - uses: actions/checkout@v6 - name: Install Swift uses: compnerd/gha-setup-swift@main with: swift-version: swift-6.3.2-release swift-build: 6.3.2-RELEASE - name: Build and test shell: pwsh run: ./scripts/check-windows.ps1 wasm: name: WASM runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Install Swift toolchain dependencies run: | sudo apt-get update sudo apt-get install -y libcurl4-openssl-dev - name: Install swiftly run: | curl -L https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz > swiftly.tar.gz tar zxf swiftly.tar.gz ./swiftly init --quiet-shell-followup --assume-yes --skip-install - name: Install Swift 6.3.2 and Wasm SDK run: | . "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" swiftly install --use 6.3.2 swift sdk install https://download.swift.org/swift-6.3.2-release/wasm-sdk/swift-6.3.2-RELEASE/swift-6.3.2-RELEASE_wasm.artifactbundle.tar.gz --checksum a61f0584c93283589f8b2f42db05c1f9a182b506c2957271402992655591dd7c - name: Build for WASM run: | . "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" bash scripts/check-wasm.sh corpus: name: Corpus if: github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' runs-on: macos-latest steps: - uses: actions/checkout@v6 - name: Run corpus gates run: | bash scripts/check-json-compatibility.sh bash scripts/check-corpus.sh bash scripts/check-yams-differential.sh bash scripts/check-yams-diagnostics.sh bash scripts/check-yams-validation.sh bash scripts/check-throughput.sh bash scripts/check-performance-phases.sh - name: Upload corpus artifacts if: always() uses: actions/upload-artifact@v6 with: name: pureyaml-corpus-${{ runner.os }}-${{ github.sha }} path: .build/pureyaml-artifacts retention-days: 30