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

chore: add PR testing workflows #6

Merged
merged 1 commit into from
Apr 22, 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
5 changes: 2 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
DATABASE_URL=postgres://postgres:docker@dockerdns:5432/config?sslmode=disable
DATABASE_URL=postgres://postgres:docker@localhost:5432/config?sslmode=disable
RUST_LOG=debug
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changing from dockerdns to localhost as we won't have docker-in-docker, since we are moving away from Jenkins?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup

AWS_ACCESS_KEY_ID=test
AWS_SECRET_ACCESS_KEY=test
Expand All @@ -8,7 +8,7 @@ DB_USER=postgres
DB_HOST=dockerdns:5432
DB_NAME=config
APP_ENV=DEV
AWS_REGION_ENDPOINT=http://dockerdns:4566
AWS_REGION_ENDPOINT=http://localhost:4566
ALLOW_SAME_KEYS_OVERLAPPING_CTX=true
ALLOW_DIFF_KEYS_OVERLAPPING_CTX=true
ALLOW_SAME_KEYS_NON_OVERLAPPING_CTX=true
Expand All @@ -22,6 +22,5 @@ MAX_DB_CONNECTION_POOL_SIZE=3
ENABLE_TENANT_AND_SCOPE=true
TENANTS=dev,test
TENANT_MIDDLEWARE_EXCLUSION_LIST="/health,/assets/favicon.ico,/pkg/frontend.js,/pkg,/pkg/frontend_bg.wasm,/pkg/tailwind.css,/pkg/style.css,/assets,/admin,/"
DASHBOARD_AUTH_URL="https://sandbox.portal.juspay.in/ec/v1/authorize"
SERVICE_PREFIX=""
SERVICE_NAME="CAC"
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @juspay/sdk-backend
23 changes: 23 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Problem
Describe the problem you are trying to solve here

## Solution
Provide a brief summary of your solution so that reviewers can understand your code

## Environment variable changes

What ENVs need to be added or changed

## Pre-deployment activity
Things needed to be done before deploying this change (if any)

## Post-deployment activity
Things needed to be done after deploying this change (if any)

## API changes
| Endpoint | Method | Request body | Response Body |
| ------------- |:-------------:| -----:| ----------------:|
| API | GET/POST, etc | request | response |

## Possible Issues in the future
Describe any possible issues that could occur because of this change
132 changes: 132 additions & 0 deletions .github/workflows/ci_check_pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: CI Checks on PRs

on:
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
# Disable incremental compilation.
#
# Incremental compilation is useful as part of an edit-build-test-edit cycle,
# as it lets the compiler avoid recompiling code that hasn't changed. However,
# on CI, we're not making small edits; we're almost always building the entire
# project from scratch. Thus, incremental compilation on CI actually
# introduces *additional* overhead to support making future builds
# faster...but no future builds will ever occur in any given CI environment.
#
# See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow
# for details.
CARGO_INCREMENTAL: 0
# Allow more retries for network requests in cargo (downloading crates) and
# rustup (installing toolchains). This should help to reduce flaky CI failures
# from transient network timeouts or other issues.
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10
# Don't emit giant backtraces in the CI logs.
RUST_BACKTRACE: short
# Use cargo's sparse index protocol
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
AWS_SESSION_TOKEN: test
AWS_REGION: ap-south-1
APP_ENV: "TEST"

jobs:
formatting:
name: Check formatting
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

# - name: Check git settings
# shell: bash
# run: |
# echo "${{ github.event.pull_request.head.ref }}"
# git log --pretty=oneline --abbrev-commit
# echo "----------------"
# git tag "abc_tag" ${{github.event.pull_request.head.sha}}
# git tag

- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.76.0
targets: wasm32-unknown-unknown
components: rustfmt, clippy

- name: Check formatting
shell: bash
run: cargo fmt --all --check

- name: install cocogitto
uses: baptiste0928/[email protected]
with:
crate: cocogitto

- name: Check conventional commit
shell: bash
run: |
git config --global user.name "${{ github.event.pull_request.user.login }}"
git config --global user.email "[email protected]"
commit=$(git log --format=%B -n 1 ${{ github.event.pull_request.head.sha }})
cog verify "$commit"

test:
name: Testing
runs-on: ubuntu-latest
services:
postgres:
image: postgres:12-alpine
ports:
- 5432:5432
env:
POSTGRES_PASSWORD: "docker"
POSTGRES_DB: "config"
restart: on-failure

localstack:
image: localstack/localstack:1.3.0
ports:
- 4510-4559:4510-4559 # external service port range
- 4566:4566 # LocalStack Edge Proxy
- 4571:4571
env:
LOCALSTACK_SERVICES: kms
AWS_DEFAULT_REGION: ap-south-1
EDGE_PORT: 4566
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.76.0
targets: wasm32-unknown-unknown
components: rustfmt, clippy

- name: install node
uses: actions/setup-node@v4
with:
node-version: 18.19.0

- name: Install wasm-pack
shell: bash
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh

- name: run tests
shell: bash
run: |
export DB_PASSWORD=`./docker-compose/localstack/get_db_password.sh | base64 --decode` && echo $DB_PASSWORD
make ci-test
env:
APP_ENV: "TEST"
44 changes: 44 additions & 0 deletions .github/workflows/ci_merge_main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Create release tags

permissions:
contents: write

on:
push:
branches:
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
tag-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.76.0
targets: wasm32-unknown-unknown
components: rustfmt, clippy

- name: Semver release
uses: cocogitto/cocogitto-action@v3
id: release
with:
release: true
git-user: "Superposition Bot"
git-user-email: "[email protected]"

- name: Push code to main
shell: bash
run: |
git config user.email "[email protected]"
git config user.name "Superposition Bot"
git push --follow-tags
2 changes: 2 additions & 0 deletions crates/frontend/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub type InputVector = Vec<(ReadSignal<String>, WriteSignal<String>)>;
pub enum AppEnv {
PROD,
SANDBOX,
TEST,
DEV,
}

Expand All @@ -33,6 +34,7 @@ impl FromStr for AppEnv {
"PROD" => Ok(AppEnv::PROD),
"SANDBOX" => Ok(AppEnv::SANDBOX),
"DEV" => Ok(AppEnv::DEV),
"TEST" => Ok(AppEnv::TEST),
_ => Err("invalid app env!!".to_string()),
}
}
Expand Down
11 changes: 8 additions & 3 deletions crates/service_utils/src/db/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,14 @@ use urlencoding::encode;

pub async fn get_database_url() -> String {
let db_user: String = get_from_env_unsafe("DB_USER").unwrap();
let kms_client = kms::new_client();
let db_password_raw = kms::decrypt(kms_client, "DB_PASSWORD").await;
let db_password = encode(db_password_raw.as_str()).to_string();
let app_env: String = get_from_env_or_default("APP_ENV", "TEST".into());
let db_password: String = if app_env.as_str() == "TEST" {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any reason to deviate from the KMS setup for testing?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we do this in development environments? Makes easy setups complex. So I wanted to add in an exception for this. Also, KMS encryption is only for juspay, we should remove this from this repo

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, make sense.

"docker".into()
} else {
let kms_client = kms::new_client();
let db_password_raw = kms::decrypt(kms_client, "DB_PASSWORD").await;
encode(db_password_raw.as_str()).to_string()
};
let db_host: String = get_from_env_unsafe("DB_HOST").unwrap();
let db_name: String = get_from_env_unsafe("DB_NAME").unwrap();
format!("postgres://{db_user}:{db_password}@{db_host}/{db_name}")
Expand Down
2 changes: 2 additions & 0 deletions crates/service_utils/src/service/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ pub struct ExperimentationFlags {
pub enum AppEnv {
PROD,
SANDBOX,
TEST,
DEV,
}

Expand All @@ -49,6 +50,7 @@ impl FromStr for AppEnv {
"PROD" => Ok(AppEnv::PROD),
"SANDBOX" => Ok(AppEnv::SANDBOX),
"DEV" => Ok(AppEnv::DEV),
"TEST" => Ok(AppEnv::TEST),
_ => Err("invalid app env!!".to_string()),
}
}
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: "3.4"
services:
postgres:
build: ./docker-compose/postgres/
container_name: context-aware-config_postgres
container_name: superposition_postgres
ports:
- "5432:5432"
environment:
Expand All @@ -14,7 +14,7 @@ services:

localstack:
build : ./docker-compose/localstack/
container_name: context-aware-config_localstack
container_name: superposition_localstack
ports:
- "4510-4559:4510-4559" # external service port range
- "4566:4566" # LocalStack Edge Proxy
Expand Down
2 changes: 1 addition & 1 deletion docker-compose/localstack/get_db_password.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# CONSTANTS
region="ap-south-1"
alias aws="aws --endpoint-url=http://$DOCKER_DNS:4566 --region=${region}"
alias aws="aws --endpoint-url=http://localhost:4566 --region=${region}"

# ****** KMS *******

Expand Down
35 changes: 6 additions & 29 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,21 @@ SHELL := /usr/bin/env bash
kill
run
ci-test
ci-build
ci-push
registry-login
validate-aws-connection
validate-psql-connection
cac

cleanup:
-docker rm -f $$(docker container ls --filter name=^context-aware-config -a -q)
-docker rmi -f $$(docker images | grep context-aware-config-postgres | cut -f 10 -d " ")

db-init:
diesel migration run --locked-schema --config-file=crates/context_aware_config/diesel.toml
-diesel migration run --locked-schema --config-file=crates/experimentation_platform/diesel.toml

cleanup:
-docker rm -f $$(docker container ls --filter name=^context-aware-config -a -q)
-docker rmi -f $$(docker images | grep context-aware-config-postgres | cut -f 10 -d " ")

cac-migration: cleanup
docker-compose up -d postgres
cp .env.example .env
sed -i 's/dockerdns/$(DOCKER_DNS)/g' ./.env
while ! make validate-psql-connection; \
do echo "waiting for postgres bootup"; \
sleep 0.5; \
Expand All @@ -38,7 +34,6 @@ cac-migration: cleanup
exp-migration: cleanup
docker-compose up -d postgres
cp .env.example .env
sed -i 's/dockerdns/$(DOCKER_DNS)/g' ./.env
while ! make validate-psql-connection; \
do echo "waiting for postgres bootup"; \
sleep 0.5; \
Expand All @@ -63,7 +58,7 @@ validate-psql-connection:

env-setup:
npm ci
docker-compose up -d postgres localstack
-docker-compose up -d postgres localstack
cp .env.example .env
sed -i 's/dockerdns/$(DOCKER_DNS)/g' ./.env
while ! make validate-psql-connection validate-aws-connection; \
Expand Down Expand Up @@ -131,32 +126,14 @@ run: kill build
do echo "waiting for postgres, localstack bootup"; \
sleep 0.5; \
done
sed -i 's/dockerdns/$(DOCKER_DNS)/g' ./.env
make superposition -e DOCKER_DNS=$(DOCKER_DNS)

ci-test: cleanup ci-setup
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why remove cleanup from here?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need docker cleanup anymore, github actions automatically cleans up containers

ci-test: ci-setup
cargo test
npm run test
rm test_cac.sql
rm test_experimentation.sql

ci-build:
docker buildx build --ssh default=$(SSH_AUTH_SOCK) \
-t $(IMAGE_NAME):$(VERSION) \
--build-arg "CONTEXT_AWARE_CONFIG_VERSION=${VERSION}" \
--build-arg "SOURCE_COMMIT=${SOURCE_COMMIT}" \
.

ci-push: registry-login
docker tag $(IMAGE_NAME):$(VERSION) $(REGISTRY_HOST)/$(IMAGE_NAME):$(VERSION)
docker push $(REGISTRY_HOST)/$(IMAGE_NAME):$(VERSION)

registry-login:
aws ecr get-login-password --region $(REGION) | \
docker login \
--username AWS \
--password-stdin $(REGISTRY_HOST)

tailwind:
cd crates/frontend && npx tailwindcss -i ./styles/tailwind.css -o ./pkg/style.css --watch

Expand Down
Loading