Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,67 @@
pull_request:

jobs:
release-linux-smoke:
strategy:
fail-fast: false
matrix:
include:
- goarch: amd64
runner: ubuntu-latest
go_arch_name: amd64
- goarch: arm64
runner: ubuntu-24.04-arm
go_arch_name: arm64
runs-on: ${{ matrix.runner }}
container:
image: ubuntu:22.04
steps:
- name: Install build tools
env:
DEBIAN_FRONTEND: noninteractive
run: |
apt-get update
apt-get install -y gcc g++ make git curl tar gzip file binutils libsqlite3-dev

- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3

- name: Install Go
run: |
GO_VERSION=$(grep '^go ' go.mod | awk '{print $2}')
curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-${{ matrix.go_arch_name }}.tar.gz" -o go.tar.gz
tar -C /usr/local -xzf go.tar.gz
rm go.tar.gz
echo "/usr/local/go/bin" >> "$GITHUB_PATH"
echo "$HOME/go/bin" >> "$GITHUB_PATH"

- name: Build Linux release binary
env:
GOOS: linux
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: '1'
run: |
export PATH="/usr/local/go/bin:$HOME/go/bin:$PATH"
COMMIT=$(printf '%s' "$GITHUB_SHA" | cut -c1-8)
VERSION="ci-$COMMIT"

mkdir -p dist
LDFLAGS="-s -w -X go.kenn.io/msgvault/cmd/msgvault/cmd.Version=${VERSION} -X go.kenn.io/msgvault/cmd/msgvault/cmd.Commit=${COMMIT} -X go.kenn.io/msgvault/cmd/msgvault/cmd.BuildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ) -extldflags '-lstdc++ -lm'"
go build -tags "fts5 sqlite_vec" -trimpath -buildvcs=false -ldflags="$LDFLAGS" -o dist/msgvault ./cmd/msgvault

echo "--- Binary info ---"
file dist/msgvault
ldd dist/msgvault || true

echo "--- Runtime requirements ---"
objdump -T dist/msgvault 2>/dev/null | grep -oP 'GLIBC_\d+\.\d+' | sort -uV | tail -1 || true
objdump -T dist/msgvault 2>/dev/null | grep -oP 'GLIBCXX_\d+\.\d+(\.\d+)?' | sort -uV | tail -1 || true

echo "--- Smoke test ---"
SMOKE_OUT=$(dist/msgvault version 2>&1)
echo "$SMOKE_OUT"
echo "$SMOKE_OUT" | grep -q "$VERSION" || { echo "FATAL: version output doesn't match CI build version"; exit 1; }

test:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
runs-on: macos-15
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
Expand Down
12 changes: 7 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
go_arch_name: arm64
runs-on: ${{ matrix.runner }}
container:
image: ubuntu:20.04
image: ubuntu:22.04

steps:
- name: Install build tools
Expand All @@ -44,8 +44,8 @@ jobs:
curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-${{ matrix.go_arch_name }}.tar.gz" -o go.tar.gz
tar -C /usr/local -xzf go.tar.gz
rm go.tar.gz
echo "/usr/local/go/bin" >> $GITHUB_PATH
echo "$HOME/go/bin" >> $GITHUB_PATH
echo "/usr/local/go/bin" >> "$GITHUB_PATH"
echo "$HOME/go/bin" >> "$GITHUB_PATH"

- name: Build
env:
Expand All @@ -64,9 +64,11 @@ jobs:
file dist/msgvault
ldd dist/msgvault || true

# Verify glibc version requirement is reasonable
echo "--- GLIBC requirement ---"
# Verify runtime version requirements are reasonable. DuckDB's
# prebuilt static library still links against libstdc++ symbols.
echo "--- Runtime requirements ---"
objdump -T dist/msgvault 2>/dev/null | grep -oP 'GLIBC_\d+\.\d+' | sort -uV | tail -1 || true
objdump -T dist/msgvault 2>/dev/null | grep -oP 'GLIBCXX_\d+\.\d+(\.\d+)?' | sort -uV | tail -1 || true

# Smoke test
echo "--- Smoke test ---"
Expand Down