release.sh 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/bash
  2. set -e
  3. usage() {
  4. echo "release.sh start [-l LIVE_ARCHS] [-f LIVE_VARIANTS] [-a ROOTFS_ARCHS]"
  5. echo " [-p PLATFORMS] [-i SBC_IMGS] [-d DATE] [-r REPOSITORY] -- [gh args...]"
  6. echo "release.sh dl [gh args...]"
  7. echo "release.sh sign DATE SHASUMFILE"
  8. exit 1
  9. }
  10. check_programs() {
  11. for prog; do
  12. if ! type $prog &>/dev/null; then
  13. echo "missing program: $prog"
  14. exit 1
  15. fi
  16. done
  17. }
  18. start_build() {
  19. check_programs gh
  20. ARGS=()
  21. while getopts "a:d:f:i:l:p:r:" opt; do
  22. case $opt in
  23. a) ARGS+=(-f rootfs="$OPTARG") ;;
  24. d) ARGS+=(-f datecode="$OPTARG") ;;
  25. f) ARGS+=(-f live_flavors="$OPTARG") ;;
  26. i) ARGS+=(-f sbc_imgs="$OPTARG") ;;
  27. l) ARGS+=(-f live_archs="$OPTARG") ;;
  28. p) ARGS+=(-f platformfs="$OPTARG") ;;
  29. r) ARGS+=(-f mirror="$OPTARG") ;;
  30. ?) usage;;
  31. esac
  32. done
  33. shift $((OPTIND - 1))
  34. gh workflow run gen-images.yml "${ARGS[@]}" "$@"
  35. }
  36. # this assumes that the latest successful build is the one to download
  37. # wish it could be better but alas:
  38. # https://github.com/cli/cli/issues/4001
  39. download_build() {
  40. check_programs gh
  41. run="$(gh run list -s success -w gen-images.yml --json databaseId -q '.[].databaseId' "$@" | sort -r | head -1)"
  42. echo "Downloading artifacts from run ${run} [this may take a while] ..."
  43. gh run download "$run" -p 'void-live*' "$@"
  44. echo "Done."
  45. }
  46. sign_build() {
  47. check_programs pwgen minisign
  48. DATECODE="$1"
  49. SUMFILE="$2"
  50. mkdir -p release
  51. echo "Creating key..."
  52. pwgen -cny 25 1 > "release/void-release-$DATECODE.key"
  53. minisign -G -p "release/void-release-$DATECODE.pub" \
  54. -s "release/void-release-$DATECODE.sec" \
  55. -c "This key is only valid for images with date $DATECODE." \
  56. < <(cat "release/void-release-$DATECODE.key" "release/void-release-$DATECODE.key")
  57. echo "Signing $SUMFILE..."
  58. minisign -S -x "${SUMFILE//txt/sig}" -s "release/void-release-$DATECODE.sec" \
  59. -c "This key is only valid for images with date $DATECODE." \
  60. -t "This key is only valid for images with date $DATECODE." \
  61. -m "$SUMFILE" < "release/void-release-$DATECODE.key"
  62. }
  63. case "$1" in
  64. st*) shift; start_build "$@" ;;
  65. d*) shift; download_build "$@" ;;
  66. si*) shift; sign_build "$@" ;;
  67. *) usage ;;
  68. esac