diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 0000000..a95036a --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,86 @@ +name: Build and Test + +on: + push: + branches: + - main + pull_request: + branches: + - main + release: + types: [created] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Swift + uses: swift-actions/setup-swift@v2 + with: + swift-version: '6.0' + + - name: Get swift version + run: swift --version + + - name: Run tests + run: swift test + + build-macos: + runs-on: macos-latest + if: github.event_name == 'release' + strategy: + matrix: + arch: [x86_64, arm64] + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Swift + uses: swift-actions/setup-swift@v2 + with: + swift-version: '6.0' + + - name: Get swift version + run: swift --version + + - name: Build for macOS + run: | + swift build -c release --arch ${{ matrix.arch }} + mkdir -p artifacts/macos-${{ matrix.arch }} + cp .build/apple/Products/Release/fishee artifacts/macos-${{ matrix.arch }}/ + + - name: Upload macOS artifacts + uses: actions/upload-artifact@v3 + with: + name: fishee-macos-${{ matrix.arch }}-${{ github.ref_name }} + path: artifacts/macos-${{ matrix.arch }} + + build-linux: + runs-on: ubuntu-latest + if: github.event_name == 'release' + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Swift + uses: swift-actions/setup-swift@v2 + with: + swift-version: '6.0' + + - name: Get swift version + run: swift --version + + - name: Build for Linux + run: | + swift build -c release + mkdir -p artifacts/linux + cp .build/release/fishee artifacts/linux/ + + - name: Upload Linux artifacts + uses: actions/upload-artifact@v3 + with: + name: fishee-linux-${{ github.ref_name }} + path: artifacts/linux diff --git a/Package.swift b/Package.swift index dc2a5fe..88dcba6 100644 --- a/Package.swift +++ b/Package.swift @@ -4,30 +4,34 @@ import PackageDescription let package = Package( - name: "Fishee", - dependencies: [ - .package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMajor(from: "1.5.0")), - .package(url: "https://github.com/duckdb/duckdb-swift", .upToNextMinor(from: .init(1, 1, 0))), - ], - targets: [ - // Targets are the basic building blocks of a package, defining a module or a test suite. - // Targets can depend on other targets in this package and products from dependencies. - .executableTarget( - name: "Fishee", - dependencies: [ - .product(name: "ArgumentParser", package: "swift-argument-parser"), - .product(name: "DuckDB", package: "duckdb-swift"), - ], - path: "Sources" - ), - .testTarget( - name: "FisheeTests", - dependencies: ["Fishee"], - path: "Tests", - resources: [ - .copy("Resources/fish_history_test.txt"), - .copy("Resources/fish_history_test_2.txt"), - ] - ) - ] + name: "Fishee", + products: [ + .executable(name: "fishee", targets: ["Fishee"]) + ], + dependencies: [ + .package( + url: "https://github.com/apple/swift-argument-parser.git", .upToNextMajor(from: "1.5.0")), + .package(url: "https://github.com/duckdb/duckdb-swift", .upToNextMinor(from: .init(1, 1, 0))), + ], + targets: [ + // Targets are the basic building blocks of a package, defining a module or a test suite. + // Targets can depend on other targets in this package and products from dependencies. + .executableTarget( + name: "Fishee", + dependencies: [ + .product(name: "ArgumentParser", package: "swift-argument-parser"), + .product(name: "DuckDB", package: "duckdb-swift"), + ], + path: "Sources" + ), + .testTarget( + name: "FisheeTests", + dependencies: ["Fishee"], + path: "Tests", + resources: [ + .copy("Resources/fish_history_test.txt"), + .copy("Resources/fish_history_test_2.txt"), + ] + ), + ] )