plugin_relx.mk 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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 run rel-tar distclean-relx distclean-relx-rel relup
  6. RELX_TARGETS = $(addprefix relx-,$(RELX_CASES))
  7. RELX_CLEAN_TARGETS = $(addprefix clean-,$(RELX_TARGETS))
  8. APP = $(subst -,_,$@)
  9. APP_TO_CLEAN = $(subst -,_,$(patsubst clean-%,%,$@))
  10. relx: $(RELX_TARGETS)
  11. clean-relx: $(RELX_CLEAN_TARGETS)
  12. $(RELX_CLEAN_TARGETS):
  13. $t rm -rf $(APP_TO_CLEAN)/
  14. define bootstrap_helper
  15. $i "Bootstrap a new relx release named $(1)"
  16. $t mkdir $(1)/
  17. $t cp ../erlang.mk $(1)/
  18. $t $(MAKE) -C $(1) -f erlang.mk bootstrap bootstrap-rel $v
  19. endef
  20. relx-rel: clean-relx-rel
  21. $(call bootstrap_helper,$(APP))
  22. $i "Build and create release via relx"
  23. $t $(MAKE) -C $(APP)
  24. $i "Test if relx got downloaded correctly"
  25. $t test -f $(APP)/relx
  26. $i "Check if release directories got generated as expected"
  27. $t test -d $(APP)/_rel
  28. $t test -d $(APP)/_rel/$(APP)_release
  29. $t test -d $(APP)/_rel/$(APP)_release/bin
  30. $t test -d $(APP)/_rel/$(APP)_release/lib
  31. $t test -d $(APP)/_rel/$(APP)_release/releases
  32. $t test -d $(APP)/_rel/$(APP)_release/releases/1
  33. $i "Clean application"
  34. $(MAKE) -C $(APP) clean
  35. $i "Check that _rel directory was not affected"
  36. $t test -d $(APP)/_rel
  37. $t test -d $(APP)/_rel/$(APP)_release
  38. $t test -d $(APP)/_rel/$(APP)_release/bin
  39. $t test -d $(APP)/_rel/$(APP)_release/lib
  40. $t test -d $(APP)/_rel/$(APP)_release/releases
  41. $t test -d $(APP)/_rel/$(APP)_release/releases/1
  42. relx-run: clean-relx-run
  43. $t $(call bootstrap_helper,$(APP))
  44. $i "Build and create release via relx"
  45. $t $(MAKE) -C $(APP)
  46. ifeq ($(PLATFORM),msys2)
  47. $i "Install and start release"
  48. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd install $v
  49. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd start $v
  50. $i "Sleeping for 1 second"
  51. $t sleep 1
  52. $i "Ping release"
  53. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd ping $v
  54. $i "Stop and uninstall release"
  55. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd stop $v
  56. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd uninstall $v
  57. $i "Ping release, expect failure"
  58. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd ping $v; test $$? -eq 1
  59. else
  60. $i "Start release"
  61. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release start $v
  62. $i "Sleeping for 1 second"
  63. $t sleep 1
  64. $i "Ping release"
  65. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release ping $v
  66. $i "Stop release"
  67. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release stop $v
  68. $i "Ping release, expect failure"
  69. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release ping $v; test $$? -eq 1
  70. endif
  71. relx-rel-tar: clean-relx-rel-tar
  72. $(call bootstrap_helper,$(APP))
  73. $i "Build and create release tarball via relx"
  74. $t $(MAKE) RELX_OPTS="release tar" -C $(APP)
  75. $i "Test if tar file got created"
  76. $t test -f $(APP)/_rel/$(APP)_release/$(APP)_release-1.tar.gz
  77. relx-distclean-relx: clean-relx-distclean-relx
  78. $(call bootstrap_helper,$(APP))
  79. $i "Build and create release via relx"
  80. $t $(MAKE) -C $(APP)
  81. $i "Test if relx got downloaded correctly"
  82. $t test -f $(APP)/relx
  83. $i "Run distclean-relx"
  84. $t $(MAKE) -C $(APP) distclean-relx
  85. $i "Test if relx got removed"
  86. $t test ! -f $(APP)/relx
  87. relx-distclean-relx-rel: clean-relx-distclean-relx-rel
  88. $(call bootstrap_helper,$(APP))
  89. $i "Build and create release via relx"
  90. $t $(MAKE) -C $(APP)
  91. $i "Test if _rel directory got created"
  92. $t test -d $(APP)/_rel/
  93. $i "Run distclean-relx-rel"
  94. $t $(MAKE) -C $(APP) distclean-relx-rel
  95. $i "Test if _rel directory got removed"
  96. $t test ! -d $(APP)/_rel/
  97. relx-relup: clean-relx-relup
  98. $(call bootstrap_helper,$(APP))
  99. $i "Set version of application"
  100. ifeq ($(LEGACY),1)
  101. $t sed -i s/"{vsn, \"0.1.0\"}"/"{vsn, \"1\"}"/ $(APP)/src/$(APP).app.src
  102. else
  103. $t echo "PROJECT_VERSION = 1" >> $(APP)/Makefile
  104. endif
  105. $i "Include sasl application"
  106. $t sed -i s/"\[$(APP)\]"/"\[$(APP),sasl\]"/ -i $(APP)/relx.config
  107. $i "Add test module"
  108. $t printf "%s\n"\
  109. "-module(test)." \
  110. "-export([test/0])." \
  111. "test() -> old." > $(APP)/src/test.erl
  112. $i "Build and create initial release via relx"
  113. $t $(MAKE) -C $(APP) RELX_OPTS="release tar"
  114. $i "Make changes to test module"
  115. $t sed -i s/"test() -> old."/"test() -> new."/ $(APP)/src/test.erl
  116. ifeq ($(LEGACY),1)
  117. $i "Change vsn tuple in .app.src"
  118. $t sed -i s/"{vsn, \"1\"}"/"{vsn, \"2\"}"/ $(APP)/src/$(APP).app.src
  119. else
  120. $i "Change PROJECT_VERSION in Makefile"
  121. $t sed -i s/"PROJECT_VERSION = 1"/"PROJECT_VERSION = 2"/ $(APP)/Makefile
  122. endif
  123. $i "Write .appup"
  124. $t printf "%s\n" \
  125. "{\"2\","\
  126. " [{\"1\", [{load_module, test}]}],"\
  127. " [{\"1\", [{load_module, test}]}]"\
  128. "}." > $(APP)/ebin/$(APP).appup
  129. $i "Bump release version"
  130. $t sed -i s/"1"/"2"/ $(APP)/relx.config
  131. $i "Build updated app, release and relup"
  132. $t $(MAKE) -C $(APP) RELX_OPTS="release relup tar"
  133. $i "Test that both releases are available"
  134. $t test -f $(APP)/_rel/$(APP)_release/$(APP)_release-1.tar.gz
  135. $t test -f $(APP)/_rel/$(APP)_release/$(APP)_release-2.tar.gz
  136. $i "Unpack release '1' to tmp dir"
  137. $t mkdir $(APP)/tmp
  138. $t tar -xzf $(APP)/_rel/$(APP)_release/$(APP)_release-1.tar.gz -C $(APP)/tmp
  139. $i "Start release '1' and query test:test()"
  140. ifeq ($(PLATFORM),msys2)
  141. $t $(APP)/tmp/bin/$(APP)_release.cmd install $v
  142. $t $(APP)/tmp/bin/$(APP)_release.cmd start $v
  143. $i "Sleeping for 1 second"
  144. $t sleep 1
  145. $t test `$(APP)/tmp/bin/$(APP)_release.cmd rpcterms test test` = old
  146. else
  147. $t $(APP)/tmp/bin/$(APP)_release start $v
  148. $i "Sleeping for 1 second"
  149. $t sleep 1
  150. $t test `$(APP)/tmp/bin/$(APP)_release rpcterms test test` = old
  151. endif
  152. $i "Move relup to release directory and upgrade"
  153. $t mkdir $(APP)/tmp/releases/2
  154. $t mv $(APP)/_rel/$(APP)_release/$(APP)_release-2.tar.gz $(APP)/tmp/releases/2/$(APP)_release.tar.gz
  155. ifeq ($(PLATFORM),msys2)
  156. $i "Upgrade running release"
  157. $t $(APP)/tmp/bin/$(APP)_release.cmd upgrade "2/$(APP)_release" $v
  158. $i "Sleeping for 1 second"
  159. $t sleep 1
  160. $i "Query updated test:test()"
  161. $t test `$(APP)/tmp/bin/$(APP)_release.cmd rpcterms test test` = new
  162. $i "Stop and uninstall release"
  163. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd stop $v
  164. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release.cmd uninstall $v
  165. else
  166. $i "Upgrade running release"
  167. $t $(APP)/tmp/bin/$(APP)_release upgrade "2/$(APP)_release" $v
  168. $i "Sleeping for 1 second"
  169. $t sleep 1
  170. $i "Query updated test:test()"
  171. $t test `$(APP)/tmp/bin/$(APP)_release rpcterms test test` = new
  172. $i "Stop release"
  173. $t $(APP)/_rel/$(APP)_release/bin/$(APP)_release stop $v
  174. endif