f27200b29c
* ci: base * ci: missing bit * ci: pyenv via action * ci: typos * ci: deps * ci: typo * ci: temp rm black * ci: py ver * ci: use builtin py * ci: typo * ci: setuptools * ci: without subshell * chore: normalize titles * chore: lint * ci: validate and lint flows * ci: job name * ci: pipx as module * ci: missing dep * ci: missing dep * ci: pipx module * docs: add badge
89 lines
2.2 KiB
Python
89 lines
2.2 KiB
Python
from invoke import task, Collection
|
|
import boto3
|
|
import os
|
|
from pathlib import Path
|
|
import hashlib
|
|
|
|
#####################
|
|
# Stack invocations #
|
|
#####################
|
|
|
|
|
|
@task(name="teardown-app")
|
|
def teardown_app(ctx):
|
|
with ctx.cd("infrastructure"):
|
|
ctx.run("sceptre delete app/app.yaml -y")
|
|
|
|
|
|
@task(name="teardown-bootstrap")
|
|
def teardown_bootstrap(ctx):
|
|
with ctx.cd("infrastructure"):
|
|
ctx.run("sceptre delete bootstrap/bootstrap.yaml -y")
|
|
|
|
|
|
@task(name="deploy")
|
|
def stack_deploy(ctx):
|
|
path = Path(__file__).parent
|
|
with ctx.cd("infrastructure"):
|
|
ctx.run("sceptre launch bootstrap/bootstrap.yaml -y")
|
|
|
|
ctx.run("zip lambda_function.zip src/*")
|
|
with open("lambda_function.zip", "rb") as src:
|
|
srchash = hashlib.md5(src.read()).hexdigest()
|
|
new_archive_name = f"lambda_function_{srchash}.zip"
|
|
ctx.run(f"mv lambda_function.zip {new_archive_name}")
|
|
|
|
ctx.run(
|
|
f"aws s3 cp {new_archive_name} s3://mcat-dev-test-bucket-artifacts-2 && rm {new_archive_name}"
|
|
)
|
|
|
|
with ctx.cd("infrastructure"):
|
|
ctx.run(f"sceptre --var source_key={new_archive_name} launch app/app.yaml -y")
|
|
|
|
|
|
#####################
|
|
# Local invocations #
|
|
#####################
|
|
|
|
|
|
@task(name="start")
|
|
def app_start(ctx):
|
|
ctx.run("docker-compose up -d --build")
|
|
|
|
|
|
@task(name="stop")
|
|
def app_stop(ctx):
|
|
ctx.run("docker-compose down")
|
|
|
|
|
|
@task(
|
|
name="invoke-function",
|
|
help={
|
|
"function_name": "Name of the Lambda to invoke locally (as defined in the Cloudformation template)",
|
|
"payload": "JSON payload to include in the trigger event",
|
|
},
|
|
)
|
|
def app_invoke_function(ctx, function_name, payload):
|
|
ctx.run(
|
|
f"aws lambda invoke --endpoint http://localhost:9001 --no-sign-request --function-name {function_name} --log-type Tail --payload {payload} {function_name}_out.json"
|
|
)
|
|
|
|
|
|
ns = Collection()
|
|
|
|
# Stack invocations manage the Clouformation flows
|
|
|
|
stack = Collection("stack")
|
|
stack.add_task(stack_deploy)
|
|
stack.add_task(teardown_app)
|
|
stack.add_task(teardown_bootstrap)
|
|
|
|
# App invocations manage local containers
|
|
|
|
app = Collection("app")
|
|
app.add_task(app_start)
|
|
app.add_task(app_stop)
|
|
app.add_task(app_invoke_function)
|
|
|
|
ns.add_collection(stack)
|
|
ns.add_collection(app)
|