Package #421
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
- 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 | |
- amazon-linux-2023-aarch64 | |
env: | |
APACHE_ARROW_REPOSITORY: ${{ github.workspace }}/apache-arrow | |
# condition && true-case || false-case | |
# == | |
# condition ? true-case : false-case | |
runs-on: >- | |
${{ (contains(matrix.id, 'arm64') || | |
contains(matrix.id, 'aarch64')) && 'ubuntu-24.04-arm' || | |
'ubuntu-latest' }} | |
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 \ | |
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 }} |