Skip to content

fix bug: 任务重复执行 #52

fix bug: 任务重复执行

fix bug: 任务重复执行 #52

Workflow file for this run

name: Build and Push Docker Image
on:
push:
branches:
- master
- dev
tags:
- 'v*'
pull_request:
branches:
- master
- dev
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
# 1. 检出代码
- name: Checkout repository
uses: actions/checkout@v3
# 2. 从 version.yml 读取版本号 (修复版)
- name: Extract version from version.yml
id: version
run: |
# 检查文件是否存在
if [ ! -f "version.yml" ]; then
echo "❌ 错误:version.yml 文件不存在"
exit 1
fi
echo "=== version.yml 内容 ==="
cat version.yml
echo "======================"
# 方法1: 使用简单的grep和sed提取(无需安装yq)
RAW_VERSION=$(grep -E '^version:' version.yml | cut -d':' -f2 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
if [ -z "$RAW_VERSION" ]; then
echo "❌ 错误:无法从 version.yml 读取 version 字段"
exit 1
fi
# 清理版本号(移除引号和v前缀)
CLEAN_VERSION=$(echo "$RAW_VERSION" | tr -d '\"'"'" | sed 's/^v//')
# 验证版本格式 (x.y.z, x.y.z-dev, 或 dev)
if [[ ! "$CLEAN_VERSION" =~ ^([0-9]+\.[0-9]+\.[0-9]+(-dev)?|dev)$ ]]; then
echo "❌ 错误:版本号格式无效,应为 x.y.z、x.y.z-dev 或 dev(例如 1.0.1、1.0.1-dev 或 dev)"
echo "当前值: '$CLEAN_VERSION'"
exit 1
fi
# 检查是否为dev版本
if [[ "$CLEAN_VERSION" == *"dev"* ]]; then
echo "⚠️ 检测到dev版本,将不推送latest标签"
echo "is_dev=true" >> $GITHUB_OUTPUT
else
echo "is_dev=false" >> $GITHUB_OUTPUT
fi
echo "✅ 版本号: $CLEAN_VERSION"
echo "version=$CLEAN_VERSION" >> $GITHUB_OUTPUT
# 3. 登录 Docker Hub
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# 4. 设置 Docker Buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# 5. 构建并推送 Docker 镜像(带版本标签)
- name: Build and push with version tag
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: true
tags: 7ommymerlin/notify-scheduler:${{ steps.version.outputs.version }}
# 6. 推送 latest 标签(仅非dev版本)
- name: Push latest tag
if: steps.version.outputs.is_dev == 'false'
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: true
tags: 7ommymerlin/notify-scheduler:latest
# 7. 验证推送结果
- name: Verify pushed tags
run: |
echo "✅ 镜像已成功推送至 Docker Hub"
echo "📦 镜像标签:"
echo " - 7ommymerlin/notify-scheduler:${{ steps.version.outputs.version }}"
if [ "${{ steps.version.outputs.is_dev }}" == "false" ]; then
echo " - 7ommymerlin/notify-scheduler:latest"
else
echo " ⚠️ dev版本,未推送latest标签"
fi