release.sh 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 [run id] -- [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. local run
  41. check_programs gh
  42. if [ -n "$1" ] && [ "$1" != "--" ]; then
  43. run="$1"
  44. shift
  45. else
  46. run="$(gh run list -s success -w gen-images.yml --json databaseId -q '.[].databaseId' "$@" | sort -r | head -1)"
  47. fi
  48. if [ -n "$1" ] && [ "$1" != "--" ]; then
  49. usage
  50. elif [ "$1" == "--" ]; then
  51. shift
  52. fi
  53. echo "Downloading artifacts from run ${run} [this may take a while] ..."
  54. gh run download "$run" -p 'void-live*' "$@"
  55. echo "Done."
  56. }
  57. sign_build() {
  58. check_programs pwgen minisign
  59. DATECODE="$1"
  60. SUMFILE="$2"
  61. mkdir -p release
  62. echo "Creating key..."
  63. pwgen -cny 25 1 > "release/void-release-$DATECODE.key"
  64. minisign -G -p "release/void-release-$DATECODE.pub" \
  65. -s "release/void-release-$DATECODE.sec" \
  66. -c "This key is only valid for images with date $DATECODE." \
  67. < <(cat "release/void-release-$DATECODE.key" "release/void-release-$DATECODE.key")
  68. echo "Signing $SUMFILE..."
  69. minisign -S -x "${SUMFILE//txt/sig}" -s "release/void-release-$DATECODE.sec" \
  70. -c "This key is only valid for images with date $DATECODE." \
  71. -t "This key is only valid for images with date $DATECODE." \
  72. -m "$SUMFILE" < "release/void-release-$DATECODE.key"
  73. }
  74. case "$1" in
  75. st*) shift; start_build "$@" ;;
  76. d*) shift; download_build "$@" ;;
  77. si*) shift; sign_build "$@" ;;
  78. *) usage ;;
  79. esac