Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Adding prospect-api from a679afe4108f3651c33427f16b2fb02c46afe3a1 #7

Merged
merged 9 commits into from
Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .circleci/branch-filters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Workflow shortcuts
# Anything in this file will be added to all the yaml files, before CircleCI merges them.
# This is because yaml files need to be valid before merge and that means things like anchors must be defined in each file.

node_image: &node_image cimg/node:18.18.0
node_version: &node_version 18.18.0
base_image: &base_image cimg/base:2023.12

not_main: &not_main
filters:
branches:
ignore:
- main

only_main: &only_main
filters:
branches:
only:
- main

not_dev: &not_dev
filters:
branches:
ignore:
- dev

only_dev_main: &only_dev_main
filters:
branches:
only:
- dev
- main

not_dev_main: &not_dev_main
filters:
branches:
ignore:
- dev
- main

only_dev: &only_dev
filters:
branches:
only:
- dev
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ jobs:
name: Generate List of Configs to Merge
command: |
# Generate a list of all the circleci configs we want to run
file_list=(".circleci/common.yml" ".circleci/repo-jobs.yml" ".circleci/prospect-api.yml")
file_list=(".circleci/shared.yml" ".circleci/monorepo-jobs.yml" ".circleci/prospect-api.yml")
touch /tmp/configs.txt

# Add file header to each file and dump it to the config list
for file in "${file_list[@]}"; do
echo "$file" >> /tmp/configs.txt
awk -v new_content="$(cat .circleci/header.yml)" 'BEGIN {print new_content} {print}' "$file" > temp_file && mv temp_file "$file"
awk -v new_content="$(cat .circleci/branch-filters.yml)" 'BEGIN {print new_content} {print}' "$file" > temp_file && mv temp_file "$file"
done
- path-filtering/generate-config:
config-list-path: /tmp/configs.txt
Expand Down
34 changes: 34 additions & 0 deletions .circleci/monorepo-jobs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
jobs:
lint:
docker:
- image: *node_image
steps:
- checkout
- install_pnpm
- run:
name: Lint
# Need to build first, so the linter picks up all needed imports
command: |
pnpm run build
pnpm run lint --concurrency=2

test:
docker:
- image: *node_image
steps:
- checkout
- install_pnpm
- run:
name: Test
command: |
pnpm run test --concurrency=2

workflows:
monorepo:
jobs:
- lint:
<<: *not_dev_main
context: pocket
- test:
<<: *not_dev_main
context: pocket
247 changes: 247 additions & 0 deletions .circleci/prospect-api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@

workflows:
prospect-api:
jobs:

######
# Every PR Jobs
######
- apollo:
name: prospect-api_apollo_admin
fed_graph_name: pocket-admin-api
schema_file_path: servers/prospect-api/schema.graphql
graph_name: prospect-api
prod_graph_url: https://prospect-api.readitlater.com
dev_graph_url: https://prospect-api.getpocket.dev
apollo_key_env: ADMIN_APOLLO_KEY

- test_integrations:
<<: *not_dev_main
for: prospect_api
context: pocket
name: prospect-api_test_integrations
scope: prospect-api

# Try building the ECS docker image on each branch
- build_image:
<<: *not_dev_main
context: pocket
for: prospect_api
name: prospect_api_build_docker
aws-access-key-id: Dev_AWS_ACCESS_KEY
aws-secret-access-key: Dev_AWS_SECRET_ACCESS_KEY
aws-region: Dev_AWS_DEFAULT_REGION
repo-name: prospectapi-dev-app
ecr-url: 410318598490.dkr.ecr.us-east-1.amazonaws.com
push: false
extra-build-args: --build-arg GIT_SHA=${CIRCLE_SHA1} --build-arg SCOPE=prospect-api --build-arg PORT=4026

- build_lambda:
<<: *not_dev_main
context: pocket
for: prospect_api
name: prospect-api_build_lambda
aws-access-key-id: Dev_AWS_ACCESS_KEY
aws-secret-access-key: Dev_AWS_SECRET_ACCESS_KEY
aws-region: Dev_AWS_DEFAULT_REGION
scope: prospect-api-aws_lambda

- infrastructure:
<<: *not_dev_main
context: pocket
for: prospect_api
name: prospect-api_infrastructure_plan_prod
scope: prospect-api-cdk
stack-output-path: infrastructure/prospect-api/cdktf.out/stacks/prospect-api
resource-class: pocket/default-prod
workspace: Prod
dev: false
apply: false

######
# Dev Branch Deployment (Dev Environment)
######

- infrastructure:
<<: *only_dev
context: pocket
for: prospect_api
name: prospect-api_infrastructure_apply_dev
scope: prospect-api-cdk
stack-output-path: infrastructure/prospect-api/cdktf.out/stacks/prospect-api
resource-class: pocket/default-dev
workspace: Dev
apply: true
dev: true
#
# # Build & Deploy the Dev Docker Image
- build_image:
<<: *only_dev
context: pocket
for: prospect_api
name: prospect-api_build_docker_dev
aws-access-key-id: Dev_AWS_ACCESS_KEY
aws-secret-access-key: Dev_AWS_SECRET_ACCESS_KEY
aws-region: Dev_AWS_DEFAULT_REGION
repo-name: prospectapi-dev-app
ecr-url: 410318598490.dkr.ecr.us-east-1.amazonaws.com
push: true
extra-build-args: --build-arg GIT_SHA=${CIRCLE_SHA1} --build-arg SCOPE=prospect-api --build-arg PORT=4026
requires:
- prospect-api_infrastructure_apply_dev

- code_deploy_ecs:
<<: *only_dev
context: pocket
for: prospect_api
name: prospect-api_code_deploy_ecs_dev
resource-class: pocket/default-dev
codedeploy-app-name: ProspectAPI-Dev-ECS
codedeploy-group-name: ProspectAPI-Dev-ECS
requires:
- prospect-api_build_docker_dev

- build_lambda:
<<: *only_dev
context: pocket
for: prospect_api
name: prospect-api_build_lambda_dev
aws-access-key-id: Dev_AWS_ACCESS_KEY
aws-secret-access-key: Dev_AWS_SECRET_ACCESS_KEY
aws-region: Dev_AWS_DEFAULT_REGION
scope: prospect-api-aws_lambda
s3-bucket: pocket-prospectapi-dev-sqs-translation
requires:
- prospect-api_infrastructure_apply_dev

- code_deploy_lambda:
<<: *only_dev
context: pocket
for: prospect_api
name: prospect-api_code_deploy_lambda_dev
resource-class: pocket/default-dev
codedeploy-app-name: ProspectAPI-Dev-Sqs-Translation-Lambda
codedeploy-group-name: ProspectAPI-Dev-Sqs-Translation-Lambda
function-name: ProspectAPI-Dev-Sqs-Translation-Function
s3-bucket: pocket-prospectapi-dev-sqs-translation
requires:
- prospect-api_build_lambda_dev


# Notify sentry of dev deployment
- sentry_release_notification:
<<: *only_dev
name: prospect-api_sentry-release-notification-dev
context: pocket
for: prospect_api
sentry_project_name: prospect-api
sentry_env: development
sentry_org: pocket
requires:
- prospect-api_code_deploy_ecs_dev

# Setup params we may use in Lambdas
- setup_deploy_params:
<<: *only_dev
name: prospect-api_deploy-params-dev
aws_access_key_id: Dev_AWS_ACCESS_KEY
aws_secret_access_key: Dev_AWS_SECRET_ACCESS_KEY
context: pocket
env: Dev
service_name: ProspectAPI
requires:
- prospect-api_code_deploy_ecs_dev
- prospect-api_code_deploy_lambda_dev
######
# Main Branch Deployment (Prod Environment)
######
# - infrastructure:
# <<: *only_main
# context: pocket
# for: prospect_api
# name: prospect-api_infrastructure_apply_prod
# scope: prospect-api-cdk
# stack-output-path: infrastructure/prospect-api/cdktf.out/stacks/prospect-api
# resource-class: pocket/default-prod
# workspace: Prod
# apply: true
# dev: false
#
# # Build & Deploy the Prod Docker Image
# - build_image:
# <<: *only_main
# context: pocket
# for: prospect_api
# name: prospect-api_build_docker_prod
# aws-access-key-id: Prod_AWS_ACCESS_KEY
# aws-secret-access-key: Prod_AWS_SECRET_ACCESS_KEY
# aws-region: Prod_AWS_DEFAULT_REGION
# repo-name: prospectapi-prod-app
# ecr-url: 996905175585.dkr.ecr.us-east-1.amazonaws.com
# push: true
# extra-build-args: --build-arg GIT_SHA=${CIRCLE_SHA1} --build-arg SCOPE=prospect-api --build-arg PORT=4026
# requires:
# - prospect-api_infrastructure_apply_prod
#
# - code_deploy_ecs:
# <<: *only_main
# context: pocket
# for: prospect_api
# name: prospect-api_code_deploy_ecs_prod
# resource-class: pocket/default-prod
# codedeploy-app-name: ProspectAPI-Prod-ECS
# codedeploy-group-name: ProspectAPI-Prod-ECS
# requires:
# - prospect-api_build_docker_prod
#
# - build_lambda:
# <<: *only_main
# context: pocket
# for: prospect_api
# name: prospect-api_build_lambda_prod
# aws-access-key-id: Prod_AWS_ACCESS_KEY
# aws-secret-access-key: Prod_AWS_SECRET_ACCESS_KEY
# aws-region: Prod_AWS_DEFAULT_REGION
# scope: prospect-api-aws_lambda
# s3-bucket: pocket-prospectapi-prod-sqs-translation
# requires:
# - prospect-api_infrastructure_apply_prod
#
# - code_deploy_lambda:
# <<: *only_main
# context: pocket
# for: prospect_api
# name: prospect-api_code_deploy_lambda_prod
# resource-class: pocket/default-prod
# codedeploy-app-name: ProspectAPI-Prod-Sqs-Translation-Lambda
# codedeploy-group-name: ProspectAPI-Prod-Sqs-Translation-Lambda
# function-name: ProspectAPI-Prod-Sqs-Translation-Function
# s3-bucket: pocket-prospectapi-prod-sqs-translation
# requires:
# - prospect-api_build_lambda_prod
#
# # Notify sentry of main deployment
# - sentry_release_notification:
# <<: *only_main
# name: prospect-api_sentry-release-notification-prod
# context: pocket
# for: prospect_api
# sentry_project_name: prospect-api
# sentry_env: production
# sentry_org: pocket
# requires:
# - prospect-api_code_deploy_ecs_prod
# - prospect-api_code_deploy_lambda_prod
#
# # Setup params we may use in Lambdas
# - setup_deploy_params:
# <<: *only_main
# name: prospect-api_deploy-params-prod
# aws_access_key_id: Prod_AWS_ACCESS_KEY
# aws_secret_access_key: Prod_AWS_SECRET_ACCESS_KEY
# context: pocket
# env: Prod
# service_name: ProspectAPI
# requires:
# - prospect-api_code_deploy_ecs_prod
# - prospect-api_code_deploy_lambda_prod
13 changes: 13 additions & 0 deletions .circleci/scripts/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

set -e

dir=$(dirname "$0")
while [[ "$1" ]]; do
case "$1" in
--aws)
"${dir}"/setup_aws.sh
;;
esac
shift
done
9 changes: 9 additions & 0 deletions .circleci/scripts/setup_aws.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
set -e

sudo apt-get update && sudo apt-get install -y python3-pip
pip3 install boto3 awscli-local awscli --no-build-isolation

for Script in .docker/aws/*.sh ; do
bash "$Script"
done
Loading