Skip to content

build juicefs image #1325

build juicefs image

build juicefs image #1325

name: build juicefs image
on:
workflow_dispatch:
inputs:
ce_juicefs_build_version:
description: 'ce juicefs version for image build'
required: false
type: string
ee_pkg_url:
description: 'ee juicefs pkg url for image build'
required: false
type: string
schedule:
- cron: "0 0 * * *"
jobs:
publish-ce-mount-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Login Docker Hub
env:
PASSWORD: ${{ secrets.DOCKERHUB_FUSE_ACCESS_TOKEN }}
run: docker login --username chnliyong --password ${PASSWORD}
- name: check latest tag
continue-on-error: true
env:
JUICEFS_BUILD_VERSION: ${{ inputs.ce_juicefs_build_version }}
run: |
set +e
if [ ${{ env.JUICEFS_BUILD_VERSION }} ]; then
echo "JUICEFS_CE_LATEST_VERSION=${{ env.JUICEFS_BUILD_VERSION }}" >> $GITHUB_ENV
echo "MOUNT_IMAGE_EXIST=false" >> $GITHUB_ENV
else
JUICEFS_CE_LATEST_VERSION=$(curl -fsSL https://api.github.com/repos/juicedata/juicefs/releases/latest | grep tag_name | grep -oE 'v[0-9]+\.[0-9][0-9]*(\.[0-9]+(-[0-9a-z]+)?)?')
if [ -z "$JUICEFS_CE_LATEST_VERSION" ]; then
echo "Failed to get juicefs ce version"
exit 1
fi
echo "JUICEFS_CE_LATEST_VERSION=$JUICEFS_CE_LATEST_VERSION" >> $GITHUB_ENV
echo "mount image is juicedata/mount:ce-${JUICEFS_CE_LATEST_VERSION}"
echo "MOUNT_IMAGE_EXIST=false" >> $GITHUB_ENV
docker pull juicedata/mount:ce-${JUICEFS_CE_LATEST_VERSION}
rst=$?
if [ $rst -eq 0 ]; then
echo "MOUNT_IMAGE_EXIST=true" >> $GITHUB_ENV
fi
fi
- name: Build and Push juicefs latest image
if: env.MOUNT_IMAGE_EXIST == 'false'
env:
CEVERSION: latest
ACR_TOKEN: ${{ secrets.ACR_TOKEN }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
run: |
if [[ ${JUICEFS_CE_LATEST_VERSION:0:4} != "v1.1" ]]; then
echo "Build JuiceFS latest image"
export CEJUICEFS_VERSION=${JUICEFS_CE_LATEST_VERSION}
make -C docker ce-image
${GITHUB_WORKSPACE}/.github/scripts/sync.sh mount
fi
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build juicefs image
if: env.MOUNT_IMAGE_EXIST == 'false'
env:
CEVERSION: ce-${{ env.JUICEFS_CE_LATEST_VERSION }}
IMAGE_TAG: ce-${{ env.JUICEFS_CE_LATEST_VERSION }}
CEJUICEFS_VERSION: ${{ env.JUICEFS_CE_LATEST_VERSION }}
ACR_TOKEN: ${{ secrets.ACR_TOKEN }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
run: |
echo "Build JuiceFS new version image: $JUICEFS_CE_LATEST_VERSION"
if [[ ${JUICEFS_CE_LATEST_VERSION:0:4} == "v1.1" ]]; then
make -C docker ce-image-1.1-buildx
else
make -C docker ce-image-buildx
fi
- name: sync image
if: env.MOUNT_IMAGE_EXIST == 'false'
env:
IMAGE_TAG: ce-${{ env.JUICEFS_CE_LATEST_VERSION }}
ACR_TOKEN: ${{ secrets.ACR_TOKEN }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
run: |
cd ${GITHUB_WORKSPACE}/.github/scripts/
./sync.sh juicedata/mount:${{ env.IMAGE_TAG }}
- name: Result
env:
IMAGE_TAG: ce-${{ env.JUICEFS_CE_LATEST_VERSION }}
run: |
mount_image_exist=${{ env.MOUNT_IMAGE_EXIST }}
if [ $mount_image_exist == "false" ]; then
echo "✅ All Images are available here: "
echo "🐳 Image in dockerhub:"
echo " docker.io/juicedata/mount:${IMAGE_TAG}"
echo "☁️ Image in Alibaba Cloud Registry: "
echo " registry.cn-hangzhou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-chengdu.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-beijing.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-qingdao.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-shanghai.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-zhangjiakou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-shenzhen.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-heyuan.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-guangzhou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-wulanchabu.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-hongkong.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-huhehaote.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
else
echo "⚠️ JuiceFS mount image [docker.io/juicedata/mount:${IMAGE_TAG}] already exists"
fi
- name: Setup upterm session
if: ${{ failure() }}
timeout-minutes: 60
uses: lhotari/action-upterm@v1
publish-ee-4_0-mount-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Login Docker Hub
env:
PASSWORD: ${{ secrets.DOCKERHUB_FUSE_ACCESS_TOKEN }}
run: docker login --username chnliyong --password ${PASSWORD}
- name: check latest tag
continue-on-error: true
run: |
set +e
JUICEFS_EE_LATEST_VERSION=$(curl -sSL https://juicefs.com/static/Linux/mount.4.9 -o juicefs-ee && chmod +x juicefs-ee && ./juicefs-ee -V | cut -d' ' -f3)
if [ -z "$JUICEFS_EE_LATEST_VERSION" ]; then
echo "Failed to get juicefs ee version"
exit 1
fi
echo "JUICEFS_EE_LATEST_VERSION=$JUICEFS_EE_LATEST_VERSION" >> $GITHUB_ENV
echo "mount image is juicedata/mount:ee-$JUICEFS_EE_LATEST_VERSION"
echo "MOUNT_IMAGE_EXIST=false" >> $GITHUB_ENV
docker pull juicedata/mount:ee-$JUICEFS_EE_LATEST_VERSION
rst=$?
if [ $rst -eq 0 ]; then
echo "MOUNT_IMAGE_EXIST=true" >> $GITHUB_ENV
fi
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Buildx and Push juicefs image
if: env.MOUNT_IMAGE_EXIST == 'false'
env:
EEVERSION: ee-${{ env.JUICEFS_EE_LATEST_VERSION }}
IMAGE_TAG: ee-${{ env.JUICEFS_EE_LATEST_VERSION }}
ACR_TOKEN: ${{ secrets.ACR_TOKEN }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
run: |
echo "Build JuiceFS new version image"
make -C docker ee-image-4.0-buildx
- name: sync image
if: env.MOUNT_IMAGE_EXIST == 'false'
env:
IMAGE_TAG: ee-${{ env.JUICEFS_EE_LATEST_VERSION }}
ACR_TOKEN: ${{ secrets.ACR_TOKEN }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
run: |
cd ${GITHUB_WORKSPACE}/.github/scripts/
./sync.sh juicedata/mount:${{ env.IMAGE_TAG }}
- name: Result
env:
IMAGE_TAG: ee-${{ env.JUICEFS_EE_LATEST_VERSION }}
run: |
mount_image_exist=${{ env.MOUNT_IMAGE_EXIST }}
if [ $mount_image_exist == "false" ]; then
echo "✅ All Images are available here: "
echo "🐳 Image in dockerhub:"
echo " docker.io/juicedata/mount:${IMAGE_TAG}"
echo "☁️ Image in Alibaba Cloud Registry: "
echo " registry.cn-hangzhou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-chengdu.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-beijing.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-qingdao.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-shanghai.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-zhangjiakou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-shenzhen.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-heyuan.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-guangzhou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-wulanchabu.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-hongkong.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-huhehaote.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
else
echo "⚠️ JuiceFS mount image [docker.io/juicedata/mount:${IMAGE_TAG}] already exists"
fi
- name: Setup upterm session
if: ${{ failure() }}
timeout-minutes: 60
uses: lhotari/action-upterm@v1
publish-ee-5_0-mount-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Login Docker Hub
env:
PASSWORD: ${{ secrets.DOCKERHUB_FUSE_ACCESS_TOKEN }}
run: docker login --username chnliyong --password ${PASSWORD}
- name: check latest tag
continue-on-error: true
env:
ee_pkg_url: ${{ inputs.ee_pkg_url }}
run: |
set +e
url=${{ env.ee_pkg_url }}
if [ -z "$ee_pkg_url" ]; then
url="https://static.juicefs.com/release/bin_pkgs/latest_stable_full.tar.gz"
fi
curl -sSL $url | tar -xz
version=$(grep -oP 'mount_version=\K.*' version.ini)
hash=$(./Linux/mount version | awk -F '[()]' '{print $2}' | awk '{print $NF}')
JUICEFS_EE_LATEST_VERSION=$version-$hash
if [ -z "$JUICEFS_EE_LATEST_VERSION" ]; then
echo "Failed to get juicefs ee version"
exit 1
fi
PKG="full"
if echo "$url" | grep -q "std"; then
PKG="std"
JUICEFS_EE_LATEST_VERSION=$version-$hash-std
elif echo "$url" | grep -q "min"; then
PKG="min"
JUICEFS_EE_LATEST_VERSION=$version-$hash-min
fi
echo "JUICEFS_EE_LATEST_VERSION=$JUICEFS_EE_LATEST_VERSION" >> $GITHUB_ENV
echo "IMAGE_TAG=ee-$JUICEFS_EE_LATEST_VERSION" >> $GITHUB_ENV
echo "PKGTYPE=$PKG" >> $GITHUB_ENV
echo "mount image is juicedata/mount:ee-$JUICEFS_EE_LATEST_VERSION"
echo "MOUNT_IMAGE_EXIST=false" >> $GITHUB_ENV
docker pull juicedata/mount:ee-$JUICEFS_EE_LATEST_VERSION
rst=$?
if [ $rst -eq 0 ]; then
echo "MOUNT_IMAGE_EXIST=true" >> $GITHUB_ENV
fi
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and Push juicefs image
if: env.MOUNT_IMAGE_EXIST == 'false'
env:
EEVERSION: ee-${{ env.JUICEFS_EE_LATEST_VERSION }}
IMAGE_TAG: ${{ env.IMAGE_TAG }}
ACR_TOKEN: ${{ secrets.ACR_TOKEN }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
JFSPKGURL: ${{ inputs.ee_pkg_url }}
PKGTYPE: ${{ env.PKGTYPE }}
run: |
echo "Build JuiceFS new version image: $IMAGE_TAG"
if [ ${PKGTYPE} == "full" ]; then
make -C docker ee-image-buildx
else
make -C docker ee-image
fi
echo "JuiceFS new image [juicedata/mount:$IMAGE_TAG] built successfully"
- name: Get Slack User ID
if: always()
id: get_slack_user_id
run: |
GITHUB_ACTOR="${{ github.actor }}"
SLACK_USER_ID=$(echo "${{vars.SLACK_IDS_MAP}}" | grep -o "$GITHUB_ACTOR=[^:]*" | cut -d= -f2)
echo "SLACK_USER_ID=$SLACK_USER_ID" >> $GITHUB_ENV
- name: Send Slack notification on failure
if: github.event_name == 'workflow_dispatch' && always() && failure() && env.MOUNT_IMAGE_EXIST == 'false'
uses: slackapi/slack-github-action@v1.23.0
with:
channel-id: "${{ vars.SLACK_CHANNEL_ID_FOR_RELEASE_NOTICE }}"
slack-message: "❌ Mount Image built failed <@${{ env.SLACK_USER_ID }}>, CI URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id}}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
- name: Send Slack Notification On Success
if: github.event_name == 'workflow_dispatch' && always() && success() && env.MOUNT_IMAGE_EXIST == 'false'
uses: slackapi/slack-github-action@v1.23.0
with:
channel-id: "${{ vars.SLACK_CHANNEL_ID_FOR_RELEASE_NOTICE }}"
slack-message: "✅ Mount Image built sucessfully, <@${{ env.SLACK_USER_ID }}>. \n🐳 Image in dockerhub: docker.io/juicedata/mount:${{ env.IMAGE_TAG }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
- name: sync image
if: env.MOUNT_IMAGE_EXIST == 'false'
env:
IMAGE_TAG: ${{ env.IMAGE_TAG }}
ACR_TOKEN: ${{ secrets.ACR_TOKEN }}
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
run: |
cd ${GITHUB_WORKSPACE}/.github/scripts/
./sync.sh juicedata/mount:${{ env.IMAGE_TAG }}
- name: Result
env:
IMAGE_TAG: ee-${{ env.JUICEFS_EE_LATEST_VERSION }}
run: |
mount_image_exist=${{ env.MOUNT_IMAGE_EXIST }}
if [ $mount_image_exist == "false" ]; then
echo "✅ All Images are available here: "
echo "🐳 Image in dockerhub:"
echo " docker.io/juicedata/mount:${IMAGE_TAG}"
echo "☁️ Image in Alibaba Cloud Registry: "
echo " registry.cn-hangzhou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-chengdu.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-beijing.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-qingdao.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-shanghai.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-zhangjiakou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-shenzhen.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-heyuan.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-guangzhou.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-wulanchabu.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-hongkong.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
echo " registry.cn-huhehaote.aliyuncs.com/juicedata/mount:${IMAGE_TAG}"
else
echo "⚠️ JuiceFS mount image [docker.io/juicedata/mount:${IMAGE_TAG}] already exists"
fi
- name: Setup upterm session
if: ${{ failure() }}
timeout-minutes: 60
uses: lhotari/action-upterm@v1