lighttpd1.4/packdist.sh
2024-12-23 15:10:16 +08:00

289 lines
7.4 KiB
Bash

#!/bin/bash
PACKAGE=lighttpd
BASEDOWNLOADURL="https://download.lighttpd.net/lighttpd/releases-1.4.x"
SNAPSHOTURL="https://download.lighttpd.net/lighttpd/snapshots-1.4.x"
if [[ "`id -un`" != "stbuehler" ]] && [[ -z "$AUTHOR" ]]; then
export AUTHOR="gstrauss"
export KEYID="AF16D0F0"
fi
AUTHOR="${AUTHOR:-stbuehler}"
# may take one argument for prereleases like
# ./packdist.sh rc1-r10
syntax() {
echo "./packdist.sh [--help] [~rc1]" >&2
exit 2
}
while [ $# -gt 0 ]; do
case "$1" in
"--help")
syntax
;;
"rc"*|"~rc"*)
if [ -n "$append" ]; then
echo "Only one append allowed" >&2
syntax
fi
echo "Appending '$1'"
append="$1"
BASEDOWNLOADURL="${SNAPSHOTURL}"
;;
*)
echo "Unknown option '$1'" >&2
syntax
;;
esac
shift
done
force() {
"$@" || {
echo "Command failed: $*"
exit 1
}
}
# summarize all changes since last release
genchanges() {
(
sed "/^- ${version}/,/^-/p;d" | sed "/^- /d;/^$/d" | sed -e 's/^ \*/\*/'
) < ${self}/NEWS > CHANGES
return 0
}
# generate links in old textile format "text":url
genlinks_changes() {
local repourl ticketurl inf out
#repourl="https://redmine.lighttpd.net/projects/lighttpd/repository/svn/revisions/"
ticketurl="https://redmine.lighttpd.net/issues/"
inf="$1"
outf="$1".links
(
sed -e 's%\(\[\|\]\)%\\\1%g' \
-e 's%\(.\)\*%\1\\*%g' \
-e 's% _% \\_%g' \
-e 's%\(https://[a-zA-Z0-9.:_/\-]\+\)%[\1](\1)%g' \
-e 's%#\([0-9]\+\)%[#\1]('"${ticketurl}"'\1)%g' \
-e 's%\(CVE-[0-9\-]\+\)%[\1](https://cve.mitre.org/cgi-bin/cvename.cgi?name=\1)%g'
#(svn-historical) sed -e 's%r\([0-9]\+\)%[r\1]('"${repourl}"'\1)%g' |
) < "$inf" > "$outf"
}
#genlinks_downloads() {
# local inf out
# inf="$1"
# outf="$1".links
# (
# sed -e 's%\(https://[a-zA-Z0-9.:_/\-]\+\)%[\1](\1)%g'
# ) < "$inf" > "$outf"
#}
www_l_n_post() {
if [ -z "${append}" ]; then
# release
cat <<EOF
---
title: ${version}
author: $AUTHOR
author_email: ${AUTHOR}@lighttpd.net
tags:
- ${version}
- lighttpd
- releases
---
{% excerpt -%}
## Important changes
TODO
## Downloads
EOF
cat DOWNLOADS.links
cat <<EOF
{%- endexcerpt %}
## Changes from ${prevversion}
EOF
cat CHANGES.links
else
# pre release
cat <<EOF
---
title: 'PRE-RELEASE: lighttpd ${version}${append}'
author: $AUTHOR
author_email: ${AUTHOR}@lighttpd.net
tags:
- ${version}
- lighttpd
- prerelease
---
{% excerpt -%}
We would like to draw your attention to the latest pre-release of the stable 1.4 branch of lighttpd.
You can get the pre-release from these urls:
EOF
cat DOWNLOADS.links
cat <<EOF
Please test it as much as possible and provide us with feedback.
A lot of testing ensures a good release.
<!-- TODO: describe major changes -->
{%- endexcerpt %}
#### Changes from ${prevversion}
EOF
cat CHANGES.links
cat <<EOF
If you want to get the latest source for any branch, you can get it from our git repository.
Documentation to do so can be obtained from this page: [InstallFromSource](https://redmine.lighttpd.net/projects/lighttpd/wiki/InstallFromSource)
Bug reports or feature requests can be filed in our ticket system: [New Issue](https://redmine.lighttpd.net/projects/lighttpd/issues/new)
Please make sure to check if there isn't a ticket already here: [Issues](https://redmine.lighttpd.net/projects/lighttpd/issues)
Perhaps you also want to have a look at our [download site](https://download.lighttpd.net/lighttpd/)
Thank you for flying light.
EOF
fi
}
self=$(dirname "$(readlink -f "$0")")
force cd "${self}"
if [ -d distbuild ]; then
# make distcheck may leave readonly files
chmod u+w -R distbuild
rm -rf distbuild
fi
force mkdir distbuild
version=$(grep "version: '1\\.4\\." ${self}/meson.build | cut -d"'" -f2)
name="${PACKAGE}-${version}${append}"
force git remote update
if [ -z "${KEYID}" ]; then
force git tag -s -m "${name}" "${name}"
else
force git tag -u "${KEYID}" -m "${name}" "${name}"
fi
force git archive --format tar -o "distbuild/${name}.tar" --prefix "${name}/" "${name}"
force cd distbuild
force gzip -n --keep "${name}.tar"
force xz --keep "${name}.tar"
force rm "${name}.tar"
force sha256sum "${name}.tar."{gz,xz} > "${name}.sha256sum"
force sha512sum "${name}.tar."{gz,xz} > "${name}.sha512sum"
force gpg ${KEYID:+-u "${KEYID}"} -a --output "${name}.tar.gz.asc" --detach-sig "${name}.tar.gz"
force gpg ${KEYID:+-u "${KEYID}"} -a --output "${name}.tar.xz.asc" --detach-sig "${name}.tar.xz"
(
echo "* ${BASEDOWNLOADURL}/${name}.tar.gz"
echo "** GPG signature: ${BASEDOWNLOADURL}/${name}.tar.gz.asc"
echo "** SHA256: @$(sha256sum ${name}.tar.gz | cut -d' ' -f1)@"
echo "* ${BASEDOWNLOADURL}/${name}.tar.xz"
echo "** GPG signature: ${BASEDOWNLOADURL}/${name}.tar.xz.asc"
echo "** SHA256: @$(sha256sum ${name}.tar.xz | cut -d' ' -f1)@"
echo "* SHA256 checksums: ${BASEDOWNLOADURL}/${name}.sha256sum"
echo "* SHA512 checksums: ${BASEDOWNLOADURL}/${name}.sha512sum"
) > DOWNLOADS
(
echo "* [${name}.tar.gz](${BASEDOWNLOADURL}/${name}.tar.gz) ([GPG signature](${BASEDOWNLOADURL}/${name}.tar.gz.asc))"
echo " * SHA256: \`$(sha256sum ${name}.tar.gz | cut -d' ' -f1)\`"
echo "* [${name}.tar.xz](${BASEDOWNLOADURL}/${name}.tar.xz) ([GPG signature](${BASEDOWNLOADURL}/${name}.tar.xz.asc))"
echo " * SHA256: \`$(sha256sum ${name}.tar.xz | cut -d' ' -f1)\`"
echo "* [SHA256 checksums](${BASEDOWNLOADURL}/${name}.sha256sum)"
echo "* [SHA512 checksums](${BASEDOWNLOADURL}/${name}.sha512sum)"
) > DOWNLOADS.links
force genchanges
force genlinks_changes CHANGES
#force genlinks_downloads DOWNLOADS
prevversion="${version%.*}.$((${version##*.} - 1))"
isodate=$(date +"%Y-%m-%d")
if [ -z "${append}" ]; then
# only for Releases
(
cat <<EOF
h1. Release Info
* Version: ${version}
* Previous version: [[Release-${prevversion//./_}|${prevversion}]]
* Branch: 1.4
* Status: stable
* Release Purpose: bug fixes
* Release manager: $AUTHOR
* Released date: ${isodate}
h1. Important changes from ${prevversion}
TODO
h1. Downloads
EOF
cat DOWNLOADS
cat <<EOF
h1. Changes from ${prevversion}
EOF
cat CHANGES
cat <<EOF
h1. External references
* https://www.lighttpd.net/$(date +"%Y/%-m/%-d")/${version}
EOF
) > "Release-${version//./_}.page"
cat "Release-${version//./_}.page"
fi
echo
echo -------
echo
www_l_n_post | tee ${isodate}-"${version}.md"
echo
echo -------
echo
escprevversion=$(printf "%s" "${prevversion}" | sed 's/\./[.]/g')
escversion=$(printf "%s" "${version}" | sed 's/\./[.]/g')
nextversion="${version%.*}.$((${version##*.} + 1))"
echo cd distbuild
echo scp "${name}.{tar*,sha*sum}" lighttpd.net:
echo ssh lighttpd.net \""cp ${name}.{tar*,sha*sum} download/lighttpd/releases-1.4.x/"\"
echo ssh lighttpd.net \""mv ${name}.{tar*,sha*sum} archive/"\"
# (not using 'sed -i' due to dir permissions)
echo ssh lighttpd.net \""sed -e 's/${escprevversion}/${version}/g' download/lighttpd/README.txt > README.txt.\\\$\\\$ && cat README.txt.\\\$\\\$ > download/lighttpd/README.txt && rm README.txt.\\\$\\\$"\"
echo ssh lighttpd.net \""echo lighttpd-${version} > download/lighttpd/releases-1.4.x/latest.txt"\"
echo
echo mkdir dl
echo cd dl
echo wget "${BASEDOWNLOADURL}/${name}".'{tar.gz,tar.xz,sha256sum,sha512sum}'
echo sha256sum -c "${name}".sha256sum
echo sha512sum -c "${name}".sha512sum
echo
echo cd "${self}"
echo sed -i -e "'s/${escversion}/${nextversion}/g'" CMakeLists.txt SConstruct configure.ac meson.build
echo git commit -m "'- next is ${nextversion}'" CMakeLists.txt SConstruct configure.ac meson.build
echo git push origin master
echo git push origin "${name}"