docs/hack/make
Tianon Gravi 929af4c38d Fix daemon start/stop logic in hack/make/* scripts
From the Bash manual's `set -e` description:
(https://www.gnu.org/software/bash/manual/bashref.html#index-set)

> Exit immediately if a pipeline (see Pipelines), which may consist of a
> single simple command (see Simple Commands), a list (see Lists), or a
> compound command (see Compound Commands) returns a non-zero status.
> The shell does not exit if the command that fails is part of the
> command list immediately following a while or until keyword, part of
> the test in an if statement, part of any command executed in a && or
> || list except the command following the final && or ||, any command
> in a pipeline but the last, or if the command’s return status is being
> inverted with !. If a compound command other than a subshell returns a
> non-zero status because a command failed while -e was being ignored,
> the shell does not exit.

Additionally, further down:

> If a compound command or shell function executes in a context where -e
> is being ignored, none of the commands executed within the compound
> command or function body will be affected by the -e setting, even if
> -e is set and a command returns a failure status. If a compound
> command or shell function sets -e while executing in a context where
> -e is ignored, that setting will not have any effect until the
> compound command or the command containing the function call
> completes.

Thus, the only way to have our `.integration-daemon-stop` script
actually run appropriately to clean up our daemon on test/script failure
is to use `trap ... EXIT`, which we traditionally avoid because it does
not have any stacking capabilities, but in this case is a reasonable
compromise because it's going to be the only script using it (for now,
at least; we can evaluate more complex solutions in the future if they
actually become necessary).

The alternatives were much less reasonable.  One is to have the entire
complex chains in any script wanting to use `.integration-daemon-start`
/ `.integration-daemon-stop` be chained together with `&&` in an `if`
block, which is untenable.  The other I could think of was taking the
body of these scripts out into separate scripts, essentially meaning
we'd need two files for each of these, which further complicates the
maintenance.

Add to that the fact that our `trap ... EXIT` is scoped to the enclosing
subshell (`( ... )`) and we're in even more reasonable territory with
this pattern.

Signed-off-by: Andrew "Tianon" Page <admwiggin@gmail.com>
2015-04-23 11:31:16 -06:00
..
.build-deb Add "builder-deb" base images for building ".deb" packages properly 2015-04-06 10:43:36 -06:00
.dockerinit hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
.dockerinit-gccgo Merge pull request #12376 from Mic92/refactor-hack 2015-04-22 12:12:44 -07:00
.ensure-emptyfs Move scripts back to hack/, leave docs in project/ 2015-03-13 14:04:08 -06:00
.ensure-frozen-images Enforce our use of the explicitly frozen images 2015-03-16 14:42:59 -06:00
.ensure-httpserver Move scripts back to hack/, leave docs in project/ 2015-03-13 14:04:08 -06:00
.go-autogen Move scripts back to hack/, leave docs in project/ 2015-03-13 14:04:08 -06:00
.go-compile-test-dir Move scripts back to hack/, leave docs in project/ 2015-03-13 14:04:08 -06:00
.integration-daemon-start Fix daemon start/stop logic in hack/make/* scripts 2015-04-23 11:31:16 -06:00
.integration-daemon-stop Fix daemon start/stop logic in hack/make/* scripts 2015-04-23 11:31:16 -06:00
.validate .: remove trailing white spaces 2015-03-25 13:38:17 -04:00
README.md Move scripts back to hack/, leave docs in project/ 2015-03-13 14:04:08 -06:00
binary hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
build-deb Fix daemon start/stop logic in hack/make/* scripts 2015-04-23 11:31:16 -06:00
cover Move scripts back to hack/, leave docs in project/ 2015-03-13 14:04:08 -06:00
cross hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
dynbinary hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
dyngccgo hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
gccgo Merge pull request #12376 from Mic92/refactor-hack 2015-04-22 12:12:44 -07:00
test-docker-py Fix daemon start/stop logic in hack/make/* scripts 2015-04-23 11:31:16 -06:00
test-integration hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
test-integration-cli Fix daemon start/stop logic in hack/make/* scripts 2015-04-23 11:31:16 -06:00
test-unit hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
tgz .: remove trailing white spaces 2015-03-25 13:38:17 -04:00
ubuntu hack: quote all parameters with variable interpolation 2015-04-15 10:14:14 +02:00
validate-dco hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
validate-gofmt hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
validate-toml hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00
validate-vet hack/make/test-integration-cli: introduce MAKEDIR variable 2015-04-15 10:44:14 +02:00

README.md

This directory holds scripts called by make.sh in the parent directory.

Each script is named after the bundle it creates. They should not be called directly - instead, pass it as argument to make.sh, for example:

./hack/make.sh test
./hack/make.sh binary ubuntu

# Or to run all bundles:
./hack/make.sh

To add a bundle:

  • Create a shell-compatible file here
  • Add it to $DEFAULT_BUNDLES in make.sh