540f4af45f
Flesh out our github actions CI so we can build official releaes.
77 lines
No EOL
2.8 KiB
Bash
Executable file
77 lines
No EOL
2.8 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
set -eu
|
|
|
|
export VERSION=${VERSION:-$(git describe --tags --first-parent --abbrev=7 --long --dirty --always | sed -e "s/^v//g")}
|
|
export GOFLAGS="'-ldflags=-w -s \"-X=github.com/jmorganca/ollama/version.Version=$VERSION\" \"-X=github.com/jmorganca/ollama/server.mode=release\"'"
|
|
|
|
# We use 2 different image repositories to handle combining architecture images into multiarch manifest
|
|
# (The ROCm image is x86 only and is not a multiarch manifest)
|
|
# For developers, you can override the DOCKER_ORG to generate multiarch manifests
|
|
# DOCKER_ORG=jdoe PUSH=1 ./scripts/build_docker.sh
|
|
DOCKER_ORG=${DOCKER_ORG:-"ollama"}
|
|
ARCH_IMAGE_REPO=${ARCH_IMAGE_REPO:-"${DOCKER_ORG}/release"}
|
|
FINAL_IMAGE_REPO=${FINAL_IMAGE_REPO:-"${DOCKER_ORG}/ollama"}
|
|
|
|
BUILD_ARCH=${BUILD_ARCH:-"amd64 arm64"}
|
|
|
|
# Set PUSH to a non-empty string to trigger push instead of load
|
|
PUSH=${PUSH:-""}
|
|
|
|
# In CI mode, we break things down
|
|
OLLAMA_SKIP_MANIFEST_CREATE=${OLLAMA_SKIP_MANIFEST_CREATE:-""}
|
|
OLLAMA_SKIP_IMAGE_BUILD=${OLLAMA_SKIP_IMAGE_BUILD:-""}
|
|
|
|
if [ -z "${PUSH}" ] ; then
|
|
LOAD_OR_PUSH="--load"
|
|
else
|
|
echo "Will be pushing ${ARCH_IMAGE_REPO}:$VERSION for ${BUILD_ARCH}"
|
|
LOAD_OR_PUSH="--push"
|
|
fi
|
|
|
|
if [ -z "${OLLAMA_SKIP_IMAGE_BUILD}" ]; then
|
|
for TARGETARCH in ${BUILD_ARCH}; do
|
|
docker build \
|
|
${LOAD_OR_PUSH} \
|
|
--platform=linux/${TARGETARCH} \
|
|
--build-arg=VERSION \
|
|
--build-arg=GOFLAGS \
|
|
-f Dockerfile \
|
|
-t ${ARCH_IMAGE_REPO}:$VERSION-${TARGETARCH} \
|
|
.
|
|
done
|
|
|
|
if echo ${BUILD_ARCH} | grep "amd64" > /dev/null; then
|
|
docker build \
|
|
${LOAD_OR_PUSH} \
|
|
--platform=linux/amd64 \
|
|
--build-arg=VERSION \
|
|
--build-arg=GOFLAGS \
|
|
--target runtime-rocm \
|
|
-f Dockerfile \
|
|
-t ${ARCH_IMAGE_REPO}:$VERSION-rocm \
|
|
.
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${OLLAMA_SKIP_MANIFEST_CREATE}" ]; then
|
|
if [ -n "${PUSH}" ]; then
|
|
docker manifest create ${FINAL_IMAGE_REPO}:$VERSION \
|
|
${ARCH_IMAGE_REPO}:$VERSION-amd64 \
|
|
${ARCH_IMAGE_REPO}:$VERSION-arm64
|
|
docker manifest push ${FINAL_IMAGE_REPO}:$VERSION
|
|
|
|
# For symmetry, tag/push the rocm image
|
|
if [ "${ARCH_IMAGE_REPO}" != "${FINAL_IMAGE_REPO}" ]; then
|
|
echo "Tagging and pushing rocm image"
|
|
docker pull ${ARCH_IMAGE_REPO}:$VERSION-rocm
|
|
docker tag ${ARCH_IMAGE_REPO}:$VERSION-rocm ${FINAL_IMAGE_REPO}:$VERSION-rocm
|
|
docker push ${FINAL_IMAGE_REPO}:$VERSION-rocm
|
|
fi
|
|
else
|
|
echo "Skipping manifest generation when not pushing images are available locally as "
|
|
echo " ${ARCH_IMAGE_REPO}:$VERSION-amd64"
|
|
echo " ${ARCH_IMAGE_REPO}:$VERSION-arm64"
|
|
echo " ${ARCH_IMAGE_REPO}:$VERSION-rocm"
|
|
fi
|
|
fi |