You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2025/06/07 21:32:10 UTC
(arrow-swift) branch main updated: chore: Enable CI (#27)
This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-swift.git
The following commit(s) were added to refs/heads/main by this push:
new 36e45ef chore: Enable CI (#27)
36e45ef is described below
commit 36e45ef04a48108ee7593f5925c36f19d0df2541
Author: Sutou Kouhei <ko...@clear-code.com>
AuthorDate: Sun Jun 8 06:32:04 2025 +0900
chore: Enable CI (#27)
## What's Changed
Add a GitHub Actions workflow for building and testing.
Closes #3.
---
.dockerallow | 18 ++++
.env | 43 ++++++++++
.github/dependabot.yml | 7 ++
.github/workflows/test.yaml | 45 ++++++++++
.gitignore | 19 +++++
Arrow/.gitignore | 1 -
Arrow/Package.resolved | 24 ++++++
ArrowFlight/.gitignore | 1 -
ArrowFlight/Package.resolved | 195 +++++++++++++++++++++++++++++++++++++++++++
Package.resolved | 195 +++++++++++++++++++++++++++++++++++++++++++
ci/docker/ubuntu.dockerfile | 26 ++++++
ci/scripts/build.sh | 69 +++++++++++++++
ci/scripts/test.sh | 39 +++++++++
compose.yaml | 58 +++++++++++++
14 files changed, 738 insertions(+), 2 deletions(-)
diff --git a/.dockerallow b/.dockerallow
new file mode 100644
index 0000000..b18aa8e
--- /dev/null
+++ b/.dockerallow
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# We don't use anything when build a Docker image for now.
diff --git a/.env b/.env
new file mode 100644
index 0000000..7c57f5c
--- /dev/null
+++ b/.env
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Empty prefix means that the Docker Compose configuration will use named
+# volumes which potentially improves the performance on Docker for macOS and
+# Docker for Windows, it also prevents the contamination of the source
+# directory.
+# A non-empty prefix means that directories from the host are bind-mounted
+# into the container, it should be set to ".docker/" on GitHub Actions to keep
+# the cache plugin functional.
+DOCKER_VOLUME_PREFIX=
+
+# turn on inline build cache, this is a docker buildx feature documented
+# at https://github.com/docker/buildx#--cache-tonametypetypekeyvalue
+BUILDKIT_INLINE_CACHE=1
+COMPOSE_DOCKER_CLI_BUILD=1
+DOCKER_BUILDKIT=1
+
+# different architecture notations
+ARCH=amd64
+
+# Default repository to pull and push images from
+REPO=ghcr.io/apache/arrow-swift-dev
+
+# Default versions for platforms
+UBUNTU_CODE_NAME=noble
+
+# Default versions for various dependencies
+SWIFT=5.10
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 09231c2..74b2ecc 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -24,6 +24,13 @@ updates:
commit-message:
prefix: "chore: "
open-pull-requests-limit: 10
+ - package-ecosystem: "swift"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ commit-message:
+ prefix: "chore: "
+ open-pull-requests-limit: 10
- package-ecosystem: "swift"
directory: "/Arrow/"
schedule:
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 3553a3c..3d2f707 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -54,3 +54,48 @@ jobs:
- name: Run pre-commit
run: |
pre-commit run --show-diff-on-failure --color=always --all-files
+
+ docker:
+ name: Ubuntu Swift 5.10
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ env:
+ DOCKER_VOLUME_PREFIX: .docker/
+ steps:
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ - name: Cache
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ with:
+ path: .docker
+ key: docker-${{ hashFiles('**/Package.resolved', '**/go.sum') }}
+ restore-keys: docker-
+ - name: Pull
+ run: |
+ docker compose pull --ignore-pull-failures ubuntu
+ - name: Build
+ run: |
+ docker compose build ubuntu
+ - name: Run
+ run: |
+ docker compose run --rm ubuntu
+ - name: Fix permission for .docker/
+ if: always()
+ run: |
+ sudo chown -R ${USER}: .docker
+ - name: Login to GitHub Container registry
+ if: >-
+ github.event_name == 'push' &&
+ github.repository == 'apache/arrow-swift' &&
+ github.ref_name == 'main'
+ uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Push
+ if: >-
+ github.event_name == 'push' &&
+ github.repository == 'apache/arrow-swift' &&
+ github.ref_name == 'main'
+ run: |
+ docker compose push ubuntu
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b2a9b80
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+/.build/
+/.docker/
diff --git a/Arrow/.gitignore b/Arrow/.gitignore
index d561187..b63bf7f 100644
--- a/Arrow/.gitignore
+++ b/Arrow/.gitignore
@@ -6,4 +6,3 @@ xcuserdata/
DerivedData/
.swiftpm/
.netrc
-Package.resolved
\ No newline at end of file
diff --git a/Arrow/Package.resolved b/Arrow/Package.resolved
new file mode 100644
index 0000000..26e0dea
--- /dev/null
+++ b/Arrow/Package.resolved
@@ -0,0 +1,24 @@
+{
+ "originHash" : "e67f1e8991668b9995542ad611ac8d108d6689394edfa3a2597eeb3995615ec3",
+ "pins" : [
+ {
+ "identity" : "flatbuffers",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/google/flatbuffers.git",
+ "state" : {
+ "branch" : "v25.2.10",
+ "revision" : "1c514626e83c20fffa8557e75641848e1e15cd5e"
+ }
+ },
+ {
+ "identity" : "swift-atomics",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-atomics.git",
+ "state" : {
+ "revision" : "b601256eab081c0f92f059e12818ac1d4f178ff7",
+ "version" : "1.3.0"
+ }
+ }
+ ],
+ "version" : 3
+}
diff --git a/ArrowFlight/.gitignore b/ArrowFlight/.gitignore
index d561187..b63bf7f 100644
--- a/ArrowFlight/.gitignore
+++ b/ArrowFlight/.gitignore
@@ -6,4 +6,3 @@ xcuserdata/
DerivedData/
.swiftpm/
.netrc
-Package.resolved
\ No newline at end of file
diff --git a/ArrowFlight/Package.resolved b/ArrowFlight/Package.resolved
new file mode 100644
index 0000000..351df12
--- /dev/null
+++ b/ArrowFlight/Package.resolved
@@ -0,0 +1,195 @@
+{
+ "originHash" : "8aa0aeba452ce44a74de9eec71fef142d262ac569314743fc16523e396ae4124",
+ "pins" : [
+ {
+ "identity" : "flatbuffers",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/google/flatbuffers.git",
+ "state" : {
+ "branch" : "v25.2.10",
+ "revision" : "1c514626e83c20fffa8557e75641848e1e15cd5e"
+ }
+ },
+ {
+ "identity" : "grpc-swift",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/grpc/grpc-swift.git",
+ "state" : {
+ "revision" : "a56a157218877ef3e9625f7e1f7b2cb7e46ead1b",
+ "version" : "1.26.1"
+ }
+ },
+ {
+ "identity" : "swift-algorithms",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-algorithms.git",
+ "state" : {
+ "revision" : "87e50f483c54e6efd60e885f7f5aa946cee68023",
+ "version" : "1.2.1"
+ }
+ },
+ {
+ "identity" : "swift-asn1",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-asn1.git",
+ "state" : {
+ "revision" : "a54383ada6cecde007d374f58f864e29370ba5c3",
+ "version" : "1.3.2"
+ }
+ },
+ {
+ "identity" : "swift-async-algorithms",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-async-algorithms.git",
+ "state" : {
+ "revision" : "042e1c4d9d19748c9c228f8d4ebc97bb1e339b0b",
+ "version" : "1.0.4"
+ }
+ },
+ {
+ "identity" : "swift-atomics",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-atomics.git",
+ "state" : {
+ "revision" : "b601256eab081c0f92f059e12818ac1d4f178ff7",
+ "version" : "1.3.0"
+ }
+ },
+ {
+ "identity" : "swift-certificates",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-certificates.git",
+ "state" : {
+ "revision" : "999fd70c7803da89f3904d635a6815a2a7cd7585",
+ "version" : "1.10.0"
+ }
+ },
+ {
+ "identity" : "swift-collections",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-collections.git",
+ "state" : {
+ "revision" : "c1805596154bb3a265fd91b8ac0c4433b4348fb0",
+ "version" : "1.2.0"
+ }
+ },
+ {
+ "identity" : "swift-crypto",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-crypto.git",
+ "state" : {
+ "revision" : "e8d6eba1fef23ae5b359c46b03f7d94be2f41fed",
+ "version" : "3.12.3"
+ }
+ },
+ {
+ "identity" : "swift-http-structured-headers",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-http-structured-headers.git",
+ "state" : {
+ "revision" : "db6eea3692638a65e2124990155cd220c2915903",
+ "version" : "1.3.0"
+ }
+ },
+ {
+ "identity" : "swift-http-types",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-http-types.git",
+ "state" : {
+ "revision" : "a0a57e949a8903563aba4615869310c0ebf14c03",
+ "version" : "1.4.0"
+ }
+ },
+ {
+ "identity" : "swift-log",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-log.git",
+ "state" : {
+ "revision" : "3d8596ed08bd13520157f0355e35caed215ffbfa",
+ "version" : "1.6.3"
+ }
+ },
+ {
+ "identity" : "swift-nio",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio.git",
+ "state" : {
+ "revision" : "34d486b01cd891297ac615e40d5999536a1e138d",
+ "version" : "2.83.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-extras",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-extras.git",
+ "state" : {
+ "revision" : "145db1962f4f33a4ea07a32e751d5217602eea29",
+ "version" : "1.28.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-http2",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-http2.git",
+ "state" : {
+ "revision" : "4281466512f63d1bd530e33f4aa6993ee7864be0",
+ "version" : "1.36.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-ssl",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-ssl.git",
+ "state" : {
+ "revision" : "4b38f35946d00d8f6176fe58f96d83aba64b36c7",
+ "version" : "2.31.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-transport-services",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-transport-services.git",
+ "state" : {
+ "revision" : "cd1e89816d345d2523b11c55654570acd5cd4c56",
+ "version" : "1.24.0"
+ }
+ },
+ {
+ "identity" : "swift-numerics",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-numerics.git",
+ "state" : {
+ "revision" : "e0ec0f5f3af6f3e4d5e7a19d2af26b481acb6ba8",
+ "version" : "1.0.3"
+ }
+ },
+ {
+ "identity" : "swift-protobuf",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-protobuf.git",
+ "state" : {
+ "revision" : "102a647b573f60f73afdce5613a51d71349fe507",
+ "version" : "1.30.0"
+ }
+ },
+ {
+ "identity" : "swift-service-lifecycle",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/swift-server/swift-service-lifecycle.git",
+ "state" : {
+ "revision" : "e7187309187695115033536e8fc9b2eb87fd956d",
+ "version" : "2.8.0"
+ }
+ },
+ {
+ "identity" : "swift-system",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-system.git",
+ "state" : {
+ "revision" : "61e4ca4b81b9e09e2ec863b00c340eb13497dac6",
+ "version" : "1.5.0"
+ }
+ }
+ ],
+ "version" : 3
+}
diff --git a/Package.resolved b/Package.resolved
new file mode 100644
index 0000000..498d8f0
--- /dev/null
+++ b/Package.resolved
@@ -0,0 +1,195 @@
+{
+ "originHash" : "43598045d6f0efb846016fdaf06ce4c4af178788fbc0debcfe7d4e58d14edfd2",
+ "pins" : [
+ {
+ "identity" : "flatbuffers",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/google/flatbuffers.git",
+ "state" : {
+ "branch" : "v25.2.10",
+ "revision" : "1c514626e83c20fffa8557e75641848e1e15cd5e"
+ }
+ },
+ {
+ "identity" : "grpc-swift",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/grpc/grpc-swift.git",
+ "state" : {
+ "revision" : "a56a157218877ef3e9625f7e1f7b2cb7e46ead1b",
+ "version" : "1.26.1"
+ }
+ },
+ {
+ "identity" : "swift-algorithms",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-algorithms.git",
+ "state" : {
+ "revision" : "87e50f483c54e6efd60e885f7f5aa946cee68023",
+ "version" : "1.2.1"
+ }
+ },
+ {
+ "identity" : "swift-asn1",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-asn1.git",
+ "state" : {
+ "revision" : "a54383ada6cecde007d374f58f864e29370ba5c3",
+ "version" : "1.3.2"
+ }
+ },
+ {
+ "identity" : "swift-async-algorithms",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-async-algorithms.git",
+ "state" : {
+ "revision" : "042e1c4d9d19748c9c228f8d4ebc97bb1e339b0b",
+ "version" : "1.0.4"
+ }
+ },
+ {
+ "identity" : "swift-atomics",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-atomics.git",
+ "state" : {
+ "revision" : "b601256eab081c0f92f059e12818ac1d4f178ff7",
+ "version" : "1.3.0"
+ }
+ },
+ {
+ "identity" : "swift-certificates",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-certificates.git",
+ "state" : {
+ "revision" : "999fd70c7803da89f3904d635a6815a2a7cd7585",
+ "version" : "1.10.0"
+ }
+ },
+ {
+ "identity" : "swift-collections",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-collections.git",
+ "state" : {
+ "revision" : "c1805596154bb3a265fd91b8ac0c4433b4348fb0",
+ "version" : "1.2.0"
+ }
+ },
+ {
+ "identity" : "swift-crypto",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-crypto.git",
+ "state" : {
+ "revision" : "e8d6eba1fef23ae5b359c46b03f7d94be2f41fed",
+ "version" : "3.12.3"
+ }
+ },
+ {
+ "identity" : "swift-http-structured-headers",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-http-structured-headers.git",
+ "state" : {
+ "revision" : "db6eea3692638a65e2124990155cd220c2915903",
+ "version" : "1.3.0"
+ }
+ },
+ {
+ "identity" : "swift-http-types",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-http-types.git",
+ "state" : {
+ "revision" : "a0a57e949a8903563aba4615869310c0ebf14c03",
+ "version" : "1.4.0"
+ }
+ },
+ {
+ "identity" : "swift-log",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-log.git",
+ "state" : {
+ "revision" : "3d8596ed08bd13520157f0355e35caed215ffbfa",
+ "version" : "1.6.3"
+ }
+ },
+ {
+ "identity" : "swift-nio",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio.git",
+ "state" : {
+ "revision" : "34d486b01cd891297ac615e40d5999536a1e138d",
+ "version" : "2.83.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-extras",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-extras.git",
+ "state" : {
+ "revision" : "145db1962f4f33a4ea07a32e751d5217602eea29",
+ "version" : "1.28.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-http2",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-http2.git",
+ "state" : {
+ "revision" : "4281466512f63d1bd530e33f4aa6993ee7864be0",
+ "version" : "1.36.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-ssl",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-ssl.git",
+ "state" : {
+ "revision" : "4b38f35946d00d8f6176fe58f96d83aba64b36c7",
+ "version" : "2.31.0"
+ }
+ },
+ {
+ "identity" : "swift-nio-transport-services",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-nio-transport-services.git",
+ "state" : {
+ "revision" : "cd1e89816d345d2523b11c55654570acd5cd4c56",
+ "version" : "1.24.0"
+ }
+ },
+ {
+ "identity" : "swift-numerics",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-numerics.git",
+ "state" : {
+ "revision" : "e0ec0f5f3af6f3e4d5e7a19d2af26b481acb6ba8",
+ "version" : "1.0.3"
+ }
+ },
+ {
+ "identity" : "swift-protobuf",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-protobuf.git",
+ "state" : {
+ "revision" : "102a647b573f60f73afdce5613a51d71349fe507",
+ "version" : "1.30.0"
+ }
+ },
+ {
+ "identity" : "swift-service-lifecycle",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/swift-server/swift-service-lifecycle.git",
+ "state" : {
+ "revision" : "e7187309187695115033536e8fc9b2eb87fd956d",
+ "version" : "2.8.0"
+ }
+ },
+ {
+ "identity" : "swift-system",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-system.git",
+ "state" : {
+ "revision" : "61e4ca4b81b9e09e2ec863b00c340eb13497dac6",
+ "version" : "1.5.0"
+ }
+ }
+ ],
+ "version" : 3
+}
diff --git a/ci/docker/ubuntu.dockerfile b/ci/docker/ubuntu.dockerfile
new file mode 100644
index 0000000..f7a0910
--- /dev/null
+++ b/ci/docker/ubuntu.dockerfile
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+ARG SWIFT=5.10
+ARG UBUNTU_CODE_NAME=noble
+FROM swift:${SWIFT}-${UBUNTU_CODE_NAME}
+
+# Go is needed for generating test data
+RUN apt-get update -y -q && \
+ apt-get install -y -q --no-install-recommends \
+ golang-go && \
+ apt-get clean
diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh
new file mode 100755
index 0000000..7acb359
--- /dev/null
+++ b/ci/scripts/build.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -eu
+
+github_actions_group_begin() {
+ echo "::group::$1"
+ set -x
+}
+
+github_actions_group_end() {
+ set +x
+ echo "::endgroup::"
+}
+
+github_actions_group_begin "Prepare"
+source_dir="${1}"
+build_dir="${2}"
+
+rm -rf "${build_dir}"
+mkdir -p "${build_dir}"
+cp -a "${source_dir}" "${build_dir}/source"
+rm -rf "${build_dir}/source/.build"
+mkdir -p /cache/swift-build
+ln -s /cache/swift-build "${build_dir}/source/.build"
+github_actions_group_end
+
+github_actions_group_begin "Generate data"
+data_gen_dir="${build_dir}/source/data-generator/swift-datagen"
+export GOCACHE="/cache/go-build"
+export GOMODCACHE="/cache/go-mod"
+export GOPATH="${build_dir}"
+pushd "${data_gen_dir}"
+go get -d ./...
+go run .
+cp *.arrow ../../Arrow
+popd
+github_actions_group_end
+
+github_actions_group_begin "Use -warnings-as-errors"
+for package in . Arrow ArrowFlight; do
+ pushd "${build_dir}/source/${package}"
+ sed 's/\/\/ build://g' Package.swift > Package.swift.build
+ mv Package.swift.build Package.swift
+ popd
+done
+github_actions_group_end
+
+github_actions_group_begin "Build"
+pushd "${build_dir}/source"
+swift build
+popd
+github_actions_group_end
diff --git a/ci/scripts/test.sh b/ci/scripts/test.sh
new file mode 100755
index 0000000..27b934a
--- /dev/null
+++ b/ci/scripts/test.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -eu
+
+github_actions_group_begin() {
+ echo "::group::$1"
+ set -x
+}
+
+github_actions_group_end() {
+ set +x
+ echo "::endgroup::"
+}
+
+source_dir="${1}"
+build_dir="${2}"
+
+github_actions_group_begin "Test"
+pushd "${build_dir}/source"
+swift test
+popd
+github_actions_group_end
diff --git a/compose.yaml b/compose.yaml
new file mode 100644
index 0000000..1a9c166
--- /dev/null
+++ b/compose.yaml
@@ -0,0 +1,58 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Usage
+# -----
+#
+# The docker compose file is parametrized using environment variables, the
+# defaults are set in .env file.
+#
+# Example:
+# $ ARCH=arm64v8 docker compose build debian
+# $ ARCH=arm64v8 docker compose run ubuntu
+
+x-common: &common
+ GITHUB_ACTIONS:
+
+volumes:
+ cache:
+ name: cache
+
+services:
+ ubuntu:
+ # Usage:
+ # docker compose build ubuntu
+ # docker compose run ubuntu
+ image: ${REPO}:${ARCH}-ubuntu-${UBUNTU_CODE_NAME}
+ build:
+ context: .
+ dockerfile: ci/docker/ubuntu.dockerfile
+ cache_from:
+ - ${REPO}:${ARCH}-ubuntu-${UBUNTU_CODE_NAME}
+ args:
+ SWIFT: ${SWIFT}
+ UBUNTU_CODE_NAME: ${UBUNTU_CODE_NAME}
+ shm_size: &shm-size 2G
+ volumes: &ubuntu-volumes
+ - .:/arrow-swift:delegated
+ - ${DOCKER_VOLUME_PREFIX}cache:/cache:delegated
+ environment:
+ <<: *common
+ command: &command >
+ /bin/bash -c "
+ /arrow-swift/ci/scripts/build.sh /arrow-swift /build &&
+ /arrow-swift/ci/scripts/test.sh /arrow-swift /build"