name: zb-release-pipeline description: Generate a GitHub Actions pipeline that builds a zb (Zero Dependencies Builder) project and publishes a GitHub Release with the produced JAR. Use whenever the user wants CI/CD, a build pipeline, a release workflow, or GitHub Actions for a zb-based Java project — phrases like "set up GitHub Actions for this zb project", "add a zb release pipeline", "create a build workflow", "automate the zb build/release", or when a project has a .zb config and needs continuous builds/releases. Trigger even if the user doesn't say "zb" explicitly, as long as the project is a zb project (a .zb file is present and there is no Maven/Gradle build).
zb GitHub Actions Pipeline
Generate .github/workflows/release.yml for a zb project. The pipeline checks out the
repo, installs Java, reads the project version, downloads the latest zb.jar, builds the
project, and creates a GitHub Release with the produced JAR attached and tagged
v<version>.<run_number>.
This skill produces a workflow equivalent to the reference below — only with the project-specific paths and names auto-detected, nothing hardcoded:
- name: Build
working-directory: <module>
run: java -jar ../zb.jar
- name: Create Release
run: gh release create "v${{ steps.version.outputs.version }}.${{ github.run_number }}" ...
Procedure
1. Locate the build directory
The build directory is where zb runs from — the directory that contains the project's
.zb config alongside the sources (src/main/java or src/).
- Glob for
.zbfiles in the repository. - If a repo has both a root
.zband a.zbin a module subdirectory, the build directory is the one that also containsversion.txtand the actualsrc/tree. A multi-module-style layout (e.g.zsmith/zsmith/) builds from the inner module. - Record
BUILD_DIRas the path relative to the repository root. If the build directory is the repo root,BUILD_DIRis..
2. Read the .zb config in the build directory
From the build directory's .zb, extract:
jar.file.name(e.g.zsmith.jar) → this is the artifact file name.jar.dir(e.g.zbo/) → defaults tozbo/if absent.
Derive:
ARTIFACT_NAME=jar.file.namewithout the.jarsuffix (used in the release title).ARTIFACT_PATH=<BUILD_DIR>/<jar.dir><jar.file.name>, normalized (no./prefix, collapse//). Example:zsmith/zbo/zsmith.jar.
3. Resolve the version file
The version step does cat <VERSION_FILE> at the repo root.
- Look for
version.txtin the build directory first, then the repo root. VERSION_FILE= that file's path relative to the repo root (e.g.zsmith/version.txtorversion.txt).- If no
version.txtexists anywhere, tell the user one is required for the release tag and offer to create one (single line, e.g.1.0.0) in the build directory. Do not invent a different versioning scheme.
4. Compute the zb.jar reference
zb.jar is downloaded to the repository root. The Build step runs with
working-directory: <BUILD_DIR>, so the java -jar argument is the relative path from
the build directory back up to the root:
BUILD_DIRis.(repo root) →ZB_JAR_REF=zb.jarBUILD_DIRis one level deep (e.g.zsmith) →ZB_JAR_REF=../zb.jarnlevels deep →nrepetitions of../thenzb.jar
5. Java version
Default to 25 (matches the zb / Java 21+ requirement and the reference workflow). If the
project's .zb or build config pins a different release/source level, use that instead.
If unsure, ask the user; do not silently downgrade.
6. Generate the workflow
Read assets/release.yml (the template) and substitute:
| Placeholder | Value |
|---|---|
__JAVA_VERSION__ |
resolved Java version (e.g. 25) |
__VERSION_FILE__ |
VERSION_FILE |
__BUILD_DIR__ |
BUILD_DIR |
__ZB_JAR_REF__ |
ZB_JAR_REF |
__ARTIFACT_PATH__ |
ARTIFACT_PATH |
__ARTIFACT_NAME__ |
ARTIFACT_NAME |
If BUILD_DIR is ., drop the working-directory: line entirely (a working-directory
of . is noise) rather than emitting working-directory: ..
Write the result to .github/workflows/release.yml in the repository root. Create
.github/workflows/ if it does not exist. If release.yml already exists, show the diff
and confirm before overwriting.
7. Report
Summarize for the user:
- Detected build directory, artifact path, version file, Java version.
- The trigger: every push to
mainand manualworkflow_dispatch. - The release tag scheme:
v<version>.<github.run_number>. - Reminder that the workflow needs no extra secrets — it uses the built-in
GITHUB_TOKEN, andpermissions: contents: write(already in the template) is what lets it create releases.
Notes
- Keep the workflow minimal. Do not add caching, matrices, or test steps unless the user asks — zb projects are zero-dependency and build in seconds, so the overhead is not worth it. Tests, if any, run via the zb post-build hook already.
- The pipeline always builds from the latest
zb.jarrelease on purpose, so projects track zb improvements without manual bumps. Do not pin a zb version unless asked. - This skill only generates the workflow; it does not run the build locally. To verify a
zb build locally, use the
zbskill.