Skip to content

Commit

Permalink
renegade-dealer: Add healthcheck endpoint and deployment setup
Browse files Browse the repository at this point in the history
  • Loading branch information
joeykraut committed Apr 22, 2024
1 parent da0e279 commit aacf109
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 2 deletions.
35 changes: 35 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
FROM --platform=arm64 rust:latest AS chef

WORKDIR /build
COPY ./rust-toolchain ./rust-toolchain
RUN rustup install $(cat rust-toolchain)

RUN apt-get update && apt-get install -y libssl-dev

# Install chef and generate a recipe
RUN cargo install cargo-chef

COPY ./Cargo.toml ./Cargo.toml
COPY ./Cargo.lock ./Cargo.lock
COPY ./renegade-dealer ./renegade-dealer
COPY ./renegade-dealer-api ./renegade-dealer-api
RUN cargo chef prepare --recipe-path recipe.json

# Disable compiler warnings and enable backtraces for panic
ENV RUSTFLAGS=-Awarnings
ENV RUST_BACKTRACE=1

# Build only the dependencies to cache them in this layer
RUN cargo chef cook --release --recipe-path recipe.json

# Copy back in the full sources and build the tests
WORKDIR /build
COPY ./Cargo.lock ./Cargo.lock
COPY ./renegade-dealer ./renegade-dealer
COPY ./renegade-dealer-api ./renegade-dealer-api

WORKDIR /build/renegade-dealer
RUN cargo build --release --quiet --all-features

ENTRYPOINT ["cargo", "run", "--release", "--all-features"]

10 changes: 10 additions & 0 deletions build_and_push.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/sh
REGION=ca-central-1
ENVIRONMENT=${1:-staging}
ECR_URL=377928551571.dkr.ecr.ca-central-1.amazonaws.com/renegade-dealer-$ENVIRONMENT

docker build -t dealer:latest .
aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ECR_URL

docker tag dealer:latest $ECR_URL:latest
docker push $ECR_URL:latest
34 changes: 34 additions & 0 deletions deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/bin/sh
REGION=ca-central-1
ENVIRONMENT=${1:-staging}
CLUSTER_NAME=$ENVIRONMENT-renegade-dealer-cluster
SERVICE_NAME=$ENVIRONMENT-renegade-dealer-service
TASK_FAMILY=$ENVIRONMENT-renegade-dealer-task-def
ECR_URL=377928551571.dkr.ecr.ca-central-1.amazonaws.com/renegade-dealer-$ENVIRONMENT

# Fetch the latest image URI from ECR
IMAGE_URI=$(aws ecr describe-images --repository-name renegade-dealer-$ENVIRONMENT --region $REGION --query 'sort_by(imageDetails,& imagePushedAt)[-1].imageTags[0]' --output text)
FULL_IMAGE_URI="$ECR_URL:$IMAGE_URI"
echo "Using image URI: $FULL_IMAGE_URI"

# Fetch the existing definition of the task and create a new revision with the updated URI
TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition $TASK_FAMILY --region $REGION --query 'taskDefinition')
NEW_TASK_DEF=$(echo $TASK_DEFINITION | \
jq --arg IMAGE_URI "$FULL_IMAGE_URI" '.containerDefinitions[0].image = $IMAGE_URI' | \
jq 'del(.taskDefinitionArn)' | \
jq 'del(.revision)' | \
jq 'del(.status)' | \
jq 'del(.requiresAttributes)' | \
jq 'del(.compatibilities)' | \
jq 'del(.registeredAt)' | \
jq 'del(.registeredBy)' | \
jq -c)

# Register the new task definition
NEW_TASK_INFO=$(aws ecs register-task-definition --cli-input-json "$NEW_TASK_DEF" --region $REGION)
NEW_REVISION=$(echo $NEW_TASK_INFO | jq -r '.taskDefinition.revision')
echo "Created new task revision: $NEW_REVISION"

# Update the ECS cluster to the new revision
aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE_NAME --task-definition $TASK_FAMILY:$NEW_REVISION --region $REGION >/dev/null 2>&1
echo "ECS cluster updated to new revision"
10 changes: 8 additions & 2 deletions renegade-dealer/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ async fn main() {
Dealer::start(dealer_recv);

// POST /v0/offline-phase/:request_id
let setup = warp::post()
let offline_phase = warp::post()
.and(warp::path("v0"))
.and(warp::path("offline-phase"))
.and(warp::path::param::<RequestId>())
Expand All @@ -82,7 +82,13 @@ async fn main() {
})
.recover(handle_rejection);

warp::serve(setup).run(([127, 0, 0, 1], cli.port)).await
// GET /ping
let ping = warp::get()
.and(warp::path("ping"))
.map(|| warp::reply::with_status("PONG", warp::http::StatusCode::OK));

let routes = offline_phase.or(ping);
warp::serve(routes).run(([0, 0, 0, 0], cli.port)).await
}

/// Validates the incoming request headers and body.
Expand Down

0 comments on commit aacf109

Please sign in to comment.