Skip to content

defrag: defrag both patricia key and variable size columns #399

defrag: defrag both patricia key and variable size columns

defrag: defrag both patricia key and variable size columns #399

Workflow file for this run

name: Package
on:
push:
paths:
- '**/*.cmake'
- '**/*.cmake.in'
- '**/CMakeLists.txt'
- '**/Makefile.am'
- '.github/workflows/package.yml'
- 'configure.ac'
- 'cmake/**'
- 'doc/**'
- 'include/**/*.h'
- 'include/**/*.h.in'
- 'include/**/*.hpp'
- 'lib/**/*.c'
- 'lib/**/*.cpp'
- 'lib/**/*.h'
- 'lib/**/*.hpp'
- 'lib/**/*.rb'
- 'packages/**'
- 'plugins/**/*.c'
- 'plugins/**/*.cpp'
- 'plugins/**/*.h'
- 'plugins/**/*.rb'
- 'src/**/*.c'
- 'src/**/*.h'
- 'test/command/**'
- 'vendor/mruby/**'
pull_request:
paths:
- '**/*.cmake'
- '**/*.cmake.in'
- '**/CMakeLists.txt'
- '**/Makefile.am'
- '.github/workflows/package.yml'
- 'configure.ac'
- 'cmake/**'
- 'doc/**'
- 'include/**/*.h'
- 'include/**/*.h.in'
- 'include/**/*.hpp'
- 'lib/**/*.c'
- 'lib/**/*.cpp'
- 'lib/**/*.h'
- 'lib/**/*.rb'
- 'lib/**/*.rb'
- 'packages/**'
- 'plugins/**/*.c'
- 'plugins/**/*.cpp'
- 'plugins/**/*.h'
- 'plugins/**/*.rb'
- 'src/**/*.c'
- 'src/**/*.h'
- 'test/command/**'
- 'vendor/mruby/**'
schedule:
- cron: |
0 0 * * *
concurrency:
group: ${{ github.head_ref || github.sha }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
source:
if: >-
github.event_name != 'schedule' ||
(github.event_name == 'schedule' &&
github.repository_owner == 'groonga')
name: Source
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies
run: |
sudo apt update -o="APT::Acquire::Retries=3"
sudo apt install -y -V -o="APT::Acquire::Retries=3" \
autoconf-archive \
devscripts \
ruby \
zip
- uses: actions/setup-python@v5
with:
python-version: 3
- name: Install Sphinx
run: |
pip3 install -r doc/requirements.txt
- name: Clone dependencies
run: |
cd ..
git clone --depth 1 https://github.com/groonga/groonga.org.git
- name: Generate configure
run: |
./autogen.sh
- name: Configure for archive
run: |
./configure \
--enable-document \
--enable-mruby \
--with-groonga-org-path=../groonga.org \
--with-ruby
- name: Build archive
run: |
make dist
- name: Create zip
run: |
version=$(cat base_version)
tar xzf groonga-${version}.tar.gz
pushd groonga-${version}/vendor
ruby download_lz4.rb
ruby download_mecab.rb
ruby download.rb
popd
zip -r groonga-${version}.zip groonga-${version}
rm -rf groonga-${version}
# Artifact
- uses: actions/upload-artifact@v4
with:
name: release-source
path: |
groonga-*.tar.gz
groonga-*.zip
build:
name: Build
needs: source
strategy:
fail-fast: false
matrix:
id:
- debian-bookworm-amd64
- debian-bookworm-arm64
# simdjson removed from testing:
# https://github.com/groonga/groonga/pull/1871
#
# We can enable this again when simdjson is added to testing again.
# - debian-trixie-amd64
# - debian-trixie-arm64
- ubuntu-focal-amd64
- ubuntu-focal-arm64
- ubuntu-jammy-amd64
- ubuntu-jammy-arm64
- ubuntu-noble-amd64
- ubuntu-noble-arm64
- almalinux-8-x86_64
- almalinux-8-aarch64
- almalinux-9-x86_64
- almalinux-9-aarch64
- amazon-linux-2023-x86_64
# This is too slow.
#
# We can enable this again when GitHub Actions arm runner is
# available.
# - amazon-linux-2023-aarch64
include:
- id: debian-bookworm-arm64
timeout-minutes: 60
# - id: debian-trixie-arm64
# timeout-minutes: 120
- id: ubuntu-focal-arm64
timeout-minutes: 60
- id: ubuntu-jammy-arm64
timeout-minutes: 60
- id: ubuntu-noble-arm64
timeout-minutes: 120
- id: almalinux-8-aarch64
timeout-minutes: 60
- id: almalinux-9-aarch64
timeout-minutes: 120
# - id: amazon-linux-2023-aarch64
# timeout-minutes: 120
env:
APACHE_ARROW_REPOSITORY: ${{ github.workspace }}/apache-arrow
# We can't use ubuntu-24.04 to build arm64 binary with QEMU.
# libc-bin is crashed.
runs-on: ubuntu-22.04
timeout-minutes: ${{ matrix.timeout-minutes || 30 }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/checkout@v4
with:
path: apache-arrow
repository: apache/arrow
- name: Prepare environment variables
run: |
id=${{ matrix.id }}
os_version=${id%-*}
os=${os_version%-*}
version=${os_version##*-}
architecture=${id##*-}
if [ "${os}" = "debian" ] || [ "${os}" = "ubuntu" ]; then
TASK_NAMESPACE=apt
if [ "${architecture}" = "amd64" ]; then
TARGET="${os_version}"
TEST_DOCKER_IMAGE="${os}:${version}"
else
TARGET="${id}"
TEST_DOCKER_IMAGE="arm64v8/${os}:${version}"
fi
else
TASK_NAMESPACE=yum
# amazon-linux -> amazonlinux
docker_os=${os/-/}
if [ "${architecture}" = "x86_64" ]; then
TARGET="${os_version}"
TEST_DOCKER_IMAGE="${docker_os}:${version}"
else
TARGET="${id}"
TEST_DOCKER_IMAGE="arm64v8/${docker_os}:${version}"
fi
fi
echo "ARCHITECTURE=${architecture}" >> ${GITHUB_ENV}
echo "TASK_NAMESPACE=${TASK_NAMESPACE}" >> ${GITHUB_ENV}
echo "TARGET=${TARGET}" >> ${GITHUB_ENV}
echo "APT_TARGETS=${TARGET}" >> ${GITHUB_ENV}
echo "YUM_TARGETS=${TARGET}" >> ${GITHUB_ENV}
echo "TEST_DOCKER_IMAGE=${TEST_DOCKER_IMAGE}" >> ${GITHUB_ENV}
- name: Install dependencies
run: |
sudo apt update -o="APT::Acquire::Retries=3"
sudo apt install -y -V -o="APT::Acquire::Retries=3" \
devscripts \
qemu-user-static \
ruby
- uses: actions/download-artifact@v4
with:
name: release-source
- name: Update version
if: |
!startsWith(github.ref, 'refs/tags/') &&
!startsWith(github.ref, 'refs/heads/maintenance/')
run: |
cd packages
rake version:update RELEASE_DATE=$(date +%Y-%m-%d)
- name: Login to GitHub Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Cache ccache
uses: actions/cache@v4
with:
path: packages/${{ env.TASK_NAMESPACE }}/build/${{ env.TARGET }}/ccache
key: package-${{ matrix.id }}-ccache-${{ hashFiles('lib/**', 'src/**', 'plugins/**', 'include/**') }}
restore-keys: package-${{ matrix.id }}-ccache-
- name: Build with docker
run: |
cd packages
rake docker:pull || :
rake ${TASK_NAMESPACE}:build BUILD_DIR=build
if [ "${TASK_NAMESPACE}" = "yum" ] && [ "${ARCHITECTURE}" != "x86_64" ]; then
# Remove SRPMs from non x86_64 artifacts
rm -rf ${TASK_NAMESPACE}/repositories/*/*/source
fi
- name: Push the built Docker image
continue-on-error: true
run: |
cd packages
rake docker:push
# Artifact
- name: Create assets
run: |
tar czf ${{ matrix.id }}.tar.gz packages/${TASK_NAMESPACE}/repositories/
- uses: actions/upload-artifact@v4
with:
name: packages-${{ matrix.id }}
path: ${{ matrix.id }}.tar.gz
# Test
- name: Test
run: |
case "${TEST_DOCKER_IMAGE}" in
arm64v8/*)
platform=linux/arm64
;;
*)
platform=linux/amd64
;;
esac
docker run \
--platform ${platform} \
--rm \
--volume ${PWD}:/groonga:ro \
${TEST_DOCKER_IMAGE} \
/groonga/packages/${TASK_NAMESPACE}/test.sh
prepare-for-release:
name: Prepare for release
needs: build
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/download-artifact@v4
with:
path: packages
pattern: packages-*
- name: Group by distribution and version
run: |
set -x
for packages_path in packages/*; do
# packages/packages-debian-bookworm-amd64 ->
# debian-bookworm
os=$(echo ${packages_path} | \
grep -E -o '(almalinux|amazon-linux|debian|ubuntu)-[^-]+')
mkdir -p release/${os}/
# packages/packages-debian-bookworm-amd64/debian-bookworm-amd64.tar.gz:
# packages/apt/repositories/debian/... ->
# release/debian-bookworm/debian/...
tar xf ${packages_path}/*.tar.gz \
-C release/${os}/ \
--strip-components 3
done
for release_os_path in release/*; do
# release/debian-bookworm ->
# debian-bookworm
os=$(basename ${release_os_path})
# release/debian-bookworm/debian/... ->
# debian-bookworm/debian/...
tar czf ${os}.tar.gz -C $(dirname ${release_os_path}) ${os}
done
- uses: actions/upload-artifact@v4
with:
name: release-linux-packages
path: "*.tar.gz"
release:
if: |
github.ref_type == 'tag'
name: Release
needs: prepare-for-release
uses: ./.github/workflows/release.yml
with:
tag: ${{ github.ref_name }}
secrets:
token: ${{ secrets.GITHUB_TOKEN }}