Repo for storing all the resources for the Stack.
Contents:
/ethereum- smart contracts, etc/stack- AWS CloudFormation stack resources
Note: only linux supported atm
- Ubuntu deps:
sudo apt install python3 python3-pip zip git build-essential - Recommended: Install pyenv and pyenv-virtualenv
The recommended things are for tests, etc, used automatically via ./manage
./setup/pyenv.sh-- ensures python and venv are set up- DEPRECATED:
pyenv install-- installs python matching.python-versionif it isn't installed. (If there's any trouble with the .python-version in the repo, runpyenv install 3.6.9) - DEPRECATED:
pyenv virtualenv venv-voting-alpha - DEPRECATED: If you don't have pyenv-virtualenv shell integration then you'll need to activate the venv yourself / manually. Shell integration does this automagically.
- DEPRECATED:
- Python deps (for
./manage):pip install -r _manager_lib/requirements.txt - To install python deps for lambdas:
./manage pip all
WARNING: The
./manageutil will use your default AWS .credentials or AWS_PROFILE if present. You'll also needexport AWS_DEFAULT_REGION=ap-southeast-2if region isn't specified in your .credentials.
run ./manage --help for cli commands, or ./manage CMD --help
For each env edit the vars in .env.(name) -- e.g. .env.dev
Additionally copy .in.sample to .in and update the vars; source .in if you need. (zsh-autoenv will automatically source .in and .out files for you)
- S3_DEV_BUCKET=
- TEST_SUBDOMAIN=
- VOTING_DOMAIN=<the domain hosted zone you have in route53; subdomains are okay>
- make sure you've installed python deps for lambdas as per above (works on linux; on mac you need to use docker which is currently disabled - though code is still in ./manage)
./manage pip-- installs deps for custom resources and things./manage deploy-macros-- run this after pip but before stack deployment./manage sync-env dev-- deploys the main cfn stack -- will fail if deploy-macros has not been run
To deploy two stacks along side eachother the following vars must be unique:
- STACK_NAME
- NAME_PREFIX
- SUBDOMAIN
You can edit .env.dev, etc to keep them neat
- example
./manage deploy-ns ./stack/nested/sv-members-app.yaml flux-dev-chain-rMembersApp-1EPU6A6JKYGSX
./manage test chaincode./manage test api-members- note: ensure a containerized openethereum node and RPC endpoint is running before hand:
./manage tools node-up
- note: ensure a containerized openethereum node and RPC endpoint is running before hand:
- signup:
curl -v -X POST -d '{"method":"signup","params":{"ethereumAddress":"0xe9b0722856FA4EfF597Bd2123C00a4'$(date +%s)'", "unsafeChecksum": true}}' https://api.blockchain.suzuka.flux.party/members/api - ballot_publish:
curl -v -X POST -d '{"method":"ballot_publish","params":{"specHash":"0x0f74cba1f103c8636cb87f241cd27a6ef1776185fc956acdb999cd'$(date +%s)'"}}' https://api.blockchain.suzuka.flux.party/members/api- note: this handler might need more data in future, like a
ballotSpecparam.
- note: this handler might need more data in future, like a
export OFFSET='1'-- this is just used to allow us to create more than one stack in parallel for dev purposes (by changing offset)./manage --offset $OFFSET deploy --watch --step 0 voting-dev-- the--step Nparam allows us to incrementally deploy, which is useful for testing and getting the stack to a state that makes subsequent deployments faster../manage --offset $OFFSET deploy --watch --use-existing --step 1 voting-dev./manage --offset $OFFSET deploy --watch --use-existing --step 2 voting-dev./manage --offset $OFFSET deploy --watch --use-existing voting-dev----step Ncan be omitted for a full deploy; at the time of writing there are only 3 steps available.
cnf-lint stack/**/*.yaml-- cfn-lint is installed as a python dep (and github action)./manage deploy-ns [path/to/template.yaml] [stack_name]will deploy a nested stack only (useful when testing stacks that are late in the CFN deployment process)
The target you specify must be one of:
cr-- installs instack/cr/commonmembers--stack/app/membersapp--stack/app/common
Run ./manage pip TARGET pkg1 pkg2 pkg3 ... - this will install dependencies and update requirements.txt
Deciding on the default license for the repo is a WIP. Some files are licensed under apache (inherited from AWS templates I've altered). Suggestions welcome. See issue #1