snap-channel-manager 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #!/bin/bash
  2. # Snap Channel Manager for Wekan
  3. # Manages snap channels for Wekan-related packages
  4. # Source settings
  5. source $SNAP/bin/wekan-read-settings
  6. # Wekan-related snap packages
  7. WEKAN_SNAPS=("wekan" "wekan-gantt-gpl" "wekan-ondra")
  8. # Get current channel for a snap
  9. get_current_channel() {
  10. local snap_name="$1"
  11. snap list "$snap_name" 2>/dev/null | awk 'NR==2 {print $4}' || echo "not-installed"
  12. }
  13. # Check if snap is on stable channel
  14. is_stable_channel() {
  15. local snap_name="$1"
  16. local channel=$(get_current_channel "$snap_name")
  17. [ "$channel" = "stable" ]
  18. }
  19. # Switch snap to stable channel
  20. switch_to_stable() {
  21. local snap_name="$1"
  22. local current_channel=$(get_current_channel "$snap_name")
  23. if [ "$current_channel" = "not-installed" ]; then
  24. echo "Snap $snap_name is not installed"
  25. return 1
  26. fi
  27. if [ "$current_channel" = "stable" ]; then
  28. echo "Snap $snap_name is already on stable channel"
  29. return 0
  30. fi
  31. echo "Switching $snap_name from $current_channel to stable channel..."
  32. if snap refresh "$snap_name" --channel=stable; then
  33. echo "Successfully switched $snap_name to stable channel"
  34. return 0
  35. else
  36. echo "Failed to switch $snap_name to stable channel"
  37. return 1
  38. fi
  39. }
  40. # Show status of all Wekan snaps
  41. show_status() {
  42. echo "=== Wekan Snap Channel Status ==="
  43. echo ""
  44. local all_stable=true
  45. for snap_name in "${WEKAN_SNAPS[@]}"; do
  46. local channel=$(get_current_channel "$snap_name")
  47. local status=""
  48. if [ "$channel" = "not-installed" ]; then
  49. status="[NOT INSTALLED]"
  50. elif [ "$channel" = "stable" ]; then
  51. status="[STABLE]"
  52. else
  53. status="[NON-STABLE: $channel]"
  54. all_stable=false
  55. fi
  56. printf "%-20s %s\n" "$snap_name:" "$status"
  57. done
  58. echo ""
  59. if [ "$all_stable" = true ]; then
  60. echo "All Wekan snaps are on stable channel ✓"
  61. else
  62. echo "Some Wekan snaps are not on stable channel ⚠"
  63. fi
  64. }
  65. # Switch all Wekan snaps to stable
  66. switch_all_to_stable() {
  67. echo "=== Switching All Wekan Snaps to Stable Channel ==="
  68. echo ""
  69. local success_count=0
  70. local total_count=0
  71. for snap_name in "${WEKAN_SNAPS[@]}"; do
  72. if [ "$(get_current_channel "$snap_name")" != "not-installed" ]; then
  73. total_count=$((total_count + 1))
  74. if switch_to_stable "$snap_name"; then
  75. success_count=$((success_count + 1))
  76. fi
  77. echo ""
  78. fi
  79. done
  80. echo "=== Summary ==="
  81. echo "Successfully switched: $success_count/$total_count snaps"
  82. if [ "$success_count" -eq "$total_count" ]; then
  83. echo "All Wekan snaps are now on stable channel ✓"
  84. return 0
  85. else
  86. echo "Some snaps failed to switch to stable channel ⚠"
  87. return 1
  88. fi
  89. }
  90. # Show help
  91. show_help() {
  92. echo "Wekan Snap Channel Manager"
  93. echo ""
  94. echo "Usage: $0 [command]"
  95. echo ""
  96. echo "Commands:"
  97. echo " status - Show current channel status for all Wekan snaps"
  98. echo " switch - Switch all Wekan snaps to stable channel"
  99. echo " help - Show this help"
  100. echo ""
  101. echo "Wekan-related snaps: ${WEKAN_SNAPS[*]}"
  102. }
  103. # Main execution
  104. case "${1:-status}" in
  105. "status")
  106. show_status
  107. ;;
  108. "switch")
  109. switch_all_to_stable
  110. ;;
  111. "help"|"-h"|"--help")
  112. show_help
  113. ;;
  114. *)
  115. echo "Unknown command: $1"
  116. show_help
  117. exit 1
  118. ;;
  119. esac