sign-repos 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env bash
  2. # This script signs the deliverables from release-deb and release-rpm
  3. # with a designated GPG key.
  4. : ${DOCKER_RELEASE_DIR:=$DEST}
  5. : ${GPG_KEYID:=releasedocker}
  6. APTDIR=$DOCKER_RELEASE_DIR/apt/repo
  7. YUMDIR=$DOCKER_RELEASE_DIR/yum/repo
  8. if [ -z "$GPG_PASSPHRASE" ]; then
  9. echo >&2 'you need to set GPG_PASSPHRASE in order to sign artifacts'
  10. exit 1
  11. fi
  12. if [ ! -d $APTDIR ] && [ ! -d $YUMDIR ]; then
  13. echo >&2 'release-rpm or release-deb must be run before sign-repos'
  14. exit 1
  15. fi
  16. sign_packages(){
  17. # sign apt repo metadata
  18. if [ -d $APTDIR ]; then
  19. # create file with public key
  20. gpg --armor --export "$GPG_KEYID" > "$DOCKER_RELEASE_DIR/apt/gpg"
  21. # sign the repo metadata
  22. for F in $(find $APTDIR -name Release); do
  23. if test "$F" -nt "$F.gpg" ; then
  24. gpg -u "$GPG_KEYID" --passphrase "$GPG_PASSPHRASE" \
  25. --digest-algo "sha512" \
  26. --armor --sign --detach-sign \
  27. --batch --yes \
  28. --output "$F.gpg" "$F"
  29. fi
  30. inRelease="$(dirname "$F")/InRelease"
  31. if test "$F" -nt "$inRelease" ; then
  32. gpg -u "$GPG_KEYID" --passphrase "$GPG_PASSPHRASE" \
  33. --digest-algo "sha512" \
  34. --clearsign \
  35. --batch --yes \
  36. --output "$inRelease" "$F"
  37. fi
  38. done
  39. fi
  40. # sign yum repo metadata
  41. if [ -d $YUMDIR ]; then
  42. # create file with public key
  43. gpg --armor --export "$GPG_KEYID" > "$DOCKER_RELEASE_DIR/yum/gpg"
  44. # sign the repo metadata
  45. for F in $(find $YUMDIR -name repomd.xml); do
  46. if test "$F" -nt "$F.asc" ; then
  47. gpg -u "$GPG_KEYID" --passphrase "$GPG_PASSPHRASE" \
  48. --digest-algo "sha512" \
  49. --armor --sign --detach-sign \
  50. --batch --yes \
  51. --output "$F.asc" "$F"
  52. fi
  53. done
  54. fi
  55. }
  56. sign_packages