From a1ec05b2108583e20d83cfc3853651aa2156b1cf Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Sat, 3 Jan 2026 22:41:00 +0000 Subject: [PATCH] fix: add workflow-prepare.sh for CGO SQLite dependencies Problem: - CGO builds failing in CI with "cannot find sqlite3.h" - go-release-cgo.yaml workflow looks for workflow-prepare.sh to install deps - Script was missing, causing build failures Solution: - Created workflow-prepare.sh to install SQLite development headers - Platform-specific installation: - Linux (Ubuntu/Debian): libsqlite3-dev via apt-get - Linux (RHEL/CentOS): sqlite-devel via yum - Linux (Alpine): sqlite-dev via apk - macOS: sqlite3 via Homebrew (if needed) - Windows: Downloads SQLite amalgamation, sets CGO_CFLAGS/CGO_LDFLAGS - Includes verification step to confirm SQLite availability This script is automatically called by the shared GitHub Actions workflow before running GoReleaser builds with CGO_ENABLED=1. --- workflow-prepare.sh | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 workflow-prepare.sh diff --git a/workflow-prepare.sh b/workflow-prepare.sh new file mode 100755 index 0000000..a195e35 --- /dev/null +++ b/workflow-prepare.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# Workflow prepare script for CI/CD +# Installs CGO dependencies for SQLite support + +set -e + +echo "=== GoHoarder Workflow Prepare ===" +echo "Host OS: $(uname -s)" +echo "Target GOOS: ${TARGET_GOOS:-auto}" +echo "Target GOARCH: ${TARGET_GOARCH:-auto}" + +# Detect host OS +HOST_OS=$(uname -s | tr '[:upper:]' '[:lower:]') + +# Install SQLite development headers based on platform +case "$HOST_OS" in + linux*) + echo "Installing SQLite development headers for Linux..." + if command -v apt-get &> /dev/null; then + # Ubuntu/Debian + sudo apt-get update -qq + sudo apt-get install -y -qq libsqlite3-dev + elif command -v yum &> /dev/null; then + # RHEL/CentOS + sudo yum install -y sqlite-devel + elif command -v apk &> /dev/null; then + # Alpine + sudo apk add --no-cache sqlite-dev + fi + echo "✓ SQLite headers installed" + ;; + + darwin*) + echo "Installing SQLite for macOS..." + # macOS usually has SQLite via Xcode Command Line Tools + # but ensure it's available via Homebrew if needed + if ! pkg-config --exists sqlite3; then + brew install sqlite3 + fi + echo "✓ SQLite available" + ;; + + mingw*|msys*|cygwin*) + echo "Installing SQLite for Windows..." + # Download SQLite amalgamation for Windows + SQLITE_VERSION="3470200" + SQLITE_YEAR="2024" + SQLITE_DIR="/c/sqlite" + SQLITE_URL="https://www.sqlite.org/${SQLITE_YEAR}/sqlite-amalgamation-${SQLITE_VERSION}.zip" + + mkdir -p "$SQLITE_DIR" + curl -sSL "$SQLITE_URL" -o /tmp/sqlite.zip + unzip -q /tmp/sqlite.zip -d /tmp/ + cp /tmp/sqlite-amalgamation-${SQLITE_VERSION}/* "$SQLITE_DIR/" + rm -rf /tmp/sqlite.zip /tmp/sqlite-amalgamation-${SQLITE_VERSION} + + echo "CGO_CFLAGS=-I${SQLITE_DIR}" >> "$GITHUB_ENV" + echo "CGO_LDFLAGS=-L${SQLITE_DIR}" >> "$GITHUB_ENV" + echo "✓ SQLite setup complete" + ;; + + *) + echo "Unknown OS: $HOST_OS - skipping SQLite setup" + ;; +esac + +# Verify SQLite is available +echo "" +echo "=== Verifying SQLite availability ===" +if pkg-config --exists sqlite3; then + echo "✓ SQLite pkg-config found" + pkg-config --modversion sqlite3 +else + echo "⚠ SQLite pkg-config not found (may still work via system headers)" +fi + +echo "" +echo "=== Workflow prepare complete ==="