feat: update the yao base image
This commit is contained in:
parent
df3dd3fb34
commit
11a05a93c2
5 changed files with 103 additions and 63 deletions
54
.github/workflows/publish-docker.yml
vendored
54
.github/workflows/publish-docker.yml
vendored
|
|
@ -2,58 +2,32 @@ name: Publish Docker Image
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
|
||||||
run_id:
|
|
||||||
description: "Build Linux Artifacts Run ID"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
workflow_run:
|
workflow_run:
|
||||||
workflows: ["Build Linux Artifacts"]
|
workflows: ["Build Linux Artifacts"]
|
||||||
types:
|
types:
|
||||||
- completed
|
- completed
|
||||||
|
|
||||||
env:
|
|
||||||
DOCKER_IMAGE: yaoapp/yao
|
|
||||||
PLATFORMS: linux/amd64,linux/arm64
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish:
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download artifacts
|
- name: Checkout code
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
|
||||||
name: yao-linux
|
|
||||||
path: dist/release
|
|
||||||
run-id: ${{ github.event.workflow_run.id || inputs.run_id }}
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
- name: Login to DockerHub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Get Version
|
- name: Run build script
|
||||||
run: |
|
run: |
|
||||||
VERSION=$(ls dist/release/yao-*-linux-amd64 | sed 's/.*yao-\(.*\)-unstable-linux-amd64/\1/')
|
chmod +x ./docker/base/build-docker-and-publish.sh
|
||||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
./docker/base/build-docker-and-publish.sh
|
||||||
|
env:
|
||||||
- name: Build and push
|
DOCKER_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
uses: docker/build-push-action@v5
|
DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: docker/base/Dockerfile
|
|
||||||
platforms: ${{ env.PLATFORMS }}
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
${{ env.DOCKER_IMAGE }}:latest
|
|
||||||
${{ env.DOCKER_IMAGE }}:${{ env.VERSION }}
|
|
||||||
build-args: |
|
|
||||||
VERSION=${{ env.VERSION }}
|
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -43,4 +43,5 @@ docker/build/test
|
||||||
db
|
db
|
||||||
*.sh
|
*.sh
|
||||||
!get-yao.sh
|
!get-yao.sh
|
||||||
|
!docker/base/**
|
||||||
__debug*
|
__debug*
|
||||||
|
|
@ -1,26 +1,17 @@
|
||||||
# ===========================================
|
# ===========================================
|
||||||
# Yao Base Image
|
# Yao Base Image
|
||||||
# A minimal base image for running Yao applications
|
# A minimal base image for running Yao applications
|
||||||
#
|
|
||||||
# Build:
|
|
||||||
# docker build --platform linux/amd64 --build-arg VERSION=0.10.4 --build-arg ARCH=amd64 -t yaoapp/yao-base:0.10.4-amd64 .
|
|
||||||
# docker build --platform linux/arm64 --build-arg VERSION=0.10.4 --build-arg ARCH=arm64 -t yaoapp/yao-base:0.10.4-arm64 .
|
|
||||||
#
|
|
||||||
# Tests:
|
|
||||||
# docker run --rm yaoapp/yao-base:0.10.4-amd64 yao version
|
|
||||||
#
|
|
||||||
# ===========================================
|
# ===========================================
|
||||||
FROM alpine:latest
|
FROM debian:bullseye-slim
|
||||||
ARG VERSION
|
|
||||||
ARG ARCH
|
|
||||||
|
|
||||||
# Install minimal dependencies
|
# Install necessary tools and clean up in one layer
|
||||||
RUN apk --no-cache add curl
|
RUN apt-get update && apt-get install -y \
|
||||||
|
curl \
|
||||||
|
ca-certificates \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Copy and install Yao binary from build artifacts
|
# Download and install Yao using the original script
|
||||||
COPY dist/yao-${VERSION}-linux-${ARCH} /usr/local/bin/yao
|
RUN curl -fsSL https://raw.githubusercontent.com/sjzsdu/yao/refs/heads/main/get-yao.sh | bash
|
||||||
RUN chmod +x /usr/local/bin/yao && \
|
|
||||||
addgroup -S yao && adduser -S -G yao yao
|
|
||||||
|
|
||||||
# Switch to non-root user
|
# Set working directory
|
||||||
USER yao
|
WORKDIR /app
|
||||||
|
|
|
||||||
62
docker/base/build-docker-and-publish.sh
Normal file
62
docker/base/build-docker-and-publish.sh
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 获取脚本所在目录的绝对路径
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||||
|
|
||||||
|
# 获取项目根目录路径
|
||||||
|
PROJECT_ROOT="$( cd "$SCRIPT_DIR/../.." &> /dev/null && pwd )"
|
||||||
|
|
||||||
|
# 设置变量
|
||||||
|
IMAGE_NAME="sjzsdu/yao"
|
||||||
|
# 从 /share/const.go 文件中获取版本号
|
||||||
|
VERSION=$(sed -n 's/^const VERSION = "\(.*\)"/\1/p' "${PROJECT_ROOT}/share/const.go")
|
||||||
|
IMAGE_TAG="${VERSION}"
|
||||||
|
|
||||||
|
# 定义检查状态的函数
|
||||||
|
check_status() {
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "错误: $1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
# 检查版本号是否为空
|
||||||
|
if [ -z "$VERSION" ]; then
|
||||||
|
echo "错误: 无法从 ${PROJECT_ROOT}/share/const.go 文件中提取版本号"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "使用版本号: ${VERSION}"
|
||||||
|
|
||||||
|
# 构建 Docker 镜像
|
||||||
|
echo "正在构建 Docker 镜像..."
|
||||||
|
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} -f "${SCRIPT_DIR}/Dockerfile" "${SCRIPT_DIR}"
|
||||||
|
check_status "Docker 镜像构建失败"
|
||||||
|
|
||||||
|
# 检查镜像是否成功创建
|
||||||
|
echo "检查镜像是否创建成功..."
|
||||||
|
docker image inspect ${IMAGE_NAME}:${IMAGE_TAG} > /dev/null 2>&1
|
||||||
|
check_status "无法找到刚刚构建的镜像"
|
||||||
|
|
||||||
|
# Docker Hub 登录
|
||||||
|
echo "正在登录到 Docker Hub..."
|
||||||
|
if [ -n "$DOCKER_USERNAME" ] && [ -n "$DOCKER_PASSWORD" ]; then
|
||||||
|
# GitHub Actions 环境
|
||||||
|
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
||||||
|
else
|
||||||
|
# 本地环境
|
||||||
|
docker login
|
||||||
|
fi
|
||||||
|
check_status "Docker Hub 登录失败"
|
||||||
|
|
||||||
|
# 推送镜像到 Docker Hub
|
||||||
|
echo "正在推送镜像到 Docker Hub..."
|
||||||
|
docker push ${IMAGE_NAME}:${IMAGE_TAG}
|
||||||
|
check_status "推送镜像到 Docker Hub 失败"
|
||||||
|
|
||||||
|
# 标记并推送 latest 标签
|
||||||
|
echo "正在标记并推送 latest 标签..."
|
||||||
|
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
|
||||||
|
docker push ${IMAGE_NAME}:latest
|
||||||
|
check_status "推送 latest 标签失败"
|
||||||
|
|
||||||
|
echo "操作完成"
|
||||||
20
get-yao.sh
20
get-yao.sh
|
|
@ -37,11 +37,17 @@ DOWNLOAD_URL="https://github.com/$REPO/releases/download/v$VERSION/yao-$VERSION-
|
||||||
|
|
||||||
# 下载文件
|
# 下载文件
|
||||||
echo "正在下载 yao-$OS-$ARCH 版本 $VERSION ..."
|
echo "正在下载 yao-$OS-$ARCH 版本 $VERSION ..."
|
||||||
curl -L $DOWNLOAD_URL -o yao
|
TEMP_FILE="yao_temp_$RANDOM"
|
||||||
echo "下载 URL: $DOWNLOAD_URL"
|
if curl -L $DOWNLOAD_URL -o "$TEMP_FILE"; then
|
||||||
|
echo "下载完成。"
|
||||||
|
else
|
||||||
|
echo "下载失败,请检查网络连接或下载 URL。"
|
||||||
|
echo "下载 URL: $DOWNLOAD_URL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 使文件可执行
|
# 使文件可执行
|
||||||
chmod +x yao
|
chmod +x "$TEMP_FILE"
|
||||||
|
|
||||||
# 确定安装目录
|
# 确定安装目录
|
||||||
INSTALL_DIR="/usr/local/bin"
|
INSTALL_DIR="/usr/local/bin"
|
||||||
|
|
@ -52,7 +58,13 @@ fi
|
||||||
|
|
||||||
# 移动文件到安装目录
|
# 移动文件到安装目录
|
||||||
echo "正在安装 yao 到 $INSTALL_DIR ..."
|
echo "正在安装 yao 到 $INSTALL_DIR ..."
|
||||||
mv yao "$INSTALL_DIR/yao"
|
if mv "$TEMP_FILE" "$INSTALL_DIR/yao"; then
|
||||||
|
echo "yao 安装完成!"
|
||||||
|
else
|
||||||
|
echo "安装失败,无法移动文件到 $INSTALL_DIR。"
|
||||||
|
echo "请检查目录权限或手动移动文件。"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 检查安装目录是否在 PATH 中
|
# 检查安装目录是否在 PATH 中
|
||||||
if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
|
if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue