Go: clean release.yml (#16725)

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
Jin Hai
2026-07-08 10:41:30 +08:00
committed by GitHub
parent 699a25c19c
commit 40cb581d16

View File

@@ -94,53 +94,28 @@ jobs:
- goos: linux
goarch: amd64
runner: ubuntu-24.04
native_asset: native-linux-x86_64.tar.gz
- goos: linux
goarch: arm64
runner: ubuntu-24.04-arm
native_asset: native-linux-aarch64.tar.gz
- goos: darwin
goarch: amd64
runner: macos-15-intel
native_asset: native-macos-x86_64.tar.gz
- goos: darwin
goarch: arm64
runner: macos-14
native_asset: native-macos-aarch64.tar.gz
- goos: windows
goarch: amd64
runner: windows-latest
native_asset: native-windows-x86_64.zip
msystem: CLANG64
rust_target: x86_64-pc-windows-gnullvm
msys2_packages: >-
mingw-w64-clang-x86_64-clang
mingw-w64-clang-x86_64-lld
mingw-w64-clang-x86_64-cmake
mingw-w64-clang-x86_64-ninja
mingw-w64-clang-x86_64-pcre2
mingw-w64-clang-x86_64-pkgconf
output_ext: .exe
- goos: windows
goarch: arm64
runner: windows-11-arm
native_asset: native-windows-aarch64.zip
msystem: CLANGARM64
rust_target: aarch64-pc-windows-gnullvm
msys2_packages: >-
mingw-w64-clang-aarch64-clang
mingw-w64-clang-aarch64-lld
mingw-w64-clang-aarch64-cmake
mingw-w64-clang-aarch64-ninja
mingw-w64-clang-aarch64-pcre2
mingw-w64-clang-aarch64-pkgconf
output_ext: .exe
runs-on: ${{ matrix.runner }}
env:
CLI_NAME: ragflow-cli
CLI_MAIN: ./cmd/ragflow-cli.go
DIST_DIR: dist/cli
OFFICE_OXIDE_VERSION: "0.1.2"
RELEASE_TAG: ${{ needs.prepare.outputs.release_tag }}
steps:
@@ -159,249 +134,7 @@ jobs:
go-version-file: go.mod
cache: true
- name: Install Unix native build dependencies
if: runner.os != 'Windows'
shell: bash
run: |
set -euo pipefail
if [[ "${{ matrix.goos }}" == "linux" ]]; then
sudo apt-get update
sudo apt-get install -y build-essential libpcre2-dev libsimde-dev pkg-config python3-pip
elif [[ "${{ matrix.goos }}" == "darwin" ]]; then
brew list pcre2 >/dev/null 2>&1 || brew install pcre2
brew list simde >/dev/null 2>&1 || brew install simde
fi
python3 -m pip install --user --upgrade 'cmake>=4.0,<5' || \
python3 -m pip install --user --break-system-packages --upgrade 'cmake>=4.0,<5'
python_user_base="$(python3 -m site --user-base)"
echo "${python_user_base}/bin" >> "${GITHUB_PATH}"
export PATH="${python_user_base}/bin:${PATH}"
cmake --version
- name: Download office_oxide native library
if: runner.os != 'Windows'
shell: bash
run: |
set -euo pipefail
OFFICE_OXIDE_PREFIX="${RUNNER_TEMP}/office_oxide"
OFFICE_OXIDE_URL="https://github.com/yfedoseev/office_oxide/releases/download/v${OFFICE_OXIDE_VERSION}/${{ matrix.native_asset }}"
mkdir -p "${OFFICE_OXIDE_PREFIX}"
curl -fsSL "${OFFICE_OXIDE_URL}" -o "${RUNNER_TEMP}/${{ matrix.native_asset }}"
tar xzf "${RUNNER_TEMP}/${{ matrix.native_asset }}" -C "${OFFICE_OXIDE_PREFIX}"
test -f "${OFFICE_OXIDE_PREFIX}/include/office_oxide_c/office_oxide.h"
test -f "${OFFICE_OXIDE_PREFIX}/lib/liboffice_oxide.a"
ln -sf "office_oxide_c/office_oxide.h" "${OFFICE_OXIDE_PREFIX}/include/office_oxide.h"
test -f "${OFFICE_OXIDE_PREFIX}/include/office_oxide.h"
echo "OFFICE_OXIDE_PREFIX=${OFFICE_OXIDE_PREFIX}" >> "${GITHUB_ENV}"
- name: Set up MSYS2
if: runner.os == 'Windows'
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
update: true
install: ${{ matrix.msys2_packages }}
path-type: inherit
- name: Install Windows SIMDe headers
if: runner.os == 'Windows'
shell: msys2 {0}
run: |
set -euo pipefail
simde_dir="$(cygpath -u "${RUNNER_TEMP}")/simde"
simde_archive="$(cygpath -u "${RUNNER_TEMP}")/simde-v0.8.2.tar.gz"
github_env="$(cygpath -u "${GITHUB_ENV}")"
rm -rf "${simde_dir}"
mkdir -p "${simde_dir}"
curl -fsSL "https://github.com/simd-everywhere/simde/archive/refs/tags/v0.8.2.tar.gz" -o "${simde_archive}"
tar xzf "${simde_archive}" -C "${simde_dir}" --strip-components=1
test -f "${simde_dir}/simde/x86/sse4.1.h"
# Install SIMDe headers into the MSYS2 toolchain include directory.
# CMake/Ninja invokes clang-scan-deps as a Windows-native executable;
# a POSIX-style include path like /c/a/_temp/simde may not be resolved
# there, so keep the headers under ${MINGW_PREFIX}/include instead.
rm -rf "${MINGW_PREFIX}/include/simde"
cp -R "${simde_dir}/simde" "${MINGW_PREFIX}/include/simde"
test -f "${MINGW_PREFIX}/include/simde/x86/sse4.1.h"
- name: Configure Windows C compiler
if: runner.os == 'Windows'
shell: msys2 {0}
run: |
set -euo pipefail
cc_path="$(command -v clang.exe 2>/dev/null || command -v clang)"
cxx_path="$(command -v clang++.exe 2>/dev/null || command -v clang++)"
if [[ ! -f "${cc_path}" && -f "${cc_path}.exe" ]]; then
cc_path="${cc_path}.exe"
fi
if [[ ! -f "${cxx_path}" && -f "${cxx_path}.exe" ]]; then
cxx_path="${cxx_path}.exe"
fi
test -f "${cc_path}"
test -f "${cxx_path}"
cc="$(cygpath -m "${cc_path}")"
cxx="$(cygpath -m "${cxx_path}")"
github_env="$(cygpath -u "${GITHUB_ENV}")"
pcre2_libdir="$(pkg-config --variable=libdir libpcre2-8)"
pcre2_includedir="$(pkg-config --variable=includedir libpcre2-8)"
echo "CC=${cc}" >> "${github_env}"
echo "CXX=${cxx}" >> "${github_env}"
echo "PCRE2_LIBDIR=$(cygpath -m "${pcre2_libdir}")" >> "${github_env}"
echo "PCRE2_INCLUDEDIR=$(cygpath -m "${pcre2_includedir}")" >> "${github_env}"
echo "Resolved MSYS2 clang: ${cc}"
"${cc_path}" --version
echo "Resolved MSYS2 clang++: ${cxx}"
"${cxx_path}" --version
- name: Set up Rust for Windows office_oxide staticlib
if: runner.os == 'Windows'
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.rust_target }}
- name: Build office_oxide native library for Windows GNU ABI
if: runner.os == 'Windows'
shell: msys2 {0}
run: |
set -euo pipefail
office_oxide_prefix="$(cygpath -u "${RUNNER_TEMP}")/office_oxide"
office_oxide_src="$(cygpath -u "${RUNNER_TEMP}")/office_oxide-src"
archive_path="$(cygpath -u "${RUNNER_TEMP}")/office_oxide-v${OFFICE_OXIDE_VERSION}.tar.gz"
github_env="$(cygpath -u "${GITHUB_ENV}")"
rm -rf "${office_oxide_prefix}" "${office_oxide_src}"
mkdir -p "${office_oxide_prefix}/include/office_oxide_c" "${office_oxide_prefix}/lib" "${office_oxide_src}"
curl -fsSL "https://github.com/yfedoseev/office_oxide/archive/refs/tags/v${OFFICE_OXIDE_VERSION}.tar.gz" -o "${archive_path}"
tar xzf "${archive_path}" -C "${office_oxide_src}" --strip-components=1
cd "${office_oxide_src}"
cc_path="$(command -v clang.exe 2>/dev/null || command -v clang)"
cxx_path="$(command -v clang++.exe 2>/dev/null || command -v clang++)"
if [[ ! -f "${cc_path}" && -f "${cc_path}.exe" ]]; then
cc_path="${cc_path}.exe"
fi
if [[ ! -f "${cxx_path}" && -f "${cxx_path}.exe" ]]; then
cxx_path="${cxx_path}.exe"
fi
test -f "${cc_path}"
test -f "${cxx_path}"
export CC="${cc_path}"
export CXX="${cxx_path}"
export AR="$(command -v llvm-ar || command -v ar)"
export CARGO_BUILD_TARGET="${{ matrix.rust_target }}"
export RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-fuse-ld=lld"
case "${{ matrix.rust_target }}" in
x86_64-pc-windows-gnullvm)
export CARGO_TARGET_X86_64_PC_WINDOWS_GNULLVM_LINKER="${CC}"
export CARGO_TARGET_X86_64_PC_WINDOWS_GNULLVM_AR="${AR}"
;;
aarch64-pc-windows-gnullvm)
export CARGO_TARGET_AARCH64_PC_WINDOWS_GNULLVM_LINKER="${CC}"
export CARGO_TARGET_AARCH64_PC_WINDOWS_GNULLVM_AR="${AR}"
;;
*)
echo "Unsupported Rust target: ${{ matrix.rust_target }}"
exit 1
;;
esac
# The release workflow only needs the static archive for cgo.
# Building cdylib on Windows pulls in extra MinGW runtime libraries,
# which can fail under the CLANG64/CLANGARM64 environments.
perl -0pi -e 's/crate-type\s*=\s*\[[^\]]+\]/crate-type = ["staticlib"]/s' Cargo.toml
cargo build --release --lib --target "${CARGO_BUILD_TARGET}" --no-default-features
cp "include/office_oxide_c/office_oxide.h" "${office_oxide_prefix}/include/office_oxide_c/office_oxide.h"
cp "include/office_oxide_c/office_oxide.h" "${office_oxide_prefix}/include/office_oxide.h"
cp "target/${CARGO_BUILD_TARGET}/release/liboffice_oxide.a" "${office_oxide_prefix}/lib/liboffice_oxide.a"
test -f "${office_oxide_prefix}/include/office_oxide_c/office_oxide.h"
test -f "${office_oxide_prefix}/include/office_oxide.h"
test -f "${office_oxide_prefix}/lib/liboffice_oxide.a"
echo "OFFICE_OXIDE_PREFIX=$(cygpath -m "${office_oxide_prefix}")" >> "${github_env}"
- name: Build rag tokenizer native library
if: runner.os != 'Windows'
shell: bash
run: |
set -euo pipefail
cmake_args=(
-S internal/binding/cpp
-B internal/binding/cpp/cmake-build-release
-DCMAKE_BUILD_TYPE=Release
)
if [[ "${{ matrix.goos }}" == "darwin" ]]; then
simde_prefix="$(brew --prefix simde)"
pcre2_prefix="$(brew --prefix pcre2)"
cmake_args+=(
-DCMAKE_PREFIX_PATH="${pcre2_prefix};${simde_prefix}"
-DCMAKE_C_FLAGS="-I${simde_prefix}/include"
-DCMAKE_CXX_FLAGS="-I${simde_prefix}/include"
)
fi
cmake "${cmake_args[@]}"
cmake --build internal/binding/cpp/cmake-build-release --target rag_tokenizer_c_api --parallel
test -f internal/binding/cpp/cmake-build-release/librag_tokenizer_c_api.a
- name: Build rag tokenizer native library
if: runner.os == 'Windows'
shell: msys2 {0}
run: |
set -euo pipefail
cc_path="$(command -v clang.exe 2>/dev/null || command -v clang)"
cxx_path="$(command -v clang++.exe 2>/dev/null || command -v clang++)"
if [[ ! -f "${cc_path}" && -f "${cc_path}.exe" ]]; then
cc_path="${cc_path}.exe"
fi
if [[ ! -f "${cxx_path}" && -f "${cxx_path}.exe" ]]; then
cxx_path="${cxx_path}.exe"
fi
test -f "${cc_path}"
test -f "${cxx_path}"
test -f "${MINGW_PREFIX}/include/simde/x86/sse4.1.h"
cmake -S internal/binding/cpp -B internal/binding/cpp/cmake-build-release -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER="$(cygpath -m "${cc_path}")" \
-DCMAKE_CXX_COMPILER="$(cygpath -m "${cxx_path}")" \
-DCMAKE_C_FLAGS="-I${MINGW_PREFIX}/include" \
-DCMAKE_CXX_FLAGS="-I${MINGW_PREFIX}/include"
cmake --build internal/binding/cpp/cmake-build-release --target rag_tokenizer_c_api --parallel
test -f internal/binding/cpp/cmake-build-release/librag_tokenizer_c_api.a
- name: Build Go CLI release binaries
- name: Build Go CLI release binaries on non-Windows
if: runner.os != 'Windows'
shell: bash
run: |
@@ -435,7 +168,7 @@ jobs:
chmod +x "${output}"
- name: Build Go CLI release binaries
- name: Build Go CLI release binaries on Windows
if: runner.os == 'Windows'
shell: pwsh
run: |
@@ -449,24 +182,10 @@ jobs:
$output = Join-Path $env:DIST_DIR "${env:CLI_NAME}-${env:RELEASE_TAG}-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.output_ext }}"
Write-Host "Building ${{ matrix.goos }}/${{ matrix.goarch }} -> $output"
$cc = $env:CC
if ([string]::IsNullOrWhiteSpace($cc)) {
Write-Error "CC is not set"
exit 1
}
if (-not (Test-Path $cc)) {
Write-Error "C compiler does not exist: $cc"
exit 1
}
$env:CGO_ENABLED = "0"
$env:CC = $cc
$env:GOOS = "${{ matrix.goos }}"
$env:GOARCH = "${{ matrix.goarch }}"
Write-Host "CC: $env:CC"
& $env:CC --version
go build `
-trimpath `
-ldflags="-s -w -X main.version=$env:RELEASE_TAG -X main.commit=$env:GITHUB_SHA" `