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

Develop/alex grad2 2306 #126

Merged
merged 38 commits into from
Nov 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
dd3e70c
Grad release 1.10.0
kamal-mohammed Nov 16, 2023
6cbae9a
Grad release 1.10.1
kamal-mohammed Nov 21, 2023
95d0dca
Fix school reports performance
arybakov-cgi Nov 23, 2023
49aedbe
Fix school reports performance
arybakov-cgi Nov 23, 2023
c959cd8
Code smells fix
arybakov-cgi Nov 23, 2023
811945e
Update pom.xml
kamal-mohammed Nov 23, 2023
0d3a98d
Merge pull request #119 from bcgov/develop/alex-GRAD2-2410
kamal-mohammed Nov 23, 2023
8281383
Update application.yaml
kamal-mohammed Nov 23, 2023
5125170
Update api.dc.yaml
kamal-mohammed Nov 23, 2023
aec833c
Merge pull request #120 from bcgov/develop/alex-GRAD2-2410
kamal-mohammed Nov 23, 2023
11b2959
Update api.dc.yaml
kamal-mohammed Nov 23, 2023
4b749ad
Merge pull request #121 from bcgov/develop/alex-GRAD2-2410
kamal-mohammed Nov 23, 2023
4ca9169
Code smells fix
arybakov-cgi Nov 23, 2023
019ae75
Merge branch 'main' of https://github.com/bcgov/EDUC-GRAD-BUSINESS-AP…
arybakov-cgi Nov 23, 2023
e80a9ae
Merge pull request #122 from bcgov/develop/alex-GRAD2-2410-2
kamal-mohammed Nov 23, 2023
8615a06
Create build.from.developer.branch.deploy.to.dev.yml
kamal-mohammed Nov 24, 2023
c080774
Merge branch 'main' of https://github.com/bcgov/EDUC-GRAD-BUSINESS-AP…
arybakov-cgi Nov 24, 2023
2066656
Fix
arybakov-cgi Nov 24, 2023
1606419
Fix
arybakov-cgi Nov 24, 2023
c8b0a20
Fix
arybakov-cgi Nov 24, 2023
f83867f
Fix
arybakov-cgi Nov 24, 2023
d28cf1f
Update Dockerfile
kamal-mohammed Nov 24, 2023
ae9ebdc
Update build.from.developer.branch.deploy.to.dev.yml
kamal-mohammed Nov 24, 2023
f0d08a4
Update build.from.main.branch.deploy.to.dev.yml
kamal-mohammed Nov 24, 2023
3cc7557
Update build.from.release.branch.deploy.to.dev.yml
kamal-mohammed Nov 24, 2023
ede78c6
Update deploy_prod.yml
kamal-mohammed Nov 24, 2023
ff76619
Update deploy_test.yml
kamal-mohammed Nov 24, 2023
9f25cd0
Update api.dc.yaml
kamal-mohammed Nov 24, 2023
6ec38cd
Fix
arybakov-cgi Nov 24, 2023
c4047a8
Update Dockerfile
kamal-mohammed Nov 24, 2023
c1c7ee2
Merge pull request #123 from bcgov/main
kamal-mohammed Nov 24, 2023
bc9da42
Tests fix
arybakov-cgi Nov 24, 2023
035ab20
Save generated PDF in the /tmp folder
arybakov-cgi Nov 27, 2023
b89ce9a
Save generated PDF in the /tmp folder
arybakov-cgi Nov 27, 2023
f9e8abc
GRAD2-2306
arybakov-cgi Nov 27, 2023
3428a97
GRAD2-2306
arybakov-cgi Nov 27, 2023
f9c5362
Fix code smell
arybakov-cgi Nov 27, 2023
4fef7a7
Fix code smell
arybakov-cgi Nov 27, 2023
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
132 changes: 132 additions & 0 deletions .github/workflows/build.from.developer.branch.deploy.to.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Build & Deploy to DEV from Developer Branch

env:
# 🖊️ EDIT your repository secrets to log into your OpenShift cluster and set up the context.
# See https://github.com/redhat-actions/oc-login#readme for how to retrieve these values.
# To get a permanent token, refer to https://github.com/redhat-actions/oc-login/wiki/Using-a-Service-Account-for-GitHub-Actions
OPENSHIFT_SERVER: ${{ secrets.OPENSHIFT_SERVER }}
OPENSHIFT_TOKEN: ${{ secrets.OPENSHIFT_TOKEN }}
OPENSHIFT_NAMESPACE: ${{ secrets.GRAD_NAMESPACE }}-dev

# 🖊️ EDIT to change the image registry settings.
# Registries such as GHCR, Quay.io, and Docker Hub are supported.
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
IMAGE_REGISTRY_USER: ${{ github.actor }}
IMAGE_REGISTRY_PASSWORD: ${{ github.token }}

SPRING_BOOT_IMAGE_NAME: educ-grad-business-api-dc
DOCKER_ARTIFACTORY_REPO: artifacts.developer.gov.bc.ca/docker-remote

REPO_NAME: "educ-grad-business-api"
APP_DOMAIN: ${{ secrets.APP_DOMAIN }}
TAG: "latest"
#GRAD2-1947 Resource optimization
MIN_CPU: "30m"
MAX_CPU: "120m"
MIN_MEM: "350Mi"
MAX_MEM: "900Mi"
MIN_REPLICAS: "3"
MAX_REPLICAS: "5"

on:
# https://docs.github.com/en/actions/reference/events-that-trigger-workflows
workflow_dispatch:
inputs:
choice:
type: choice
description: Choose branch to build from
options:
- develop/alex
- develop/chris
- develop/jinil
- develop/km

jobs:
openshift-ci-cd:
name: Build and deploy to OpenShift DEV from Developer branch
# ubuntu-20.04 can also be used.
runs-on: ubuntu-20.04
environment: dev

outputs:
ROUTE: ${{ steps.deploy-and-expose.outputs.route }}
SELECTOR: ${{ steps.deploy-and-expose.outputs.selector }}

steps:
- name: Check out repository
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.choice }}

- name: Determine image tags
if: env.TAG == ''
run: |
echo "TAG=latest ${GITHUB_SHA::12}" | tee -a $GITHUB_ENV

- name: Login to Docker Hub
uses: docker/login-action@v2
with:
registry: ${{ env.DOCKER_ARTIFACTORY_REPO }}
username: ${{ secrets.DOCKER_ARTIFACTORY_USERNAME }}
password: ${{ secrets.DOCKER_ARTIFACTORY_ACCESS_TOKEN }}

# https://github.com/redhat-actions/buildah-build#readme
- name: Build from Dockerfile
id: build-image
uses: redhat-actions/buildah-build@v2
with:
image: ${{ env.REPO_NAME }}
tags: ${{ env.TAG }}

# If you don't have a Dockerfile/Containerfile, refer to https://github.com/redhat-actions/buildah-build#scratch-build-inputs
# Or, perform a source-to-image build using https://github.com/redhat-actions/s2i-build
# Otherwise, point this to your Dockerfile/Containerfile relative to the repository root.
dockerfiles: |
./Dockerfile

# https://github.com/redhat-actions/push-to-registry#readme
- name: Push to registry
id: push-image
uses: redhat-actions/push-to-registry@v2
with:
image: ${{ steps.build-image.outputs.image }}
tags: ${{ steps.build-image.outputs.tags }}
registry: ${{ env.IMAGE_REGISTRY }}
username: ${{ env.IMAGE_REGISTRY_USER }}
password: ${{ env.IMAGE_REGISTRY_PASSWORD }}

# The path the image was pushed to is now stored in ${{ steps.push-image.outputs.registry-path }}
- name: Install oc
uses: redhat-actions/openshift-tools-installer@v1
with:
oc: 4

# https://github.com/redhat-actions/oc-login#readme
- name: Deploy
run: |
set -eux
# Login to OpenShift and select project
oc login --token=${{ env.OPENSHIFT_TOKEN }} --server=${{ env.OPENSHIFT_SERVER }}
oc project ${{ env.OPENSHIFT_NAMESPACE }}
# Cancel any rollouts in progress
oc rollout cancel dc/${{ env.SPRING_BOOT_IMAGE_NAME }} 2> /dev/null \
|| true && echo "No rollout in progress"
# tag image stream
oc -n ${{ env.OPENSHIFT_NAMESPACE }} tag ${{ steps.push-image.outputs.registry-path }} ${{ env.REPO_NAME }}:${{ env.TAG }}

# Process and apply deployment template
oc process -f tools/openshift/api.dc.yaml -p IS_NAMESPACE=${{ env.OPENSHIFT_NAMESPACE }} -p REPO_NAME=${{ env.REPO_NAME }} -p TAG_NAME=${{ env.TAG }} -p HOST_ROUTE=${{ env.REPO_NAME }}-${{ env.OPENSHIFT_NAMESPACE }}.${{ env.APP_DOMAIN }} -p MIN_REPLICAS=${{ env.MIN_REPLICAS }} -p MAX_REPLICAS=${{ env.MAX_REPLICAS }} -p MIN_CPU=${{ env.MIN_CPU }} -p MAX_CPU=${{ env.MAX_CPU }} -p MIN_MEM=${{ env.MIN_MEM }} -p MAX_MEM=${{ env.MAX_MEM }} \
| oc apply -f -

# Start rollout (if necessary) and follow it
oc rollout latest dc/${{ env.SPRING_BOOT_IMAGE_NAME }} 2> /dev/null \
|| true && echo "Rollout in progress"
oc logs -f dc/${{ env.SPRING_BOOT_IMAGE_NAME }}
# Get status, returns 0 if rollout is successful
oc rollout status dc/${{ env.SPRING_BOOT_IMAGE_NAME }}

# now hit it with a zap scan
- name: ZAP Scan
uses: zaproxy/[email protected]
with:
target: 'https://${{ env.REPO_NAME }}-${{ env.OPENSHIFT_NAMESPACE }}-dev.apps.silver.devops.gov.bc.ca/api/v1/api-docs'
8 changes: 4 additions & 4 deletions .github/workflows/build.from.main.branch.deploy.to.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ env:
APP_DOMAIN: ${{ secrets.APP_DOMAIN }}
TAG: "latest"
#GRAD2-1947 Resource optimization
MIN_CPU: "20m"
MAX_CPU: "100m"
MIN_MEM: "256Mi"
MAX_MEM: "700Mi"
MIN_CPU: "30m"
MAX_CPU: "120m"
MIN_MEM: "350Mi"
MAX_MEM: "900Mi"
MIN_REPLICAS: "3"
MAX_REPLICAS: "5"

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/build.from.release.branch.deploy.to.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ env:
APP_DOMAIN: ${{ secrets.APP_DOMAIN }}
TAG: "latest"
#GRAD2-1947 Resource optimization
MIN_CPU: "20m"
MAX_CPU: "100m"
MIN_MEM: "256Mi"
MAX_MEM: "700Mi"
MIN_CPU: "30m"
MAX_CPU: "120m"
MIN_MEM: "350Mi"
MAX_MEM: "900Mi"
MIN_REPLICAS: "3"
MAX_REPLICAS: "5"

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/deploy_prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ env:
TAG: "latest"

#GRAD2-1947 Resource optimization
MIN_CPU: "20m"
MAX_CPU: "100m"
MIN_MEM: "256Mi"
MAX_MEM: "700Mi"
MIN_CPU: "30m"
MAX_CPU: "120m"
MIN_MEM: "350Mi"
MAX_MEM: "900Mi"
MIN_REPLICAS: "3"
MAX_REPLICAS: "5"

Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/deploy_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ env:
TAG: "latest"

#GRAD2-1947 Resource optimization
MIN_CPU: "20m"
MAX_CPU: "100m"
MIN_MEM: "256Mi"
MAX_MEM: "700Mi"
MIN_CPU: "30m"
MAX_CPU: "120m"
MIN_MEM: "350Mi"
MAX_MEM: "900Mi"
MIN_REPLICAS: "3"
MAX_REPLICAS: "5"

Expand Down Expand Up @@ -75,4 +75,4 @@ jobs:
|| true && echo "Rollout in progress"
oc logs -f dc/${{ env.SPRING_BOOT_IMAGE_NAME }}
# Get status, returns 0 if rollout is successful
oc rollout status dc/${{ env.SPRING_BOOT_IMAGE_NAME }}
oc rollout status dc/${{ env.SPRING_BOOT_IMAGE_NAME }}
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ ARG DEPENDENCY=/workspace/app/target/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-Duser.name=EDUC_GRAD_BUSINESS_API","-Xms500m","-Xmx500m","-noverify","-XX:TieredStopAtLevel=1",\
ENTRYPOINT ["java","-Duser.name=EDUC_GRAD_BUSINESS_API","-Xms700m","-Xmx700m","-XX:TieredStopAtLevel=1",\
"-XX:+UseParallelGC","-XX:MinHeapFreeRatio=20","-XX:MaxHeapFreeRatio=40","-XX:GCTimeRatio=4",\
"-XX:AdaptiveSizePolicyWeight=90","-XX:MaxMetaspaceSize=300m","-XX:ParallelGCThreads=1",\
"-Djava.util.concurrent.ForkJoinPool.common.parallelism=1","-XX:CICompilerCount=2",\
Expand Down
18 changes: 17 additions & 1 deletion api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</parent>
<groupId>ca.bc.gov</groupId>
<artifactId>educ-grad-business-api</artifactId>
<version>1.8.25</version>
<version>1.8.26</version>
<name>educ-grad-business-api</name>
<description>GRAD Business API for external clients</description>

Expand Down Expand Up @@ -170,6 +170,22 @@
<artifactId>pdfbox</artifactId>
<version>2.0.26</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220320</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.ExchangeStrategies;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down Expand Up @@ -37,10 +38,12 @@ public ModelMapper modelMapper() {
public WebClient webClient() {
HttpClient client = HttpClient.create();
client.warmup().block();
return WebClient.builder().exchangeStrategies(ExchangeStrategies.builder()
return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(HttpClient.newConnection().compress(true)))
.exchangeStrategies(ExchangeStrategies.builder()
.codecs(configurer -> configurer
.defaultCodecs()
.maxInMemorySize(20 * 1024 * 1024))
.maxInMemorySize(300 * 1024 * 1024))
.build()).build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ca.bc.gov.educ.api.gradbusiness.config;

import ca.bc.gov.educ.api.gradbusiness.model.dto.ResponseObjCache;
import ca.bc.gov.educ.api.gradbusiness.util.EducGraduationApiConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TokenUtilsConfig {

EducGraduationApiConstants constants;

@Autowired
public TokenUtilsConfig(EducGraduationApiConstants constants) {
this.constants = constants;
}

@Bean
public ResponseObjCache createResponseObjCache() {
return new ResponseObjCache(constants.getTokenExpiryOffset());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ca.bc.gov.educ.api.gradbusiness.exception;

import lombok.Data;

@Data
public class ServiceException extends RuntimeException {

private final int statusCode;

public ServiceException(String message, int value) {
super(message);
this.statusCode = value;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ca.bc.gov.educ.api.gradbusiness.model.dto;

import lombok.Data;

@Data
public class ResponseObj {

private String access_token;
private String refresh_token;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package ca.bc.gov.educ.api.gradbusiness.model.dto;

import org.json.JSONObject;

import java.util.Base64;

public class ResponseObjCache {

private long tokenExpiry = 0;
private ResponseObj responseObj;

// tokenExpiry-[seconds] provides a slight offset, if token WILL expire in
// [seconds], obtain a new one
private int offset;

public ResponseObjCache(int offset) {
this.offset = offset;
}

public ResponseObj getResponseObj() {
return responseObj;
}

public void setResponseObj(ResponseObj responseObj) {
this.setTokenExpiry(responseObj);
this.responseObj = responseObj;
}

public boolean isExpired(){
// tokenExpiry-[seconds] provides a slight offset, if token WILL expire in
// 10 seconds, obtain a new one
return (responseObj == null) || (tokenExpiry-offset) < (System.currentTimeMillis() / 1000);
}

private void setTokenExpiry(ResponseObj responseObj){
String[] parts = responseObj.getAccess_token().split("\\.");
JSONObject payload = new JSONObject(new String(Base64.getUrlDecoder().decode(parts[1])));
this.tokenExpiry = payload.getLong("exp");
}


}
Loading
Loading