mirror of
https://github.com/coreos/chunkah.git
synced 2026-11-03 21:49:44 -09:00
tools: add --commit flag to cut for targeting a specific commit
Allow specifying which commit to tag and archive when cutting a release, rather than always using HEAD. The commit ref flows through to both git tag and create-archives.sh's git archive call. When not specified, both default to HEAD as before. Assisted-by: OpenCode (Claude Opus 4.6)
This commit is contained in:
parent
d836781c61
commit
2e636e495b
2 changed files with 26 additions and 13 deletions
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/bash
|
||||
# Creates source and vendor tarballs for chunkah.
|
||||
# Used by both release.py and Packit's create-archive action.
|
||||
# Usage: create-archives.sh <source-tarball> <vendor-tarball>
|
||||
# Usage: create-archives.sh <source-tarball> <vendor-tarball> [commit]
|
||||
# create-archives.sh --outdir <outdir>
|
||||
set -euo pipefail
|
||||
shopt -s inherit_errexit
|
||||
|
|
@ -9,21 +9,23 @@ shopt -s inherit_errexit
|
|||
version=$(cargo metadata --no-deps --format-version=1 \
|
||||
| python3 -c 'import json,sys; print(json.load(sys.stdin)["packages"][0]["version"])')
|
||||
|
||||
commit="HEAD"
|
||||
if [[ "${1:-}" == "--outdir" ]]; then
|
||||
outdir="${2:-.}"
|
||||
source_tarball="${outdir}/chunkah-${version}.tar.gz"
|
||||
vendor_tarball="${outdir}/chunkah-${version}-vendor.tar.gz"
|
||||
elif [[ $# -ne 2 ]]; then
|
||||
echo "Usage: create-archives.sh <source-tarball> <vendor-tarball>" >&2
|
||||
elif [[ $# -lt 2 || $# -gt 3 ]]; then
|
||||
echo "Usage: create-archives.sh <source-tarball> <vendor-tarball> [commit]" >&2
|
||||
echo " create-archives.sh --outdir <outdir>" >&2
|
||||
exit 1
|
||||
else
|
||||
source_tarball="${1}"
|
||||
vendor_tarball="${2}"
|
||||
commit="${3:-${commit}}"
|
||||
fi
|
||||
|
||||
git archive --format=tar.gz "--prefix=chunkah-${version}/" \
|
||||
-o "${source_tarball}" HEAD
|
||||
-o "${source_tarball}" "${commit}"
|
||||
|
||||
cargo vendor-filterer --platform '*-unknown-linux-gnu' --tier 2 \
|
||||
--format=tar.gz --prefix=vendor "${vendor_tarball}"
|
||||
|
|
|
|||
|
|
@ -41,12 +41,15 @@ def main():
|
|||
cut_parser.add_argument(
|
||||
"--notes-file", default=None,
|
||||
help="Path to release notes file (skips fetching and editing)")
|
||||
cut_parser.add_argument(
|
||||
"--commit", default=None,
|
||||
help="Target commit to tag and archive (default: HEAD)")
|
||||
cut_parser.add_argument(
|
||||
"--no-push", action="store_true",
|
||||
help="Prepare release without pushing to remote")
|
||||
cut_parser.set_defaults(
|
||||
func=lambda args: cut_release(args.version, args.no_push,
|
||||
args.notes_file))
|
||||
args.notes_file, args.commit))
|
||||
|
||||
args = parser.parse_args()
|
||||
args.func(args)
|
||||
|
|
@ -188,7 +191,8 @@ def generate_notes(version: str):
|
|||
sys.stdout.write(notes)
|
||||
|
||||
|
||||
def cut_release(version: str, no_push: bool, notes_file: str | None):
|
||||
def cut_release(version: str, no_push: bool, notes_file: str | None,
|
||||
commit: str | None):
|
||||
"""Cut a release for chunkah."""
|
||||
tag = f"v{version}"
|
||||
source_tarball = f"{NAME}-{version}.tar.gz"
|
||||
|
|
@ -239,10 +243,10 @@ def cut_release(version: str, no_push: bool, notes_file: str | None):
|
|||
saved_notes_file.write_text(edited_notes)
|
||||
|
||||
step(f"Creating signed tag {tag}...")
|
||||
create_signed_tag(tag, edited_notes)
|
||||
create_signed_tag(tag, edited_notes, commit)
|
||||
|
||||
step("Generating source and vendor tarballs...")
|
||||
generate_archives(source_tarball, vendor_tarball)
|
||||
generate_archives(source_tarball, vendor_tarball, commit)
|
||||
|
||||
step("Verifying offline build...")
|
||||
verify_offline_build(version, source_tarball, vendor_tarball)
|
||||
|
|
@ -356,19 +360,26 @@ def edit_notes(initial: str) -> str:
|
|||
os.unlink(tmp_path)
|
||||
|
||||
|
||||
def create_signed_tag(tag: str, message: str):
|
||||
def create_signed_tag(tag: str, message: str, commit: str | None = None):
|
||||
"""Create a signed annotated git tag."""
|
||||
with tempfile.NamedTemporaryFile(mode="w", suffix=".md") as f:
|
||||
f.write(message)
|
||||
f.flush()
|
||||
# Use a non-# commentchar so that markdown headers are preserved
|
||||
run("git", "-c", "core.commentchar=;", "tag", "-s", "-a", tag,
|
||||
"-F", f.name)
|
||||
cmd = ["git", "-c", "core.commentchar=;", "tag", "-s", "-a", tag,
|
||||
"-F", f.name]
|
||||
if commit:
|
||||
cmd.append(commit)
|
||||
run(*cmd)
|
||||
|
||||
|
||||
def generate_archives(source_tarball: str, vendor_tarball: str):
|
||||
def generate_archives(source_tarball: str, vendor_tarball: str,
|
||||
commit: str | None = None):
|
||||
"""Generate source and vendor tarballs using create-archives.sh."""
|
||||
run("tools/create-archives.sh", source_tarball, vendor_tarball)
|
||||
args = ["tools/create-archives.sh", source_tarball, vendor_tarball]
|
||||
if commit:
|
||||
args.append(commit)
|
||||
run(*args)
|
||||
|
||||
|
||||
def verify_offline_build(version: str, source: str, vendor: str):
|
||||
|
|
|
|||
Loading…
Reference in a new issue