-
Notifications
You must be signed in to change notification settings - Fork 18
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
* @juspay/sdk-backend |
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 |
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" |
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 |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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" { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. any reason to deviate from the KMS setup for testing? There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 There was a problem hiding this comment. Choose a reason for hiding this commentThe 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}") | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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; \ | ||
|
@@ -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; \ | ||
|
@@ -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; \ | ||
|
@@ -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 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why remove cleanup from here? There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
changing from
dockerdns
tolocalhost
as we won't have docker-in-docker, since we are moving away from Jenkins?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yup