release.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/bin/sh
  2. set -e
  3. if [ "$1" = '--testrel' ]; then
  4. # --testrel won't check changelog version correctness and will build in a temporary dir
  5. TESTREL=1
  6. else
  7. TESTREL=0
  8. fi
  9. VERSION=$(echo '#include "default_options.h"\n#include "sysoptions.h"\necho DROPBEAR_VERSION' | cpp -DHAVE_CRYPT - | sh)
  10. if [ $TESTREL -eq 1 ]; then
  11. echo Making test tarball for "$VERSION" ...
  12. echo Not checking version mismatches.
  13. WORKDIR=$(mktemp -d)
  14. TARSUFFIX="-testrel"
  15. else
  16. echo Releasing version "$VERSION" ...
  17. if ! head -n1 CHANGES | grep -q $VERSION ; then
  18. echo "CHANGES needs updating"
  19. exit 1
  20. fi
  21. if ! head -n1 debian/changelog | grep -q $VERSION ; then
  22. echo "debian/changelog needs updating"
  23. exit 1
  24. fi
  25. WORKDIR=$PWD/..
  26. TARSUFFIX=""
  27. fi
  28. RELDIR=$WORKDIR/dropbear-$VERSION
  29. ARCHIVE=${RELDIR}${TARSUFFIX}.tar.bz2
  30. head -n1 CHANGES
  31. if tar --version | grep -q 'GNU tar'; then
  32. TAR=tar
  33. else
  34. TAR=gtar
  35. fi
  36. if test -e $RELDIR; then
  37. echo "$RELDIR exists"
  38. exit 1
  39. fi
  40. if test -e $ARCHIVE; then
  41. echo "$ARCHIVE exists"
  42. exit 1
  43. fi
  44. if [ -d .hg ]; then
  45. hg archive "$RELDIR" || exit 2
  46. # .hg_archival.txt seems to differ between hg versions, isn't good for reproducibility
  47. rm "$RELDIR/.hg_archival.txt"
  48. elif [ -d .git ]; then
  49. git -c tar.umask=0022 archive --format tar -o /dev/stdout --prefix=dropbear-$VERSION/ HEAD | tar xf - -C $WORKDIR || exit 2
  50. else
  51. echo "This isn't a hg or git checkout"
  52. exit 1
  53. fi
  54. chmod -R a+rX $RELDIR
  55. RELDATE=$(head -n1 CHANGES | cut -d - -f 2)
  56. # timezone keeps it consistent, choose a plausible release time
  57. RELTIME="22:30:00 +0800"
  58. # from https://reproducible-builds.org/docs/archives/
  59. TAROPTS="--sort=name --owner=0 --group=0 --numeric-owner"
  60. (cd "$RELDIR/.." && $TAR cjf $ARCHIVE $TAROPTS --mtime="$RELDATE $RELTIME" `basename "$RELDIR"`) || exit 2
  61. ls -l $ARCHIVE
  62. openssl sha256 $ARCHIVE
  63. echo Done to
  64. echo "$ARCHIVE"
  65. if [ $TESTREL -eq 0 ]; then
  66. echo Sign it with
  67. echo gpg2 --detach-sign -a -u F29C6773 "$ARCHIVE"
  68. fi