Skip to content

GH-43837: [Go][IPC] Consolidate StreamWriter and FileWriter, ensuring… #415

GH-43837: [Go][IPC] Consolidate StreamWriter and FileWriter, ensuring…

GH-43837: [Go][IPC] Consolidate StreamWriter and FileWriter, ensuring… #415

Workflow file for this run

# 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.
name: Go
on:
push:
paths:
- '.github/workflows/go.yml'
- 'ci/docker/*_go.dockerfile'
- 'ci/scripts/go_*'
- 'docker-compose.yml'
- 'go/**'
pull_request:
paths:
- '.github/workflows/go.yml'
- 'ci/docker/*_go.dockerfile'
- 'ci/docker/**'
- 'ci/scripts/go_*'
- 'docker-compose.yml'
- 'go/**'
concurrency:
group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
cancel-in-progress: true
permissions:
contents: read
env:
ARCHERY_DEBUG: 1
jobs:
docker-targets:
name: Docker targets
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
outputs:
targets: ${{ steps.detect-targets.outputs.targets }}
steps:
- name: Detect targets
id: detect-targets
run: |
echo "targets<<JSON" >> "$GITHUB_OUTPUT"
echo "[" >> "$GITHUB_OUTPUT"
cat <<JSON >> "$GITHUB_OUTPUT"
{
"arch-label": "AMD64",
"arch": "amd64",
"go": "1.22",
"runs-on": "ubuntu-latest"
},
{
"arch-label": "AMD64",
"arch": "amd64",
"go": "1.23",
"runs-on": "ubuntu-latest"
}
JSON
if [ "$GITHUB_REPOSITORY_OWNER" = "apache" ]; then
echo "," >> "$GITHUB_OUTPUT"
cat <<JSON >> "$GITHUB_OUTPUT"
{
"arch-label": "ARM64",
"arch": "arm64v8",
"go": "1.22",
"runs-on": ["self-hosted", "arm", "linux"]
},
{
"arch-label": "ARM64",
"arch": "arm64v8",
"go": "1.23",
"runs-on": ["self-hosted", "arm", "linux"]
}
JSON
fi
echo "]" >> "$GITHUB_OUTPUT"
echo "JSON" >> "$GITHUB_OUTPUT"
docker:
name: ${{ matrix.arch-label }} Debian 12 Go ${{ matrix.go }}
needs: docker-targets
runs-on: ${{ matrix.runs-on }}
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.docker-targets.outputs.targets) }}
env:
ARCH: ${{ matrix.arch }}
GO: ${{ matrix.go }}
steps:
- name: Checkout Arrow
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
fetch-depth: 0
submodules: recursive
- name: Setup Python
run: |
sudo apt update
sudo apt install -y --no-install-recommends python3 python3-dev python3-pip
- name: Setup Archery
run: python3 -m pip install -e dev/archery[docker]
- name: Execute Docker Build
env:
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
run: archery docker run debian-go
- name: Docker Push
if: >-
success() &&
github.event_name == 'push' &&
github.repository == 'apache/arrow' &&
github.ref_name == 'main'
env:
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
continue-on-error: true
run: archery docker push debian-go
- name: Install Go ${{ matrix.go }} for Benchmarks
if: >-
success() &&
matrix.arch == 'amd64' &&
github.event_name == 'push' &&
github.repository == 'apache/arrow' &&
github.ref_name == 'main'
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
with:
go-version: ${{ matrix.go }}
cache: true
cache-dependency-path: go/go.sum
- name: Run Benchmarks
if: >-
success() &&
matrix.arch == 'amd64' &&
github.event_name == 'push' &&
github.repository == 'apache/arrow' &&
github.ref_name == 'main'
env:
CONBENCH_URL: https://conbench.ursa.dev
CONBENCH_EMAIL: ${{ secrets.CONBENCH_EMAIL }}
CONBENCH_PASSWORD: ${{ secrets.CONBENCH_PASS }}
CONBENCH_REF: ${{ github.ref_name }}
CONBENCH_MACHINE_INFO_NAME: ${{ matrix.arch }}-debian-12
run: |
python3 -m pip install benchadapt@git+https://github.com/conbench/conbench.git@main#subdirectory=benchadapt/python
python3 ci/scripts/go_bench_adapt.py
build_test_386:
name: Go Cross-build and test for 386
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 20
steps:
- name: Checkout Arrow
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get required Go version
run: |
(. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: "${{ env.GO_VERSION }}"
cache: true
cache-dependency-path: go/go.sum
- name: Run build
run: GOARCH=386 go build ./...
working-directory: ./go
- name: Run test
# WIP refactor, only tests in the specified dirs have been fixed
run: GOARCH=386 go test ./parquet/file/...
working-directory: ./go
docker_cgo:
name: AMD64 Debian 12 Go ${{ matrix.go }} - CGO
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
go: ['1.22', '1.23']
env:
GO: ${{ matrix.go }}
steps:
- name: Checkout Arrow
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
fetch-depth: 0
submodules: recursive
- name: Setup Python
uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1
with:
python-version: 3.8
- name: Setup Archery
run: pip install -e dev/archery[docker]
- name: Execute Docker Build
env:
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
run: archery docker run debian-go-cgo
- name: Docker Push
if: >-
success() &&
github.event_name == 'push' &&
github.repository == 'apache/arrow' &&
github.ref_name == 'main'
env:
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
continue-on-error: true
run: archery docker push debian-go-cgo
docker_cgo_python:
name: AMD64 Debian 12 Go ${{ matrix.go }} - CGO Python
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
go: ['1.22', '1.23']
env:
GO: ${{ matrix.go }}
steps:
- name: Checkout Arrow
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1
with:
python-version: 3.8
- name: Setup Archery
run: pip install -e dev/archery[docker]
- name: Execute Docker Build
env:
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
run: archery docker run debian-go-cgo-python
- name: Docker Push
if: >-
success() &&
github.event_name == 'push' &&
github.repository == 'apache/arrow' &&
github.ref_name == 'main'
env:
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
continue-on-error: true
run: archery docker push debian-go-cgo-python
windows:
name: AMD64 Windows 2019 Go ${{ matrix.go }}
runs-on: windows-2019
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 25
strategy:
fail-fast: false
matrix:
go: ['1.22', '1.23']
steps:
- name: Checkout Arrow
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
fetch-depth: 0
submodules: recursive
- name: Install go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
with:
go-version: ${{ matrix.go }}
cache: true
cache-dependency-path: go/go.sum
- name: Install staticcheck
shell: bash
run: |
. .env
go install honnef.co/go/tools/cmd/staticcheck@${STATICCHECK}
- name: Build
shell: bash
run: ci/scripts/go_build.sh $(pwd)
- name: Test
shell: bash
run: ci/scripts/go_test.sh $(pwd)
macos:
name: AMD64 macOS 12 Go ${{ matrix.go }}
runs-on: macos-12
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
go: ['1.22', '1.23']
steps:
- name: Checkout Arrow
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
fetch-depth: 0
submodules: recursive
- name: Install go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
with:
go-version: ${{ matrix.go }}
cache: true
cache-dependency-path: go/go.sum
- name: Install staticcheck
run: |
. .env
go install honnef.co/go/tools/cmd/staticcheck@${STATICCHECK}
- name: Build
shell: bash
run: ci/scripts/go_build.sh $(pwd)
- name: Test
shell: bash
run: ci/scripts/go_test.sh $(pwd)
- name: Setup Python
if: >-
success() &&
github.event_name == 'push' &&
github.repository == 'apache/arrow' &&
github.ref_name == 'main'
uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1
with:
python-version: '3.10'
- name: Run Benchmarks
if: >-
success() &&
github.event_name == 'push' &&
github.repository == 'apache/arrow' &&
github.ref_name == 'main'
shell: bash
env:
CONBENCH_URL: 'https://conbench.ursa.dev'
CONBENCH_EMAIL: ${{ secrets.CONBENCH_EMAIL }}
CONBENCH_PASSWORD: ${{ secrets.CONBENCH_PASS }}
CONBENCH_REF: ${{ github.ref_name }}
CONBENCH_MACHINE_INFO_NAME: amd64-macos-11
run: |
pip install benchadapt@git+https://github.com/conbench/conbench.git@main#subdirectory=benchadapt/python
python ci/scripts/go_bench_adapt.py
macos-cgo:
name: AMD64 macOS 12 Go ${{ matrix.go }} - CGO
runs-on: macos-12
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
go: ['1.22', '1.23']
env:
ARROW_GO_TESTCGO: "1"
steps:
- name: Checkout Arrow
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
- name: Install go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
cache: true
cache-dependency-path: go/go.sum
- name: Brew Install Arrow and pkg-config
shell: bash
run: brew install apache-arrow pkg-config
- name: Install staticcheck
run: |
. .env
go install honnef.co/go/tools/cmd/staticcheck@${STATICCHECK}
- name: Add To pkg config path
shell: bash
run: |
echo "PKG_CONFIG_PATH=$(brew --prefix openssl@3)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
- name: Build
shell: bash
run: ci/scripts/go_build.sh $(pwd)
- name: Test
shell: bash
run: ci/scripts/go_test.sh $(pwd)
windows-mingw:
name: AMD64 Windows MinGW ${{ matrix.mingw-n-bits }} CGO
runs-on: windows-2019
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
mingw-n-bits:
#- 32 runtime handling for CGO needs 64-bit currently
- 64
env:
ARROW_GO_TESTCGO: "1"
MINGW_LINT: "1"
steps:
- name: Disable Crash Dialogs
run: |
reg add `
"HKCU\SOFTWARE\Microsoft\Windows\Windows Error Reporting" `
/v DontShowUI `
/t REG_DWORD `
/d 1 `
/f
- name: Checkout Arrow
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
- uses: msys2/setup-msys2@v2
with:
msystem: MINGW${{ matrix.mingw-n-bits }}
update: true
- name: Setup MSYS2
shell: msys2 {0}
run: |
ci/scripts/msys2_setup.sh cgo
- name: Get required Go version
run: |
(. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
- name: Update CGO Env vars
shell: msys2 {0}
run: |
echo "CGO_CPPFLAGS=-I$(cygpath --windows ${MINGW_PREFIX}/include)" >> $GITHUB_ENV
echo "CGO_LDFLAGS=-g -O2 -L$(cygpath --windows ${MINGW_PREFIX}/lib) -L$(cygpath --windows ${MINGW_PREFIX}/bin)" >> $GITHUB_ENV
echo "MINGW_PREFIX=$(cygpath --windows ${MINGW_PREFIX})" >> $GITHUB_ENV
- name: Install go
uses: actions/setup-go@v5
with:
go-version: "${{ env.GO_VERSION }}"
cache: true
cache-dependency-path: go/go.sum
- name: Install staticcheck
shell: bash
run: |
. .env
go install honnef.co/go/tools/cmd/staticcheck@${STATICCHECK}
- name: Build
shell: bash
run: ci/scripts/go_build.sh $(pwd)
- name: Test
shell: bash
run: ci/scripts/go_test.sh $(pwd)
tinygo:
name: TinyGo
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
env:
TINYGO_VERSION: 0.27.0
timeout-minutes: 60
steps:
- name: Checkout Arrow
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
- name: Build and Run Example
run: |
docker run --rm -v $(pwd)/go:/src -v $(pwd)/ci/scripts:/ci-scripts "tinygo/tinygo:$TINYGO_VERSION" /ci-scripts/go_tinygo_example.sh