feat: initial release v0.1.0
- Custom Keyboard Extension with push-to-talk UI - iOS 26 SpeechAnalyzer + DictationTranscriber (iOS 18 SF fallback) - OpenAI-compatible LLM client (4 built-in providers + custom) - 3-page onboarding flow + provider config UI - App Group shared storage for cross-process config - 8s LLM timeout with raw-transcript fallback - App Store privacy manifests for both targets - SwiftLint + XcodeGen + GitHub Actions CI - Unit tests (4/4 passing)
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, develop]
|
||||
pull_request:
|
||||
branches: [main, develop]
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
# =========================================================
|
||||
# SwiftLint (light config — fails only on severe issues)
|
||||
# =========================================================
|
||||
lint:
|
||||
name: SwiftLint
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Select Xcode
|
||||
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||
- name: Install SwiftLint
|
||||
run: brew install swiftlint
|
||||
- name: Run SwiftLint
|
||||
run: |
|
||||
swiftlint lint --quiet
|
||||
swiftlint lint --quiet --strict
|
||||
|
||||
# =========================================================
|
||||
# Build the main app + keyboard extension
|
||||
# =========================================================
|
||||
build:
|
||||
name: Build (${{ matrix.destination }})
|
||||
needs: lint
|
||||
runs-on: macos-14
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
destination:
|
||||
- generic/platform=iOS Simulator
|
||||
xcode:
|
||||
- "16.0"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Select Xcode ${{ matrix.xcode }}
|
||||
run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
|
||||
- name: Install XcodeGen
|
||||
run: brew install xcodegen
|
||||
- name: Generate project
|
||||
run: xcodegen generate
|
||||
- name: Build
|
||||
run: |
|
||||
set -o pipefail
|
||||
xcodebuild \
|
||||
-project OSGKeyboard.xcodeproj \
|
||||
-scheme OSGKeyboard \
|
||||
-destination "${{ matrix.destination }}" \
|
||||
-configuration Debug \
|
||||
build \
|
||||
| xcpretty
|
||||
|
||||
# =========================================================
|
||||
# Unit tests
|
||||
# =========================================================
|
||||
test:
|
||||
name: Unit tests
|
||||
needs: lint
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Select Xcode
|
||||
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||
- name: Install XcodeGen
|
||||
run: brew install xcodegen
|
||||
- name: Generate project
|
||||
run: xcodegen generate
|
||||
- name: Run tests
|
||||
run: |
|
||||
set -o pipefail
|
||||
xcodebuild test \
|
||||
-project OSGKeyboard.xcodeproj \
|
||||
-scheme OSGKeyboard \
|
||||
-destination 'platform=iOS Simulator,name=iPhone 17' \
|
||||
-configuration Debug \
|
||||
-only-testing:OSGKeyboardTests \
|
||||
CODE_SIGNING_ALLOWED=NO \
|
||||
| xcpretty
|
||||
Reference in New Issue
Block a user