Skip to content

Commit

Permalink
chore: add PR testing workflows
Browse files Browse the repository at this point in the history
  • Loading branch information
Datron committed Apr 22, 2024
1 parent cbd5b6f commit 222d884
Show file tree
Hide file tree
Showing 10 changed files with 172 additions and 35 deletions.
4 changes: 2 additions & 2 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
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 Down
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
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
127 changes: 127 additions & 0 deletions .github/workflows/ci_check_pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
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: Check conventional commit
shell: bash
env:
COMMIT: git log --format=%B -n 1 ${{ github.event.pull_request.head.sha }}
run: |
cargo install cocogitto --version 6.1.0
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"
Empty file.
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" {
"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
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
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

0 comments on commit 222d884

Please sign in to comment.