plugin_relx.mk 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. # Relx plugin.
  2. #
  3. # Sleeps when interacting with relx script are necessary after start and upgrade
  4. # as both of those interactions are not synchronized.
  5. RELX_CASES = rel bare-rel relup start-stop tar vsn
  6. RELX_TARGETS = $(addprefix relx-,$(RELX_CASES))
  7. .PHONY: relx $(RELX_TARGETS)
  8. ifeq ($(PLATFORM),msys2)
  9. RELX_REL_EXT = .cmd
  10. else
  11. RELX_REL_EXT =
  12. endif
  13. relx: $(RELX_TARGETS)
  14. relx-rel: build clean
  15. $i "Bootstrap a new release named $(APP)"
  16. $t mkdir $(APP)/
  17. $t cp ../erlang.mk $(APP)/
  18. $t $(MAKE) -C $(APP) -f erlang.mk bootstrap bootstrap-rel $v
  19. $i "Build the release"
  20. $t $(MAKE) -C $(APP) $v
  21. $i "Check that relx was downloaded"
  22. $t test -f $(APP)/.erlang.mk/relx
  23. $i "Check that the release was built"
  24. $t test -d $(APP)/_rel
  25. $t test -d $(APP)/_rel/$(APP)_release
  26. $t test -d $(APP)/_rel/$(APP)_release/bin
  27. $t test -d $(APP)/_rel/$(APP)_release/lib
  28. $t test -d $(APP)/_rel/$(APP)_release/releases
  29. $t test -d $(APP)/_rel/$(APP)_release/releases/1
  30. $i "Clean the application"
  31. $t $(MAKE) -C $(APP) clean $v
  32. $i "Check that the release still exists"
  33. $t test -d $(APP)/_rel
  34. $t test -d $(APP)/_rel/$(APP)_release
  35. $t test -d $(APP)/_rel/$(APP)_release/bin
  36. $t test -d $(APP)/_rel/$(APP)_release/lib
  37. $t test -d $(APP)/_rel/$(APP)_release/releases
  38. $t test -d $(APP)/_rel/$(APP)_release/releases/1
  39. $i "Distclean the application"
  40. $t $(MAKE) -C $(APP) distclean $v
  41. $i "Check that the output directory was removed entirely"
  42. $t test ! -d $(APP)/_rel/
  43. relx-bare-rel: build clean
  44. $i "Bootstrap a new release named $(APP)"
  45. $t mkdir $(APP)/
  46. $t cp ../erlang.mk $(APP)/
  47. $t $(MAKE) -C $(APP) -f erlang.mk bootstrap bootstrap-rel $v
  48. $i "Build the release"
  49. $t $(MAKE) -C $(APP) rel $v
  50. $i "Check that relx was downloaded"
  51. $t test -f $(APP)/.erlang.mk/relx
  52. $i "Check that the release was built"
  53. $t test -d $(APP)/_rel
  54. $t test -d $(APP)/_rel/$(APP)_release
  55. $t test -d $(APP)/_rel/$(APP)_release/bin
  56. $t test -d $(APP)/_rel/$(APP)_release/lib
  57. $t test -d $(APP)/_rel/$(APP)_release/releases
  58. $t test -d $(APP)/_rel/$(APP)_release/releases/1
  59. relx-relup: build clean
  60. $i "Bootstrap a new release named $(APP)"
  61. $t mkdir $(APP)/
  62. $t cp ../erlang.mk $(APP)/
  63. $t $(MAKE) -C $(APP) -f erlang.mk bootstrap bootstrap-rel $v
  64. $i "Set the initial application version"
  65. ifeq ($(LEGACY),1)
  66. $t sed -i.bak s/"{vsn, \"0.1.0\"}"/"{vsn, \"1\"}"/ $(APP)/src/$(APP).app.src
  67. else
  68. $t echo "PROJECT_VERSION = 1" >> $(APP)/Makefile
  69. endif
  70. $i "Generate a test module"
  71. $t printf "%s\n"\
  72. "-module(test)." \
  73. "-export([test/0])." \
  74. "test() -> old." > $(APP)/src/test.erl
  75. $i "Build the initial release as a tarball"
  76. $t $(MAKE) -C $(APP) $v
  77. $i "Update the test module"
  78. $t sed -i.bak s/"test() -> old."/"test() -> new."/ $(APP)/src/test.erl
  79. $i "Bump the application version"
  80. ifeq ($(LEGACY),1)
  81. $t sed -i.bak s/"{vsn, \"1\"}"/"{vsn, \"2\"}"/ $(APP)/src/$(APP).app.src
  82. else
  83. $t sed -i.bak s/"PROJECT_VERSION = 1"/"PROJECT_VERSION = 2"/ $(APP)/Makefile
  84. endif
  85. $i "Generate a .appup for the application"
  86. $t printf "%s\n" \
  87. "{\"2\","\
  88. " [{\"1\", [{load_module, test}]}],"\
  89. " [{\"1\", [{load_module, test}]}]"\
  90. "}." > $(APP)/ebin/$(APP).appup
  91. $i "Bump the release version"
  92. $t sed -i.bak s/"1"/"2"/ $(APP)/relx.config
  93. $i "Build a new release with a relup as a tarball"
  94. $t $(MAKE) -C $(APP) relup $v
  95. $i "Test that both releases are available"
  96. $t test -f $(APP)/_rel/$(APP)_release/$(APP)_release-1.tar.gz
  97. $t test -f $(APP)/_rel/$(APP)_release/$(APP)_release-2.tar.gz
  98. $i "Unpack initial release"
  99. $t mkdir $(APP)/tmp
  100. $t tar -xzf $(APP)/_rel/$(APP)_release/$(APP)_release-1.tar.gz -C $(APP)/tmp
  101. $i "Start initial release and confirm it runs the old code"
  102. ifeq ($(PLATFORM),msys2)
  103. $t $(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) install $v
  104. endif
  105. $t $(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) start $v
  106. $t sleep 1
  107. $t test `$(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) rpcterms test test` = old
  108. $i "Check that it's 1 available version"
  109. $t test `$(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) versions | wc -l` = "2"
  110. $i "Copy the relup tarball to the release directory"
  111. $t mkdir $(APP)/tmp/releases/2
  112. $t cp $(APP)/_rel/$(APP)_release/$(APP)_release-2.tar.gz $(APP)/tmp/releases/2/$(APP)_release.tar.gz
  113. $t test -f $(APP)/tmp/releases/2/$(APP)_release.tar.gz
  114. $i "Upgrade the release and confirm it runs the new code"
  115. $t $(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) upgrade "2"
  116. $t sleep 1
  117. $t test `$(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) rpcterms test test` = new
  118. $i "Check that it's 2 available versions"
  119. $t test `$(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) versions | wc -l` = "3"
  120. $i "Downgrade the release and confirm it runs the old code"
  121. $t $(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) downgrade "1"
  122. $t sleep 1
  123. $t test `$(APP)/tmp/bin/$(APP)_release$(RELX_REL_EXT) rpcterms test test` = old
  124. $i "Stop the release"
  125. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release$(RELX_REL_EXT) stop $v
  126. ifeq ($(PLATFORM),msys2)
  127. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release$(RELX_REL_EXT) uninstall $v
  128. endif
  129. relx-start-stop: build clean
  130. $i "Bootstrap a new release named $(APP)"
  131. $t mkdir $(APP)/
  132. $t cp ../erlang.mk $(APP)/
  133. $t $(MAKE) -C $(APP) -f erlang.mk bootstrap bootstrap-rel $v
  134. $i "Build the release"
  135. $t $(MAKE) -C $(APP) $v
  136. $i "Start the release"
  137. ifeq ($(PLATFORM),msys2)
  138. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd install $v
  139. endif
  140. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release$(RELX_REL_EXT) start $v
  141. $t sleep 1
  142. $i "Ping the release"
  143. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release$(RELX_REL_EXT) ping $v
  144. $i "Stop the release"
  145. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release$(RELX_REL_EXT) stop $v
  146. ifeq ($(PLATFORM),msys2)
  147. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd uninstall $v
  148. endif
  149. $i "Check that further pings get no replies"
  150. $t ! $(APP)/_rel/$(APP)_release/bin/$(APP)_release$(RELX_REL_EXT) ping $v
  151. relx-tar: build clean
  152. $i "Bootstrap a new release named $(APP)"
  153. $t mkdir $(APP)/
  154. $t cp ../erlang.mk $(APP)/
  155. $t $(MAKE) -C $(APP) -f erlang.mk bootstrap bootstrap-rel $v
  156. $i "Build the release without a tarball"
  157. $t $(MAKE) -C $(APP) RELX_TAR=0 $v
  158. $i "Check that tarball doesn't exist"
  159. $t test ! -e $(APP)/_rel/$(APP)_release/$(APP)_release-1.tar.gz
  160. $i "Build the release as a tarball"
  161. $t $(MAKE) -C $(APP) $v
  162. $i "Check that tarball exists"
  163. $t test -f $(APP)/_rel/$(APP)_release/$(APP)_release-1.tar.gz
  164. relx-vsn: build clean
  165. $i "Bootstrap a new release named $(APP)"
  166. $t mkdir $(APP)/
  167. $t cp ../erlang.mk $(APP)/
  168. $t $(MAKE) -C $(APP) -f erlang.mk bootstrap bootstrap-rel $v
  169. $i "Replace the vsn"
  170. $t sed -i.bak s/"\"1\""/"{cmd, \"echo -n 2\"}"/ $(APP)/relx.config
  171. $i "Build the release"
  172. $t $(MAKE) -C $(APP) $v
  173. $i "Check that the correct release exists"
  174. $t ! test -d $(APP)/_rel/$(APP)_release/releases/1
  175. $t test -d $(APP)/_rel/$(APP)_release/releases/2