diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..7b030c1a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,45 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + branches: + - '*' + workflow_dispatch: + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + library: + name: macOS + strategy: + matrix: + xcode: ['16.3'] + runs-on: macos-15 + steps: + - uses: actions/checkout@v4 + - name: Select Xcode ${{ matrix.xcode }} + run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app + - name: Run tests + run: swift test + - name: Build release + run: swift build -c release + + linux: + name: Linux + strategy: + matrix: + swift: + - '6.1' + runs-on: ubuntu-latest + container: swift:${{ matrix.swift }} + steps: + - uses: actions/checkout@v4 + - name: Install SQLite + run: apt update && apt -y install libsqlite3-dev + - name: Build + run: swift build diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 00000000..9b613e74 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,28 @@ +NB: Compatible swift-format requires Xcode 16.3, not yet available on GitHub +name: Format + +on: + push: + branches: + - main + +concurrency: + group: format-${{ github.ref }} + cancel-in-progress: true + +jobs: + swift_format: + name: swift-format + runs-on: macos-15 + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - name: Select Xcode 16.3 + run: sudo xcode-select -s /Applications/Xcode_16.3.app + - name: Format + run: make format + - uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: Run swift-format + branch: 'main' diff --git a/Package.swift b/Package.swift index 8e1cd79b..4ad6c7f3 100644 --- a/Package.swift +++ b/Package.swift @@ -114,6 +114,21 @@ for index in package.targets.indices { package.targets[index].swiftSettings = swiftSettings } +#if !os(Darwin) + package.targets.append( + .systemLibrary( + name: "StructuredQueriesSQLite3", + providers: [.apt(["libsqlite3-dev"])] + ) + ) + + for index in package.targets.indices { + if package.targets[index].name == "StructuredQueriesSQLite" { + package.targets[index].dependencies.append("StructuredQueriesSQLite3") + } + } +#endif + #if !os(Windows) // Add the documentation compiler plugin if possible package.dependencies.append( diff --git a/README.md b/README.md index 0996ceab..eea7c5d2 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ # StructuredQueries - - [![Slack](https://img.shields.io/badge/slack-chat-informational.svg?label=Slack&logo=slack)](https://www.pointfree.co/slack-invite) [![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fpointfreeco%2Fswift-structured-queries%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/pointfreeco/swift-structured-queries) [![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fpointfreeco%2Fswift-structured-queries%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/pointfreeco/swift-structured-queries) diff --git a/Sources/StructuredQueriesSQLite/Database.swift b/Sources/StructuredQueriesSQLite/Database.swift index 0bd73605..94bc106f 100644 --- a/Sources/StructuredQueriesSQLite/Database.swift +++ b/Sources/StructuredQueriesSQLite/Database.swift @@ -1,7 +1,12 @@ import Foundation -import SQLite3 import StructuredQueries +#if canImport(Darwin) + import SQLite3 +#else + import StructuredQueriesSQLite3 +#endif + public struct Database { @usableFromInline let storage: Storage diff --git a/Sources/StructuredQueriesSQLite/SQLiteQueryDecoder.swift b/Sources/StructuredQueriesSQLite/SQLiteQueryDecoder.swift index 12ab5a70..f891250b 100644 --- a/Sources/StructuredQueriesSQLite/SQLiteQueryDecoder.swift +++ b/Sources/StructuredQueriesSQLite/SQLiteQueryDecoder.swift @@ -1,6 +1,11 @@ -import SQLite3 import StructuredQueries +#if canImport(Darwin) + import SQLite3 +#else + import StructuredQueriesSQLite3 +#endif + @usableFromInline struct SQLiteQueryDecoder: QueryDecoder { @usableFromInline diff --git a/Sources/StructuredQueriesSQLite3/StructuredQueriesSQLite3.h b/Sources/StructuredQueriesSQLite3/StructuredQueriesSQLite3.h new file mode 100644 index 00000000..8e211139 --- /dev/null +++ b/Sources/StructuredQueriesSQLite3/StructuredQueriesSQLite3.h @@ -0,0 +1,4 @@ +#ifndef StructuredQueriesSQLite3 +#define StructuredQueriesSQLite3 +#include +#endif diff --git a/Sources/StructuredQueriesSQLite3/module.modulemap b/Sources/StructuredQueriesSQLite3/module.modulemap new file mode 100644 index 00000000..bbb8d7df --- /dev/null +++ b/Sources/StructuredQueriesSQLite3/module.modulemap @@ -0,0 +1,5 @@ +module StructuredQueriesSQLite3 [system] { + link "sqlite3" + header "StructuredQueriesSQLite3.h" + export * +}