aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2025-09-16 23:45:00 -0700
committerChris Lu <chris.lu@gmail.com>2025-09-16 23:45:00 -0700
commit2b1cfe3c3bc9939331c1736983942cc404db0667 (patch)
treea7e25c20242189c4ad7e20af8dc8710994fae868
parentf9f2609e633f820f9d4e327ba83395a4e4c6b8d0 (diff)
downloadseaweedfs-2b1cfe3c3bc9939331c1736983942cc404db0667.tar.xz
seaweedfs-2b1cfe3c3bc9939331c1736983942cc404db0667.zip
add on demand build
-rw-r--r--.github/workflows/container_rocksdb_version.yml110
-rw-r--r--docker/Dockerfile.rocksdb_dev_env3
-rw-r--r--docker/Dockerfile.rocksdb_large3
3 files changed, 114 insertions, 2 deletions
diff --git a/.github/workflows/container_rocksdb_version.yml b/.github/workflows/container_rocksdb_version.yml
new file mode 100644
index 000000000..94d9441a8
--- /dev/null
+++ b/.github/workflows/container_rocksdb_version.yml
@@ -0,0 +1,110 @@
+name: "docker: build rocksdb image by version"
+
+on:
+ workflow_dispatch:
+ inputs:
+ rocksdb_version:
+ description: 'RocksDB git tag or branch to build (e.g. v10.5.1)'
+ required: true
+ default: 'v10.5.1'
+ seaweedfs_ref:
+ description: 'SeaweedFS git tag, branch, or commit to build'
+ required: true
+ default: 'master'
+ image_tag:
+ description: 'Optional Docker tag suffix (defaults to rocksdb_<rocksdb>_seaweedfs_<ref>)'
+ required: false
+ default: ''
+
+permissions:
+ contents: read
+
+jobs:
+ build-rocksdb-image:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v2
+
+ - name: Prepare Docker tag
+ id: tag
+ env:
+ ROCKSDB_VERSION_INPUT: ${{ inputs.rocksdb_version }}
+ SEAWEEDFS_REF_INPUT: ${{ inputs.seaweedfs_ref }}
+ CUSTOM_TAG_INPUT: ${{ inputs.image_tag }}
+ run: |
+ set -euo pipefail
+ sanitize() {
+ local value="$1"
+ value="${value,,}"
+ value="${value// /-}"
+ value="${value//[^a-z0-9_.-]/-}"
+ value="${value#-}"
+ value="${value%-}"
+ printf '%s' "$value"
+ }
+ version="${ROCKSDB_VERSION_INPUT}"
+ seaweed="${SEAWEEDFS_REF_INPUT}"
+ tag="${CUSTOM_TAG_INPUT}"
+ if [ -z "$version" ]; then
+ echo "RocksDB version input is required." >&2
+ exit 1
+ fi
+ if [ -z "$seaweed" ]; then
+ echo "SeaweedFS ref input is required." >&2
+ exit 1
+ fi
+ sanitized_version="$(sanitize "$version")"
+ if [ -z "$sanitized_version" ]; then
+ echo "Unable to sanitize RocksDB version '$version'." >&2
+ exit 1
+ fi
+ sanitized_seaweed="$(sanitize "$seaweed")"
+ if [ -z "$sanitized_seaweed" ]; then
+ echo "Unable to sanitize SeaweedFS ref '$seaweed'." >&2
+ exit 1
+ fi
+ if [ -z "$tag" ]; then
+ tag="rocksdb_${sanitized_version}_seaweedfs_${sanitized_seaweed}"
+ fi
+ tag="${tag,,}"
+ tag="${tag// /-}"
+ tag="${tag//[^a-z0-9_.-]/-}"
+ tag="${tag#-}"
+ tag="${tag%-}"
+ if [ -z "$tag" ]; then
+ echo "Resulting Docker tag is empty." >&2
+ exit 1
+ fi
+ echo "docker_tag=$tag" >> "$GITHUB_OUTPUT"
+ echo "full_image=chrislusf/seaweedfs:$tag" >> "$GITHUB_OUTPUT"
+ echo "seaweedfs_ref=$seaweed" >> "$GITHUB_OUTPUT"
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v1
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v1
+
+ - name: Login to Docker Hub
+ uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v1
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+
+ - name: Build and push image
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v2
+ with:
+ context: ./docker
+ push: true
+ file: ./docker/Dockerfile.rocksdb_large
+ build-args: |
+ ROCKSDB_VERSION=${{ inputs.rocksdb_version }}
+ BRANCH=${{ inputs.seaweedfs_ref }}
+ platforms: linux/amd64
+ tags: ${{ steps.tag.outputs.full_image }}
+ labels: |
+ org.opencontainers.image.title=seaweedfs
+ org.opencontainers.image.description=SeaweedFS is a distributed storage system for blobs, objects, files, and data lake, to store and serve billions of files fast!
+ org.opencontainers.image.vendor=Chris Lu
diff --git a/docker/Dockerfile.rocksdb_dev_env b/docker/Dockerfile.rocksdb_dev_env
index cb2cc2399..e4fe0acaf 100644
--- a/docker/Dockerfile.rocksdb_dev_env
+++ b/docker/Dockerfile.rocksdb_dev_env
@@ -3,7 +3,8 @@ FROM golang:1.24 AS builder
RUN apt-get update
RUN apt-get install -y build-essential libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev liblz4-dev libzstd-dev
-ENV ROCKSDB_VERSION=v10.5.1
+ARG ROCKSDB_VERSION=v10.5.1
+ENV ROCKSDB_VERSION=${ROCKSDB_VERSION}
# build RocksDB
RUN cd /tmp && \
diff --git a/docker/Dockerfile.rocksdb_large b/docker/Dockerfile.rocksdb_large
index 62a2a306f..2c3516fb0 100644
--- a/docker/Dockerfile.rocksdb_large
+++ b/docker/Dockerfile.rocksdb_large
@@ -3,7 +3,8 @@ FROM golang:1.24 AS builder
RUN apt-get update
RUN apt-get install -y build-essential libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev liblz4-dev libzstd-dev
-ENV ROCKSDB_VERSION=v10.5.1
+ARG ROCKSDB_VERSION=v10.5.1
+ENV ROCKSDB_VERSION=${ROCKSDB_VERSION}
# build RocksDB
RUN cd /tmp && \