1+ name : Build and Publish to CNB
2+
3+ on :
4+ push :
5+ branches : [ master ]
6+ workflow_dispatch : # 允许手动触发
7+
8+ env :
9+ # 设置镜像名和构建产物的名称
10+ IMAGE_NAME : docker.cnb.cool/alinche/linux-minimal
11+ ARTIFACT_NAME : myminilinux-build-artifacts
12+
13+ jobs :
14+ build :
15+ name : Build Linux Minimal
16+ runs-on : ubuntu-latest
17+ steps :
18+ - name : Checkout code
19+ uses : actions/checkout@v4
20+
21+ - name : Install Dependencies
22+ run : |
23+ sudo apt-get update
24+ sudo apt-get install -y build-essential g++ qemu-utils parted dosfstools e2fsprogs udev kpartx grub2-common
25+
26+ - name : Build Project
27+ run : |
28+ echo "开始构建..."
29+ make build
30+ make make_diskimage
31+
32+ mkdir -p build bin/vmlinuz
33+ tar -czf "${{ env.ARTIFACT_NAME }}.tar.gz" build bin/vmlinuz/vmlinuz-x86_64
34+ ls -lh "${{ env.ARTIFACT_NAME }}.tar.gz"
35+
36+ - name : Upload Build Artifacts
37+ uses : actions/upload-artifact@v4
38+ with :
39+ name : ${{ env.ARTIFACT_NAME }}
40+ path : " ${{ env.ARTIFACT_NAME }}.tar.gz"
41+ retention-days : 1
42+
43+ publish :
44+ name : Publish Docker Image
45+ needs : build # 必须等待 build 任务成功
46+ runs-on : ubuntu-latest
47+ steps :
48+ - name : Checkout code
49+ uses : actions/checkout@v4
50+ # 这里 checkout 主要是为了获取 Dockerfile
51+
52+ - name : Download Build Artifacts
53+ uses : actions/download-artifact@v4
54+ with :
55+ name : ${{ env.ARTIFACT_NAME }}
56+ # 下载到当前目录,这样 Docker build 就能找到了
57+ path : .
58+
59+ - name : Set up Docker Buildx
60+ uses : docker/setup-buildx-action@v2
61+
62+ - name : Login to CNB Registry
63+ uses : docker/login-action@v2
64+ with :
65+ registry : docker.cnb.cool
66+ username : cnb
67+ password : ${{ secrets.CNB_TOKEN }}
68+
69+ - name : Generate Tag
70+ id : meta
71+ run : |
72+ # 生成类似 :20251218-66ccff 的标签
73+ SHA_SHORT=$(git rev-parse --short HEAD)
74+ DATE_TAG=$(date +%Y%m%d)
75+ echo "tag=${DATE_TAG}-${SHA_SHORT}" >> $GITHUB_OUTPUT
76+
77+ - name : Build and Push Docker Image
78+ uses : docker/build-push-action@v4
79+ with :
80+ context : .
81+ # 指定你的 Dockerfile 路径
82+ file : Dockerfile
83+ platforms : linux/amd64
84+ push : true
85+ build-args : |
86+ TAR_FILE=${{ env.ARTIFACT_NAME }}.tar.gz
87+ tags : |
88+ ${{ env.IMAGE_NAME }}:latest
89+ ${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.tag }}
0 commit comments