Skip to content

Commit 1e55785

Browse files
ashu17706github-actions[bot]Baseline Userclaude
authored
release: v0.4.1 (#42)
* chore: new branch (#33) * fix(ci): bench scorecard ci windows fixes (#34) * ci: auto-template and title for dev to main PRs * release: v0.3.2 (dev -> main) (#35) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * ci: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * release: v0.3.2 (dev -> main) (#37) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * CI: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * docs: update CHANGELOG.md for v0.4.0 [skip ci] * docs: add CI/release workflow architecture and north-star plan * ci: add commit lint, semver metadata, and deterministic release notes * docs: finalize workflow policy docs without backlog sections * ci: scope commit lint to pull request commit ranges only * fix(ci): setup bun before dev draft release metadata step * fix(ci): allow legacy non-conventional history for dev draft metadata * fix(release): align dev-main PR version with latest stable tag * ci: improve workflow and check naming for PR readability * ci: skip PR test job for dev to main release PRs * fix(ci): use import.meta.dir for cross-platform path resolution new URL(import.meta.url).pathname produces /D:/a/... on Windows, causing ENOENT errors. import.meta.dir is Bun's cross-platform alternative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add auto-release job for main branch merges After tests pass on main, automatically compute the next semver version and create a GitHub release. Handles squash merges (which lose individual commit types) by defaulting to patch when commits exist but bump is "none". Skips if HEAD is already tagged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 552ae12 commit 1e55785

1 file changed

Lines changed: 74 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,77 @@ jobs:
143143
generate_release_notes: false
144144
draft: true
145145
prerelease: true
146+
147+
auto-release:
148+
name: Push(main) / Auto Release
149+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
150+
needs: test-merge
151+
runs-on: ubuntu-latest
152+
permissions:
153+
contents: write
154+
155+
steps:
156+
- name: Checkout
157+
uses: actions/checkout@v4
158+
with:
159+
fetch-depth: 0
160+
submodules: recursive
161+
162+
- name: Check if already tagged
163+
id: check
164+
run: |
165+
# Skip if this commit already has a stable version tag
166+
for tag in $(git tag --points-at HEAD 2>/dev/null); do
167+
if echo "$tag" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+$'; then
168+
echo "skip=true" >> "$GITHUB_OUTPUT"
169+
echo "Commit already tagged as $tag, skipping."
170+
exit 0
171+
fi
172+
done
173+
echo "skip=false" >> "$GITHUB_OUTPUT"
174+
175+
- name: Setup Bun
176+
if: steps.check.outputs.skip != 'true'
177+
uses: oven-sh/setup-bun@v2
178+
with:
179+
bun-version: latest
180+
181+
- name: Install dependencies
182+
if: steps.check.outputs.skip != 'true'
183+
run: bun install
184+
185+
- name: Compute release metadata
186+
if: steps.check.outputs.skip != 'true'
187+
id: meta
188+
run: |
189+
bun run scripts/release-meta.ts --allow-invalid --github-output "$GITHUB_OUTPUT"
190+
191+
# Squash merges lose individual commit types, so if bump is
192+
# "none" but there are unreleased commits, default to patch.
193+
BUMP=$(grep '^bump=' "$GITHUB_OUTPUT" | cut -d= -f2)
194+
COUNT=$(grep '^commit_count=' "$GITHUB_OUTPUT" | cut -d= -f2)
195+
if [ "$BUMP" = "none" ] && [ "$COUNT" -gt 0 ]; then
196+
echo "Bump was 'none' with $COUNT commits — overriding to 'patch'"
197+
LATEST=$(git tag --list 'v*.*.*' --sort=-version:refname \
198+
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1)
199+
if [ -n "$LATEST" ]; then
200+
IFS='.' read -r MAJ MIN PAT <<< "${LATEST#v}"
201+
NEXT="v${MAJ}.${MIN}.$((PAT + 1))"
202+
else
203+
NEXT="v0.1.0"
204+
fi
205+
echo "next_version=${NEXT}" >> "$GITHUB_OUTPUT"
206+
echo "bump=patch" >> "$GITHUB_OUTPUT"
207+
fi
208+
209+
- name: Create release
210+
if: steps.check.outputs.skip != 'true' && steps.meta.outputs.bump != 'none'
211+
uses: softprops/action-gh-release@v2
212+
with:
213+
tag_name: ${{ steps.meta.outputs.next_version }}
214+
target_commitish: ${{ github.sha }}
215+
name: ${{ steps.meta.outputs.next_version }}
216+
body: ${{ steps.meta.outputs.release_notes }}
217+
generate_release_notes: false
218+
draft: false
219+
prerelease: false

0 commit comments

Comments
 (0)