-
Notifications
You must be signed in to change notification settings - Fork 63
137 lines (125 loc) · 5.03 KB
/
Copy pathdocker-image.yml
File metadata and controls
137 lines (125 loc) · 5.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
name: docker-image
on:
push:
tags:
- 'v*' # 当推送 v* 标签时触发,如 v1.0.0
workflow_dispatch: # 允许手动触发
inputs:
tag:
description: 'Release tag (e.g., v1.0.0)'
required: true
type: string
env:
APP_NAME: cloudpan189-share
DOCKERHUB_REPO: xxcheng123/cloudpan189-share
MODULE_NAME: github.com/xxcheng123/cloudpan189-share
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # 获取完整的 git 历史,用于生成构建信息
- name: 🔧 Set up QEMU
uses: docker/setup-qemu-action@v3
- name: 🔧 Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: 🔑 Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: 📊 Generate build metadata
id: meta
run: |
# 设置版本
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "APP_VERSION=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
else
echo "APP_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
fi
# 生成构建信息 - 与 Makefile 保持一致
echo "VAR_COMMIT=$(git rev-parse HEAD)" >> $GITHUB_ENV
echo "VAR_BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> $GITHUB_ENV
echo "VAR_GIT_SUMMARY=$(git describe --tags --dirty --always 2>/dev/null || git rev-parse --short HEAD)" >> $GITHUB_ENV
echo "VAR_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
# 输出构建信息用于调试
echo "🔍 Build Information:"
echo " Version: ${APP_VERSION:-${GITHUB_REF#refs/tags/}}"
echo " Commit: $(git rev-parse HEAD)"
echo " Build Date: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo " Git Summary: $(git describe --tags --dirty --always 2>/dev/null || git rev-parse --short HEAD)"
echo " Git Branch: $(git rev-parse --abbrev-ref HEAD)"
- name: 🔨 Build and push
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
build-args: |
MODULE_NAME=${{ env.MODULE_NAME }}
VAR_COMMIT=${{ env.VAR_COMMIT }}
VAR_BUILD_DATE=${{ env.VAR_BUILD_DATE }}
VAR_GIT_SUMMARY=${{ env.VAR_GIT_SUMMARY }}
VAR_GIT_BRANCH=${{ env.VAR_GIT_BRANCH }}
# 只有符合 vX.Y.Z 的稳定版才额外打 latest,预发布版(包含 '-')只打自身版本
tags: ${{ fromJson(
concat(
'["', env.DOCKERHUB_REPO, ':', env.APP_VERSION, '"',
contains(env.APP_VERSION, '-') ?
'' :
concat(',"', env.DOCKERHUB_REPO, ':latest"'),
']'
)
) }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: 🔍 Inspect multi-arch image
run: |
echo "🔍 检查多架构镜像信息..."
docker buildx imagetools inspect ${{ env.DOCKERHUB_REPO }}:${{ env.APP_VERSION }}
- name: 📋 Docker Image Info
run: |
echo "🎉 Docker 镜像构建完成!"
echo ""
echo "📦 镜像标签:"
echo " - ${{ env.DOCKERHUB_REPO }}:${{ contains(env.APP_VERSION, '-') && env.APP_VERSION || 'latest' }}"
echo " - ${{ env.DOCKERHUB_REPO }}:${{ env.APP_VERSION }}"
echo ""
echo "🏗️ 支持的架构:"
echo " - linux/amd64"
echo " - linux/arm64"
echo ""
echo "📋 构建信息:"
echo " - Commit: ${{ env.VAR_COMMIT }}"
echo " - Build Date: ${{ env.VAR_BUILD_DATE }}"
echo " - Git Summary: ${{ env.VAR_GIT_SUMMARY }}"
echo " - Git Branch: ${{ env.VAR_GIT_BRANCH }}"
echo ""
echo "🚀 使用方法:"
echo ""
echo "# 基本运行"
echo "docker run -d \\"
echo " --name ${{ env.APP_NAME }} \\"
echo " -p 12395:12395 \\"
echo " -v \$(pwd)/data:/app/data \\"
echo " --restart unless-stopped \\"
echo " ${{ env.DOCKERHUB_REPO }}:latest"
echo ""
echo "# 指定架构运行"
echo "docker run --platform linux/arm64 -d ${{ env.DOCKERHUB_REPO }}:latest"
echo ""
echo "# Docker Compose 示例"
echo "version: '3.8'"
echo "services:"
echo " cloudpan189-share:"
echo " image: ${{ env.DOCKERHUB_REPO }}:${{ env.APP_VERSION }}"
echo " container_name: ${{ env.APP_NAME }}"
echo " ports:"
echo " - \"12395:12395\""
echo " volumes:"
echo " - ./data:/app/data"
echo " restart: unless-stopped"
echo " environment:"
echo " - TZ=Asia/Shanghai"