release.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 signify
  48. DATE="$1"
  49. SUMFILE="$2"
  50. mkdir -p release
  51. KEYFILE="release/void-release-$DATE.key"
  52. pwgen -cny 25 1 > "$KEYFILE"
  53. signify -G -p "${KEYFILE//key/pub}" -s "${KEYFILE//key/sec}" -c "This key is only valid for images with date $DATE."
  54. signify -S -e -s "${KEYFILE//key/sec}" -m "$SUMFILE" -x "${SUMFILE//txt/sig}"
  55. }
  56. case "$1" in
  57. st*) shift; start_build "$@" ;;
  58. d*) shift; download_build "$@" ;;
  59. si*) shift; sign_build "$@" ;;
  60. *) usage ;;
  61. esac