Skip to content

Commit b98c827

Browse files
chore: docker policy changed
1 parent 9d14700 commit b98c827

3 files changed

Lines changed: 70 additions & 14 deletions

File tree

.github/workflows/docker-publish.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,48 @@ jobs:
2424
runs-on: ubuntu-latest
2525
steps:
2626
- uses: actions/checkout@v4
27+
with:
28+
fetch-depth: 0
29+
30+
- name: Check Docker publish policy
31+
id: policy
32+
shell: bash
33+
run: |
34+
set -euo pipefail
35+
36+
should_publish="true"
37+
reason="manual dispatch or no opt-out marker"
38+
39+
if [[ "${GITHUB_EVENT_NAME}" == "push" && "${GITHUB_REF_TYPE}" == "tag" ]]; then
40+
tag_message="$(git for-each-ref "refs/tags/${GITHUB_REF_NAME}" --format='%(contents)' || true)"
41+
if printf '%s\n' "${tag_message}" | grep -qiE '^Docker-Image:[[:space:]]*false[[:space:]]*$'; then
42+
should_publish="false"
43+
reason="tag ${GITHUB_REF_NAME} has Docker-Image: false"
44+
fi
45+
fi
46+
47+
echo "should_publish=${should_publish}" >> "${GITHUB_OUTPUT}"
48+
{
49+
echo "## Docker Publish Policy"
50+
echo ""
51+
echo "- Should publish: \`${should_publish}\`"
52+
echo "- Reason: ${reason}"
53+
} >> "${GITHUB_STEP_SUMMARY}"
2754
2855
- name: Set up Docker Buildx
56+
if: steps.policy.outputs.should_publish == 'true'
2957
uses: docker/setup-buildx-action@v3
3058

3159
- name: Log in to GitHub Container Registry
60+
if: steps.policy.outputs.should_publish == 'true'
3261
uses: docker/login-action@v3
3362
with:
3463
registry: ghcr.io
3564
username: ${{ github.actor }}
3665
password: ${{ secrets.GITHUB_TOKEN }}
3766

3867
- name: Extract metadata
68+
if: steps.policy.outputs.should_publish == 'true'
3969
id: meta
4070
uses: docker/metadata-action@v5
4171
with:
@@ -48,6 +78,7 @@ jobs:
4878
type=raw,value=${{ github.event.inputs.tag }},enable=${{ github.event_name == 'workflow_dispatch' }}
4979
5080
- name: Build and push
81+
if: steps.policy.outputs.should_publish == 'true'
5182
uses: docker/build-push-action@v5
5283
with:
5384
context: docker

.github/workflows/release.yml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ on:
1919
create_github_release:
2020
description: 'Create a GitHub Release'
2121
required: true
22+
default: false
23+
type: boolean
24+
publish_docker_image:
25+
description: 'Publish Docker image for this version'
26+
required: true
2227
default: true
2328
type: boolean
2429
dry_run:
@@ -140,6 +145,8 @@ jobs:
140145
echo "- Latest stable tag: \`${latest_tag}\`"
141146
echo "- New version: \`${new_version}\`"
142147
echo "- Release type: \`${RELEASE_TYPE}\`"
148+
echo "- Create GitHub Release: \`${{ inputs.create_github_release }}\`"
149+
echo "- Publish Docker image: \`${{ inputs.publish_docker_image }}\`"
143150
echo "- Release document: \`${release_doc_status}\`"
144151
} >> "${GITHUB_STEP_SUMMARY}"
145152
@@ -215,6 +222,8 @@ jobs:
215222
echo ""
216223
echo "- Previous tag: ${LATEST_TAG}"
217224
echo "- New tag: ${NEW_VERSION}"
225+
echo "- GitHub Release: ${{ inputs.create_github_release }}"
226+
echo "- Docker image: ${{ inputs.publish_docker_image }}"
218227
} > release-body.md
219228
220229
echo "body_file=release-body.md" >> "${GITHUB_OUTPUT}"
@@ -227,6 +236,9 @@ jobs:
227236
shell: bash
228237
env:
229238
NEW_VERSION: ${{ steps.version.outputs.new_version }}
239+
RELEASE_TYPE: ${{ inputs.release_type }}
240+
CREATE_GITHUB_RELEASE: ${{ inputs.create_github_release }}
241+
PUBLISH_DOCKER_IMAGE: ${{ inputs.publish_docker_image }}
230242
run: |
231243
set -euo pipefail
232244
@@ -239,7 +251,15 @@ jobs:
239251
exit 1
240252
fi
241253
242-
git tag -a "${NEW_VERSION}" -m "IMX-Forge ${NEW_VERSION}"
254+
{
255+
echo "IMX-Forge ${NEW_VERSION}"
256+
echo ""
257+
echo "Release-Type: ${RELEASE_TYPE}"
258+
echo "GitHub-Release: ${CREATE_GITHUB_RELEASE}"
259+
echo "Docker-Image: ${PUBLISH_DOCKER_IMAGE}"
260+
} > tag-message.txt
261+
262+
git tag -a "${NEW_VERSION}" -F tag-message.txt
243263
git push origin "refs/tags/${NEW_VERSION}"
244264
245265
- name: Create GitHub Release

document/release/versioning-strategy.md

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ IMX-Forge 目前更适合采用 **维护者手动触发 release workflow** 的
1616
- PR 只承担代码和文档变更,不承担版本号决策。
1717
- 版本号不是单个 PR 的属性,而是维护者对一批变更形成稳定发布点后的判断。
1818
- 是否发布、发布为 PATCH / MINOR / MAJOR,由维护者在触发 workflow 时决定。
19-
- workflow 负责执行机械动作:计算版本号、打 tag、创建 GitHub Release、触发 Docker 发布。
19+
- workflow 负责执行机械动作:计算版本号、打 tag,并按维护者选择创建 GitHub Release、触发 Docker 发布。
2020

2121
这样可以避免小修小补频繁发布 PATCH,也保留 CI 自动化带来的可重复性和低出错率。
2222

@@ -32,7 +32,7 @@ IMX-Forge 目前更适合采用 **维护者手动触发 release workflow** 的
3232
| Release 文档 | `document/release/v1.0.0.md` | 适合继续按正式版本维护 |
3333
| CHANGELOG | `changelog/CHANGELOG.md` | 已存在,后续沿用此路径 |
3434
| GitHub Actions workflow | 5 个 | 已有 CI、Full Build、Pages、Docker 发布基础 |
35-
| Docker 发布触发 | `v*.*.*` tag | 与手动 release workflow 天然衔接 |
35+
| Docker 发布触发 | `v*.*.*` tag + tag message 策略 | 与手动 release workflow 衔接,并支持按版本跳过 |
3636
| `package.json` version | `0.0.1``private: true` | 不作为项目发布版本源 |
3737

3838
现有 workflow:
@@ -43,7 +43,7 @@ IMX-Forge 目前更适合采用 **维护者手动触发 release workflow** 的
4343
- `.github/workflows/deploy.yml`
4444
- `.github/workflows/docker-publish.yml`
4545

46-
关键点:`.github/workflows/docker-publish.yml` 已经在 `v*.*.*` tag push 时发布 Docker 镜像。因此 release workflow 只要推送正式 tag,就能自然触发 Docker 发布
46+
关键点:`.github/workflows/docker-publish.yml` 已经在 `v*.*.*` tag push 时响应 Docker 发布。release workflow 会在 annotated tag message 中写入 `Docker-Image: true/false`,Docker workflow 据此决定是否实际构建镜像
4747

4848
---
4949

@@ -160,7 +160,8 @@ MAJOR 只用于不兼容变化。
160160
|---|---|---|
161161
| `release_type` | `patch` / `minor` / `major` | 必填,决定版本号升级段 |
162162
| `version_override` | string | 可选,手动指定版本号;为空时自动计算 |
163-
| `create_github_release` | boolean | 默认 `true`,是否创建 GitHub Release |
163+
| `create_github_release` | boolean | 默认 `false`,是否创建 GitHub Release |
164+
| `publish_docker_image` | boolean | 默认 `true`,是否发布 Docker 镜像 |
164165
| `dry_run` | boolean | 默认 `true`,仅计算和预览,不推送 tag |
165166

166167
正式发布示例:
@@ -186,14 +187,18 @@ release workflow 应执行以下动作:
186187
|-- 运行必要发布前检查
187188
|-- 创建 annotated tag
188189
|-- push tag
189-
|-- 创建 GitHub Release
190-
|-- docker-publish.yml 自动响应 tag 并发布 Docker 镜像
190+
|-- 按 create_github_release 决定是否创建 GitHub Release
191+
|-- 按 publish_docker_image 决定 docker-publish.yml 是否发布 Docker 镜像
191192
```
192193

193-
建议 tag 使用 annotated tag:
194+
建议 tag 使用 annotated tag,并写入发布意图
194195

195-
```bash
196-
git tag -a "v1.1.0" -m "IMX-Forge v1.1.0"
196+
```text
197+
IMX-Forge v1.1.0
198+
199+
Release-Type: minor
200+
GitHub-Release: true
201+
Docker-Image: true
197202
```
198203

199204
### 5.4 发布前检查
@@ -216,7 +221,7 @@ Full Build 是否放进 release workflow 可按阶段决定。当前建议:
216221

217222
## 6. GitHub Release 策略
218223

219-
正式 tag 默认创建 GitHub Release。
224+
正式 tag 默认不创建 GitHub Release。维护者只在该版本值得公告时开启 `create_github_release`
220225

221226
建议:
222227

@@ -275,7 +280,7 @@ IMX-Forge vX.Y.Z
275280
[![License](https://img.shields.io/badge/License-MIT-orange?style=flat-square)](LICENSE)
276281
```
277282

278-
由于正式 tag 默认创建 GitHub Release,README badge 与 Docker tag、GitHub Release 不会出现明显版本分裂
283+
由于 GitHub Release 与 Docker 镜像发布已经解耦,README badge 展示的是最新 GitHub Release,不一定等于最新 git tag 或 Docker 镜像版本。这是有意设计:Release 用于公告稳定节点,Docker 镜像可按需更频繁更新
279284

280285
---
281286

@@ -381,11 +386,11 @@ v1.1.0
381386

382387
| # | 项目 | 类型 | 说明 |
383388
|---|---|---|---|
384-
| 1 | `.github/workflows/release.yml` | 新增 | 手动触发 release,计算版本号、打 tag、创建 Release |
389+
| 1 | `.github/workflows/release.yml` | 新增 | 手动触发 release,计算版本号、打 tag,并按选项创建 Release / 发布 Docker |
385390
| 2 | `README.md` | 修改 | 在 badge 区域增加 Release badge |
386391
| 3 | `changelog/CHANGELOG.md` | 修改 | 保持现有路径,后续按版本补充 |
387392
| 4 | `document/release/versioning-strategy.md` | 修改 | 本策略文档,已接入发布文档站 |
388-
| 5 | `.github/workflows/docker-publish.yml` | 复用 | 继续由 `v*.*.*` tag 自动触发 Docker 发布 |
393+
| 5 | `.github/workflows/docker-publish.yml` | 修改 | 继续响应 `v*.*.*` tag,并按 tag message 中的 `Docker-Image` 决定是否发布 |
389394

390395
暂不实施:
391396

0 commit comments

Comments
 (0)