gcsfuse-minor-release-branch
Skill2.3k starsChanged 20 days agoApache-2.0View on GitHub
End-to-end runbook for cutting and pushing a new GCSFuse minor release branch (v<major>.<minor>.0_release) from master after pre-cut govulncheck and unit test gating (raising master fix PRs first if any vulnerabilities or unit test failures exist).
- Deletes or force-pushes
- Installs packages
- Commits and pushes
We split this skill into the rules it gives an agent
24 rules. About 0 are common, 7 are distinctive, and 17 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
17
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 9
Zero-CVE Gate (
govulncheck): If govulncheck detects any vulnerabilities on master, do not cut the release branch. - Very specific: line 10
Unit Test Gate (
go test): If any unit test fails (unless the user explicitly specifies otherwise), do not cut the release branch. - Very specific: line 11
Cut & Push Release Branch: Only when master has zero vulnerabilities and zero unit test failures, cut v<major>.<minor>.0_release and push …
- Very specific: line 37
Always start by synchronizing local refs with origin:
- Distinctive: line 58
Verify that neither the release tag nor the remote/local release branch already exists:
- Very specific: line 68
User-Specified Commit: If the user provides a specific commit hash <commit_sha> (for example, the most recent commit on master that passed …
- Very specific: line 69
Default (
origin/master): If no commit hash is specified, use the tip of origin/master (git rev-parse origin/master). - Very specific: line 71
Verify that the target commit is a valid ancestor of origin/master, inspect its metadata, and check it out for pre-cut verification:
- Distinctive: line 82
Before cutting the minor release branch, verify that the target commit on master has 0 known security vulnerabilities.
- Very specific: line 94
Read the target Go version from .go-version and build a temporary gcsfuse binary in a temporary directory using that exact toolchain:
- Very specific: line 100
Run govulncheck in binary mode:
- Distinctive: line 104
Remove the temporary directory:
- Distinctive: line 120
If vulnerabilities are detected:
- Very specific: line 121
Stop the release branch creation workflow: Do not create or push v<major>.<minor>.0_release.
- Very specific: line 122
Create a remediation branch from origin/master (e.g., git checkout -b fix-cve-master origin/master).
- Very specific: line 123
Follow the GCSFuse Dependency Upgrading Skill to upgrade the affected Go modules and/or Go toolchain across the repository (remembering to …
- Very specific: line 135
Follow the GCSFuse Build and Style Verification Skill to verify compilation and code hygiene:
- Distinctive: line 147
Run the unit test suite across the repository:
- Distinctive: line 156
If one or more unit tests fail (and no user override was given):
- Very specific: line 158
Create a bug-fix branch from origin/master (e.g., git checkout -b fix-unit-tests-master origin/master).
- Very specific: line 176
Create and check out v<major>.<minor>.0_release pointing to <target_commit>:
- Distinctive: line 196
Before completing the task, verify the following:
- Very specific: line 200
If vulnerabilities were found: v<major>.<minor>.0_release was not created, and a PR fixing master was raised instead.
- Very specific: line 202
If unit tests failed (without user override): v<major>.<minor>.0_release was not created, and a PR fixing master was raised instead.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
GCSFuse Minor Release Branch Creation Skill
This skill provides a standardized, end-to-end workflow for cutting a new minor release branch (v<major>.<minor>.0_release, e.g., v3.13.0_release) for GCSFuse from master (or a specified commit hash). Before cutting the release branch, it enforces strict pre-cut health gates on master:
- Zero-CVE Gate (
govulncheck): Ifgovulncheckdetects any vulnerabilities onmaster, do not cut the release branch; instead, raise a PR againstmasterto remediate the vulnerabilities first. - Unit Test Gate (
go test): If any unit test fails (unless the user explicitly specifies otherwise), do not cut the release branch; instead, raise a PR againstmasterto fix the failing unit test(s) first. - Cut & Push Release Branch: Only when
masterhas zero vulnerabilities and zero unit test failures, cutv<major>.<minor>.0_releaseand push it toorigin.
Related Skills
- GCSFuse Dependency Upgrading Skill: Upgrading Go module dependencies and Go toolchain versions when
govulncheckdetects vulnerabilities onmaster. - GCSFuse Build and Style Verification Skill: Local compilation, formatting, and static analysis verification via
make build. - GCSFuse Pull Request Creation Skill: Raising a PR targeting
masterto fix vulnerabilities or unit test failures discovered during pre-cut verification. - GCSFuse Release Branch CVE Patching Skill: Creating subsequent patch release branches (
v<major>.<minor>.<N+1>_releasefromv<major>.<minor>.<N>_release) and remediating CVEs on existing release streams.
flowchart TD
A["1. Fetch Tags & Remote Release Branches"] --> B["2. Determine Next Minor Version (vX.Y.0_release) & Target Commit"]
B --> C["3. Verify No Existing Tag/Branch Conflict"]
C --> D["4. Run govulncheck on Target Commit (Binary + Module Scan)"]
D --> E{"Vulnerabilities Found?"}
E -- "Yes" --> F["Stop Release Cut: Raise PR to Fix CVEs on master"]
E -- "No (0 CVEs)" --> G["5. Run Build & Unit Tests"]
G --> H{"Unit Test Failures?"}
H -- "Yes (Unless User Overrides)" --> I["Stop Release Cut: Raise PR to Fix Unit Tests on master"]
H -- "No (All Pass)" --> J["6. Cut vX.Y.0_release & Push to origin"]Phase 1: Version & Source Commit Discovery
1.1 Fetch Latest Tags and Remote Branches
Always start by synchronizing local refs with origin:
git fetch origin --tags --prune1.2 Determine the Next Minor Release Version (v<major>.<minor>.0)
- If the user explicitly specifies a target minor version (e.g.,
v3.13,3.13, orv3.13.0), normalize it to:- Release version:
v<major>.<minor>.0(e.g.,v3.13.0) - Release branch:
v<major>.<minor>.0_release(e.g.,v3.13.0_release)
- Release version:
- If the user does not specify a version, discover the highest existing
<major>.<minor>release stream from tags and remote*_releasebranches:
Incrementgit tag -l "v*.*.*" --sort=-v:refname | head -n 20 git branch -r --list "origin/v*.*.*_release" --sort=-v:refname | head -n 20<minor>by1and set the patch version to0:- Latest minor stream:
v<major>.<M>.*(e.g.,v3.12.1) - Next minor release version:
v<major>.<M+1>.0(e.g.,v3.13.0) - Next minor release branch:
v<major>.<M+1>.0_release(e.g.,v3.13.0_release)
- Latest minor stream:
- Check for Existing Tag or Branch Conflicts:
Verify that neither the release tag nor the remote/local release branch already exists:
git tag -l "v<major>.<minor>.0" git branch -a --list "*v<major>.<minor>.0_release"[!IMPORTANT] If
v<major>.<minor>.0ororigin/v<major>.<minor>.0_releasealready exists, stop immediately and ask the user whether they meant to cut the next minor version (v<major>.<minor+1>.0_release) or a patch release branch (v<major>.<minor>.<N+1>_release).
1.3 Identify and Checkout the Target Source Commit
- Determine the source commit on
master:- User-Specified Commit: If the user provides a specific commit hash
<commit_sha>(for example, the most recent commit onmasterthat passed the periodic continuous E2E test build at code freeze), resolve its full SHA (git rev-parse <commit_sha>^{commit}). - Default (
origin/master): If no commit hash is specified, use the tip oforigin/master(git rev-parse origin/master).
- User-Specified Commit: If the user provides a specific commit hash
- Verify that the target commit is a valid ancestor of
origin/master, inspect its metadata, and check it out for pre-cut verification:git merge-base --is-ancestor <target_commit> origin/master git show -s --format="Commit: %H%nDate: %ci%nAuthor: %an <%ae>%nTitle: %s" <target_commit> git checkout --detach <target_commit>
Phase 2: Pre-Cut Vulnerability Gate (govulncheck)
Before cutting the minor release branch, verify that the target commit on master has 0 known security vulnerabilities.
2.1 Ensure govulncheck Is Available
if ! command -v govulncheck &> /dev/null; then
go install golang.org/x/vuln/cmd/govulncheck@latest || true
export PATH=$PATH:$(go env GOPATH)/bin
fi2.2 Binary Scan with Target Go Toolchain (.go-version)
Running govulncheck in source mode uses the host environment's default go binary, which can cause false-positive stdlib reports if the host Go version differs from .go-version. Always verify the compiled binary built with the branch's exact target Go toolchain:
- Read the target Go version from
[.go-version](../../../.go-version)and build a temporarygcsfusebinary in a temporary directory using that exact toolchain:TMP_DIR=$(mktemp -d) TARGET_GO=$(tr -d '[:space:]' < .go-version) GOTOOLCHAIN=go${TARGET_GO} go build -o "${TMP_DIR}/gcsfuse-release-vulncheck" . - Run
govulncheckin binary mode:govulncheck -mode=binary "${TMP_DIR}/gcsfuse-release-vulncheck" - Remove the temporary directory:
rm -rf "${TMP_DIR}"
2.3 Source / Module Dependency Scan
Also run govulncheck in module/source mode across the repository to check for any non-stdlib module advisories:
govulncheck ./...2.4 Gate Action: If Vulnerabilities Are Found, Fix master First
[!IMPORTANT] Do NOT cut
v<major>.<minor>.0_releaseifgovulncheckreports any fixablestdlibor module vulnerabilities (Fixed in: vX.Y.Z). Because a new minor release branch is cut frommaster,masteritself must be remediated first.
If vulnerabilities are detected:
- Stop the release branch creation workflow. Do not create or push
v<major>.<minor>.0_release. - Create a remediation branch from
origin/master(e.g.,git checkout -b fix-cve-master origin/master). - Follow the GCSFuse Dependency Upgrading Skill to upgrade the affected Go modules and/or Go toolchain across the repository (remembering to ask the user for confirmation before upgrading the Go compiler version or performing a major module version upgrade).
- Re-verify that both
govulncheck -mode=binary(built with the updated.go-versiontoolchain) andgovulncheck ./...report0vulnerabilities, and verify compilation and unit tests pass. - Push the remediation branch and raise a Pull Request targeting
masterfollowing the GCSFuse Pull Request Creation Skill (including theexecute-integration-testsandexecute-perf-testlabels). - Report the PR link to the user and stop; the minor release branch should be cut after the
masterremediation PR is merged.
Phase 3: Pre-Cut Build & Unit Test Gate
Once govulncheck passes with 0 vulnerabilities, verify that the target commit compiles cleanly and passes all unit tests.
3.1 Run Build and Formatting Checks
Follow the GCSFuse Build and Style Verification Skill to verify compilation and code hygiene:
make build[!NOTE] In sandboxed or offline environments where
golangci-lintor network-dependentgo generatetools cannot run, verify compilation and module tidiness directly via:go mod tidy go build ./...
3.2 Run Unit Tests
Run the unit test suite across the repository:
CGO_ENABLED=0 go test ./...3.3 Gate Action: If Unit Tests Fail, Raise a PR to Fix master First
[!IMPORTANT] Do NOT cut
v<major>.<minor>.0_releaseif unit test failures are detected, unless the user has explicitly instructed to ignore or bypass specific test failures.
If one or more unit tests fail (and no user override was given):
- Stop the release branch creation workflow. Do not create or push
v<major>.<minor>.0_release. - Create a bug-fix branch from
origin/master(e.g.,git checkout -b fix-unit-tests-master origin/master). - Diagnose and fix the failing unit test(s) or underlying regression, and re-run
make buildand the unit tests until they pass cleanly. - Push the fix branch and raise a Pull Request targeting
masterfollowing the GCSFuse Pull Request Creation Skill. - Report the failing test details and PR link to the user and stop; the minor release branch should be cut once the fix PR is merged into
master.
Phase 4: Cut and Push the Minor Release Branch
Proceed to this phase only when both Phase 2 (govulncheck = 0 vulnerabilities) and Phase 3 (go test = 0 failures) pass cleanly:
- Verify Working Tree Hygiene:
Confirm that building and testing produced no untracked files or unstaged diffs:
git status --porcelain - Create the Minor Release Branch (
v<major>.<minor>.0_release): Create and check outv<major>.<minor>.0_releasepointing to<target_commit>:
Confirm thatgit checkout -b v<major>.<minor>.0_release <target_commit>HEADmatches<target_commit>exactly:git rev-parse HEAD - Push
v<major>.<minor>.0_releasetoorigin: Push the new minor release branch tooriginand verify the remote ref:git push -u origin v<major>.<minor>.0_release git ls-remote --heads origin v<major>.<minor>.0_release
Verification Checklist
Before completing the task, verify the following:
- Latest tags and
origin/v*.*.*_releasebranches were fetched and inspected to determinev<major>.<minor>.0_releasewith no naming collisions. - Target commit
<target_commit>was verified as a valid commit onorigin/master. govulncheck -mode=binary(built with the branch's.go-versionGo toolchain) andgovulncheck ./...were executed:- If vulnerabilities were found:
v<major>.<minor>.0_releasewas not created, and a PR fixingmasterwas raised instead.
- If vulnerabilities were found:
- Build (
make buildorgo build ./...) and unit tests (go test) were executed:- If unit tests failed (without user override):
v<major>.<minor>.0_releasewas not created, and a PR fixingmasterwas raised instead.
- If unit tests failed (without user override):
- Only if
0vulnerabilities and0unit test failures were found:v<major>.<minor>.0_releasewas created from<target_commit>and pushed toorigin(unless the user explicitly requested local-only).
Trending
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Who's talking about GoogleCloudPlatform/gcsfuse
- A Hacker News story“Gcsfuse: A user-space file system for interacting with Google Cloud Storage”Hacker News · Sep 6, 2023 · 152 points
- GoogleCloudPlatform/gcs-fuse-csi-driver“Built-in health check for GCS-FUSE-CSI-DRIVER”GitHub · May 15, 2024 · 5 reactions
- ondrajz/go-callvis“Got error running go-callvis on github.com/googlecloudplatform/gcsfuse”GitHub · Nov 21, 2023 · 3 reactions
- jacobsa/fuse“Operations frequently canceled when accessing a `gcsfuse` mount with a Go application”GitHub · May 26, 2022 · 3 reactions
- ofek/csi-gcs“Support max-retry-sleep gcsfuse flag”GitHub · Feb 23, 2021 · 3 reactions
The biggest 5 of 69 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 69
Talked about on GitHub, Stack Overflow, Hacker News and Bluesky (69 times).
On GitHub · 49
- May 15, 2024Built-in health check for GCS-FUSE-CSI-DRIVER — GoogleCloudPlatform/gcs-fuse-csi-driver5 reactions · 1 comment
- Nov 21, 2023Got error running go-callvis on github.com/googlecloudplatform/gcsfuse — ondrajz/go-callvis3 reactions · 8 comments
- May 26, 2022Operations frequently canceled when accessing a `gcsfuse` mount with a Go application — jacobsa/fuse3 reactions · 2 comments
- Feb 23, 2021Support max-retry-sleep gcsfuse flag — ofek/csi-gcs3 reactions · 4 comments
- Oct 20, 2026Bump GCSFuse binary to 3.8.5 — GoogleCloudPlatform/gcs-fuse-csi-driver1 reaction · 2 comments
44 more on GitHub
- Oct 14, 2026Bump GCSFuse binary to 3.8.4 — GoogleCloudPlatform/gcs-fuse-csi-driver1 reaction · 2 comments
- Sep 17, 2026Enable gRPC by default via --enable-grpc-by-default and sidecar passthrough — GoogleCloudPlatform/gcs-fuse-csi-driver1 reaction · 4 comments
- Aug 11, 2026Bump gcsfuse to v2.5.4-gke.4 to FIX CVEs — GoogleCloudPlatform/gcs-fuse-csi-driver1 reaction · 2 comments
- May 20, 2026update GCSFuse binary to 3.8.2 — GoogleCloudPlatform/gcs-fuse-csi-driver1 reaction · 2 comments
- Apr 27, 2026Add GCSFUSE_PR_NUMBER to support testing against a specific gcsfuse PR — GoogleCloudPlatform/gcs-fuse-csi-driversays it tested it1 reaction · 5 comments
- Sep 4, 2022Directories missing in GCS file_mounts — skypilot-org/skypilot1 reaction · 6 comments
- Feb 22, 2021Switch to specific gcsfuse tag — ofek/csi-gcs1 reaction · 4 comments
- Feb 21, 2019GCS connector sends a high volume of ListObjects requests, triggering GCS 429 throttling error — GoogleCloudDataproc/hadoop-connectors1 reaction · 13 comments
- Jul 9, 2018Mount GCE VM filesytems to GCS buckets — cloudyr/googleComputeEngineR1 reaction · 8 comments
- Feb 24, 2017Build fails when cross compiling for armv7 — kahing/goofys1 reaction · 2 comments
- Oct 21, 2026chore(deps): update dependency googlecloudplatform/gcsfuse to v3.13.0 — BLSQ/openhexa-docker-images0 reactions
- Oct 15, 2026Zip dumps and exports fail on gcsfuse — enonic/xp0 reactions
- Oct 2, 2026Link Checker Report — rsamborski/google-skills0 reactions
- Sep 11, 2026gcsfuse: 3.11.3 -> 3.11.4 — NixOS/nixpkgs0 reactions
- Sep 2, 2026gcsfuse-mac 3.8.4 — gromgit/homebrew-fuse0 reactions
- Aug 27, 2026gcsfuse: 3.11.2 -> 3.11.3 — NixOS/nixpkgs0 reactions
- Jul 24, 2026gcsfuse: 3.11.0 -> 3.11.2 — NixOS/nixpkgs0 reactions
- Jul 24, 2026gcsfuse-mac 3.11.2 — gromgit/homebrew-fuse0 reactions
- Jul 24, 2026gcsfuse 3.11.2 — Homebrew/homebrew-core0 reactions · 1 comment
- Jul 15, 2026gcsfuse: 3.10.0 -> 3.11.0 — NixOS/nixpkgs0 reactions
- Jun 4, 2026[BUG] Task tools always fail with EPERM (utimensat on lockfile) when CLAUDE_CONFIG_DIR is on Cloud Storage FUSE (Cloud Run + Agent SDK) — anthropics/claude-code0 reactions · 2 comments
- May 27, 2026Bareos support for streaming writes using gcsfuse — bareos/bareos0 reactions · 2 comments
- May 27, 2026gcsfuse-mac 3.5.9 — gromgit/homebrew-fuse0 reactions
- May 21, 2026gcsfuse: 3.9.0 -> 3.10.0 — NixOS/nixpkgs0 reactions · 1 comment
- Apr 30, 2026gcsfuse-mac 3.8.2 — gromgit/homebrew-fuse0 reactions
- Apr 28, 2026gcsfuse-mac 3.8.1 — gromgit/homebrew-fuse0 reactions
- Apr 24, 2026gcsfuse: 3.8.0 -> 3.9.0 — NixOS/nixpkgs0 reactions
- Apr 22, 2026gcsfuse 3.9.0 — Homebrew/homebrew-core0 reactions · 1 comment
- Apr 22, 2026gcsfuse-mac 3.9.0 — gromgit/homebrew-fuse0 reactions
- Mar 19, 2026gcsfuse 3.8.0 — Homebrew/homebrew-core0 reactions · 1 comment
- Mar 19, 2026gcsfuse-mac 3.8.0 — gromgit/homebrew-fuse0 reactions
- Mar 13, 2026gcsfuse-mac 3.7.3 — gromgit/homebrew-fuse0 reactions
- Mar 13, 2026gcsfuse 3.7.3 — Homebrew/homebrew-core0 reactions · 1 comment
- Feb 3, 2026gcsfuse: 3.6.0 -> 3.8.0 — NixOS/nixpkgs0 reactions · 3 comments
- May 21, 2025Broken/Error Links (Batch 20/188) - 21/05/2025 08:32:13 — hmiesen/website0 reactions
- Mar 17, 2025[Storage] Unmount failed on kubernetes — skypilot-org/skypilot0 reactions
- Dec 3, 2024Call os.fsync on flush. — lanpa/tensorboardX0 reactions · 1 comment
- Jul 7, 2024[Feature]: Allow `privileged` mode for docker on GCP — dstackai/dstack0 reactions · 4 comments
- Apr 4, 2024gcsfuse v2.0 — DataBiosphere/dsub0 reactions · 1 comment
- May 23, 2023Retracting go module is not working — arungudelli/Retract-Go-Module-Versions0 reactions
- Dec 31, 2021I have been playing with gcsfuse for today I haven't been able to get it to run on my mac. I have installed view brew and followed the instructions and get the following: — lucyt245/HTML-refresh0 reactions · 1 comment
- Aug 7, 2020Running GCSFuse in gcloud DOCKER container — kfrajer/kfrajer.github.src0 reactions
- Aug 10, 2018google drive fuse — mahmoudimus/remote-box0 reactions
- Nov 16, 2016Add rate limiting feature — ovh/svfs0 reactions · 1 comment
On Stack Overflow · 16
- Jul 17, 2018Mount Bucket on Google Storage3 votes
- Mar 27, 2019Is there a way to grep through text documents stored in Google Cloud Storage?2 votes
- Feb 27, 2023Getting 500 while Download the Google Cloud public signing key:1 vote · 1 answer
- Apr 14, 2022Can App Engine Flexible Environment connect to a persistent disk?1 vote
- Feb 12, 2022Unable to access Google buckets using spark-submit1 vote
11 more on Stack Overflow
- Jan 18, 2021gcsfuse terminating itself on GKE1 vote
- Jan 7, 2021Getting this Error message when i added GSCFuse and deployed my application in Kubernetes Any Suggestions what could be the issue1 vote
- Nov 22, 2019gcsfuse Input/Output error1 vote
- Feb 27, 2023Getting 500 while Download the Google Cloud public signing key:0 votes
- Jan 2, 2023error: chmod on config.lock failed: Operation not permitted0 votes
- Aug 9, 2022Mount Google Cloud Storage Bucket to Instance0 votes
- Jul 30, 2021GCSFuse installation in Docker in GCloud failing0 votes
- Jan 19, 2021gcsfuse terminating itself on GKE0 votes
- Apr 5, 2019mounting bucket with fstab not working NEWBIE0 votes · 1 answer
- Apr 21, 2017Share Google Cloud Storage Bucket across Projects0 votes
- Feb 6, 2020Cannot move files to a mounted gscfuse storage bucket (gcloud)-1 votes · 1 answer
On Hacker News · 2
- Sep 6, 2023Gcsfuse: A user-space file system for interacting with Google Cloud Storage152 points · 71 comments
- May 6, 2015Gcsfuse1 point
On Bluesky · 2
- Sep 10, 2023Google Cloud Storage(GCS)のバケットをLinux上でマウントするためのツール。FUSEを利用。Go実装。 — @matsuu.bsky.social1 likes and repost
- Apr 19, 2025this one: github.com/GoogleCloudP... ? — @handle.invalid0 likes and reposts · 1 reply
In this repository6 other files it gives its agents.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

