Skip to content

ci(release): skip [Unreleased] changelog section for tag-based releases#39

Merged
airmang merged 1 commit into
mainfrom
fix/release-workflow-skip-unreleased
Apr 27, 2026
Merged

ci(release): skip [Unreleased] changelog section for tag-based releases#39
airmang merged 1 commit into
mainfrom
fix/release-workflow-skip-unreleased

Conversation

@airmang
Copy link
Copy Markdown
Owner

@airmang airmang commented Apr 27, 2026

문제

릴리즈 워크플로가 CHANGELOG.md의 첫 ## [...] 헤더를 버전 섹션으로 해석합니다. 관용적인 keep-a-changelog 구조에서는 [Unreleased]가 항상 맨 위에 있어, 태그를 밀면 validator가 CHANGELOG_VERSION=Unreleased로 읽고 tag/version 일치 검증에서 실패합니다. 실제로 v2.9.1 태그 푸시를 준비하는 과정에서 부딪혔습니다.

수정

두 곳 모두 [Unreleased] 헤더를 명시적으로 건너뛰도록 정리했습니다.

  • Validate tag/version consistency 스텝의 CHANGELOG 파서
  • Extract latest changelog section for release notes 스텝

로컬 검증

resolved changelog version: 2.9.1
OK
release_notes.md 첫 줄: '## [2.9.1] - 2026-04-27'

기대 효과

  • 태그 푸시 전에 [Unreleased] 블록을 비우지 않아도 릴리즈가 통과합니다.
  • keep-a-changelog 운영(다음 릴리즈 노트를 Unreleased에 선적재) 패턴이 자연스럽게 지원됩니다.

후속

머지 직후 v2.9.1 태그를 푸시해 실제 릴리즈 파이프라인이 새 로직으로 돌아가는지 확인합니다.

The release workflow matched the first '## [...]' heading in
CHANGELOG.md, which tripped on the conventional keep-a-changelog
[Unreleased] section and forced maintainers to choose between

  (a) deleting the Unreleased block before every tag push, or
  (b) keeping collected unreleased notes only after all tags shipped,

neither of which matches how keep-a-changelog is meant to work.

Skip the Unreleased heading explicitly in both validation and the
release-notes extraction step so the first actual version heading
(e.g. '## [2.9.1] - 2026-04-27') drives both the tag/version check
and the release body.
@airmang airmang merged commit 4cf99ae into main Apr 27, 2026
6 checks passed
@airmang airmang deleted the fix/release-workflow-skip-unreleased branch April 27, 2026 13:55
airmang added a commit to airmang/hwpx-mcp-server that referenced this pull request Apr 27, 2026
…g fix (#65)

* refactor(compat): drop id-generator shim now superseded by python-hwpx 2.9.1

python-hwpx 2.9.1 masks _paragraph_id / _object_id / _memo_id with
0x7FFFFFFF upstream (airmang/python-hwpx#34). The local compat shim
introduced in #64 is therefore redundant for anyone on 2.9.1+, which
is what pyproject.toml now requires.

Remove:
- _patch_upstream_id_generators_to_signed_int32 in compat.py
- tests/test_compat_id_sanitizer.py (covered upstream by
  tests/test_id_generator_range.py and test_skeleton_template_ids.py)

Keep _patch_sub_element_for_lxml_parent. Upstream 2.9.1 only fixed
the cell-text and run-style paths (airmang/python-hwpx#30); the other
26 stdlib ET.SubElement call sites in hwpx/oxml/document.py can still
trip the lxml dispatch mismatch until a follow-up upstream PR closes
them out.

Thanks to @seonghoony for the original shim (#64).

* chore(release): bump to 2.2.6, require python-hwpx>=2.9.1, drop legacy classifier

- Bump version to 2.2.6.
- Require python-hwpx >= 2.9.1 so the interop fixes merged upstream
  (ET.SubElement dispatch #30, id-range #34/#35) are always present.
- Drop the legacy 'License :: OSI Approved :: Apache Software License'
  classifier that collided with the PEP 639 'license' expression under
  setuptools>=77 (same source-install breakage that python-hwpx 2.9.1
  fixed).
- Record the above plus the compat shim removal in CHANGELOG [2.2.6].

* ci(release): skip [Unreleased] section when resolving changelog version

Mirror airmang/python-hwpx#39. The release workflow matched the first
'## [...]' heading in CHANGELOG.md, so maintainers had to empty the
conventional keep-a-changelog [Unreleased] block before every tag push.

Skip the Unreleased heading explicitly in both validation and the
release-notes extraction step so the first actual version heading
(e.g. '## [2.2.6] - 2026-04-27') drives both the tag/version check
and the release body.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant