archive-tags (1482B)
- #!/bin/sh
- workdir=$(git rev-parse --show-toplevel)
- name=$(basename ${workdir})
- reldir="${HOME}/Sources/tarballs/${name}/"
- get_minisign_pass() {
- # `pass show` is broken…
- # pass show minisign
- # gpg --decrypt ~/.password-store/minisign.gpg 2>/dev/null
- hiq -d -Fpassword host=minisign password!
- }
- get_tag_contents() {
- git tag -v \
- --format=$'%(contents:subject)%(if)%(contents:body)%(then)\n\n%(contents:body)%(end)' \
- "$@"
- }
- mkdir -p "${reldir}"
- minisign-rotate
- for tag in $(git tag -l | egrep '^v?[0-9]+\.'); do
- version="${tag##v}"
- file_base="${reldir}/${name}-$(echo "${version}" | tr '/' '_')"
- file="${file_base}.tar.gz"
- if test ! -s "${file_base}.txt"
- then
- get_tag_contents "${tag}" > "${file_base}.txt"
- fi
- if test ! -f "${file}" && test ! -f "${file}.sign"; then
- year=$(git tag -v --format='%(taggerdate:format:%Y)' "$tag")
- date_time=$(git tag -v --format='%(taggerdate:iso)' "$tag")
- test -f "${file}" || git archive \
- --format tar.gz \
- --prefix "${name}-${version}/" \
- -o "${file}" \
- -- \
- "${tag}"
- touch -d "${date_time}" "${file}"
- #test -f "${file}.sig" || gpg --detach-sign "${file}"
- test -f "${file}.sign" || get_minisign_pass | signify -S -x "${file}.sign" -s "${HOME}/.minisign/${year}.sec" -m "${file}"
- touch -d "${date_time}" "${file}.sign"
- set -- "${file}" "${file}.sign"
- # Changelog/notes
- test -s "${file_base}.txt" && set -- "$@" "${file_base}.txt"
- publish-release --subdir="${name}" "$@"
- fi
- done