Add structured validation diagnostics, JSON and Yams comparison gates, and lazy token/event parsing so production behavior is measured without retaining full intermediate parser arrays.
115 lines
3.5 KiB
YAML
115 lines
3.5 KiB
YAML
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
|