Add github actions workflow

This commit is contained in:
Salar Rahmanian 2025-02-08 19:17:28 -08:00
parent d2b3d2be3c
commit b3ab1e325f
2 changed files with 116 additions and 26 deletions

86
.github/workflows/build-and-test.yml vendored Normal file
View file

@ -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

View file

@ -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"),
]
),
]
)