mirror of
https://github.com/kennethreitz/bob-builder-1.git
synced 2026-06-05 23:10:17 +00:00
f8b002de475ad342108c34640c408aef02a49a72
When receiving a signal, a process must kill itself using the same signal
sys.exit()ing 0, 1, 130, whatever will not signal to the calling program that we terminated in response to the signal
Best example: `for f in a b c; do bob deploy $f; done`, hitting Ctrl+C should interrupt Bob and stop the bash loop, but does not with `sys.exit()`:
# for x in php-7.3.13 php-7.3.13 php-7.3.13; do bob build $x; done
Fetching dependencies... found 1:
- libraries/libc-client-2007f
Building formula php-7.3.13 in /tmp/bob-35s7cr5z:
-----> Building php-7.3.13...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 18.7M 100 18.7M 0 0 7435k 0 0:00:02 0:00:02 --:--:-- 7434k
^Cool.
Fetching dependencies... found 1:
- libraries/libc-client-2007f
Building formula php-7.3.13 in /tmp/bob-vmuko2ra:
-----> Building php-7.3.13...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
20 18.7M 20 3887k 0 0 7479k 0 0:00:02 --:--:-- 0:00:02 7476k^Cool.
Fetching dependencies... found 1:
- libraries/libc-client-2007f
Building formula php-7.3.13 in /tmp/bob-p2t8as81:
-----> Building php-7.3.13...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
4 18.7M 4 943k 0 0 3599k 0 0:00:05 --:--:-- 0:00:05 3588k^Cool.
We want instead to have the loop end upon the first Ctrl+C.
That's only possible if Bash knows that we exited in response to Ctrl+C (=SIGINT), then it'll also terminate the loop
Bash will report the exit status as 128+$signal, so 130 for SIGINT, but sys.exit(130) does not to the same thing - the value of 130 is simply bash's representation
Killing ourselves with the signal number that we are aborting in response to does all this correctly, and bash will see the right WIFSIGNALED() status of our program, not WIFEXITED()
Bob: The Binary Build Toolkit
This repo exists as a framework for the compilation and deployment of binaries and libraries on Heroku.
It is inspired by (and extracted from) kennethreitz/python-versions.
Intended Design
- Flexible type hierarchy
- Flat dependency resolution
- Version agnostic (careful curation and naming conventions preferred)
- Import already-deployed sub-dependencies during a build (optionally fetch from
UPSTREAM_S3_BUCKET)
Powered By
- Bash, mostly
- A litle bit of Python
- Boto
Getting Started (Staging)
$ heroku create build-toolkit-python-staging --buildpack https://github.com/kennethreitz/conda-buildpack.git$ heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=xxx S3_BUCKET=xxx
Now that your Heroku app for building is created, push a repo containing your formula to the app (e.g. the python buildpack repo).
$ heroku run bash
$ bob build runtimes/python-2.7.6
$ bob deploy runtimes/python-2.7.6
Description
Languages
Python
95.3%
Shell
4.7%