Skip to content

Commit 16586ec

Browse files
committed
a docs commit rebuilt and re-signed a binary that had not changed
Publishing a rolling build on every push to main meant a README edit produced a new signed artifact identical to the last one. That is not just waste: a release appearing says something shipped, and nothing had. The obvious fix is a paths-ignore on the push trigger, and it is wrong. A path filter under `on.push` cannot be scoped to branches, so it would sit in front of the tag trigger too, and a tag usually points at a commit that was already pushed. Whether GitHub considers such a push to have changed any files is not something worth learning by cutting a release and watching nothing happen. So the two triggers stop sharing an event. release.yml keeps the tag trigger and gains workflow_call; rolling.yml owns main, carries the path filter, and calls release.yml. One job body, no duplication, and the github context in a called workflow belongs to the caller, so the branch-vs-tag branch inside it still sees exactly what it saw before. Nothing under an ignored path can reach the binary. The assets that do are compiled in from assets/, which is not ignored, and ci.yml has no path filter at all, so the tests that read README.md still run on every push regardless of what this skips. actionlint covers the new failure mode too, verified by sabotage: removing workflow_call from release.yml makes it report that rolling.yml calls a workflow that cannot be called. 133 tests, 3 workflows clean.
1 parent 5870746 commit 16586ec

2 files changed

Lines changed: 33 additions & 6 deletions

File tree

‎.github/workflows/release.yml‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ on:
66
push:
77
tags:
88
- "v*"
9-
# main is the rolling channel. kuma is consumed by rebuilding
10-
# constantly, so waiting for a tag to get a usable binary would mean
11-
# the published one is nearly always behind the tree it is meant to
12-
# build from.
13-
branches:
14-
- main
9+
# The rolling channel calls this workflow instead of sharing its push
10+
# trigger. A path filter on `push` cannot be scoped to branches, so
11+
# skipping doc-only builds here would also put the filter in front of
12+
# every tag, and a tag usually points at a commit that was already
13+
# pushed. What GitHub reports as "changed" for that push is not
14+
# something to find out by cutting a release and watching nothing
15+
# happen. See rolling.yml.
16+
workflow_call:
1517
workflow_dispatch:
1618

1719
permissions:

‎.github/workflows/rolling.yml‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
name: rolling
2+
3+
# main is the rolling channel. kuma is consumed by rebuilding constantly,
4+
# so waiting for a tag to get a usable binary would mean the published one
5+
# is nearly always behind the tree it is meant to build from.
6+
#
7+
# Documentation is excluded because rebuilding and re-signing an identical
8+
# binary says a release happened when nothing shipped. Nothing under an
9+
# ignored path reaches the binary: the assets that do are compiled in from
10+
# assets/, and ci.yml has no path filter, so the tests that read README.md
11+
# still run on every push.
12+
on:
13+
push:
14+
branches:
15+
- main
16+
paths-ignore:
17+
- "**.md"
18+
- LICENSE
19+
20+
jobs:
21+
rolling:
22+
uses: ./.github/workflows/release.yml
23+
permissions:
24+
contents: write
25+
id-token: write

0 commit comments

Comments
 (0)