Skip to content

Commit 5a8899a

Browse files
committed
refactors the deployment procedure
1 parent d2a10d0 commit 5a8899a

35 files changed

+2664
-1944
lines changed

.docker/compose_ci.yaml

+2-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ services:
33
core:
44
build:
55
context: ..
6-
dockerfile: ./jvm/src/test/resources/dockerfile_ci
6+
dockerfile: ./.docker/dockerfiles/dockerfile_ci
77
container_name: core-ci-container
88
depends_on: [ db ]
99
ports:
@@ -12,9 +12,7 @@ services:
1212
- JDBC_DATABASE_URL=jdbc:postgresql://db:5432/core?user=bob&password=changeit
1313
- ION_CORE_SECRET_KEY=t8abumA3JBJrd7q0LuN3nSzKGBfslOYb
1414
db:
15-
build:
16-
context: ../jvm/src/test/resources
17-
dockerfile: ./dockerfile_db
15+
image: postgres:13-alpine
1816
container_name: core-db-container
1917
ports:
2018
- 10021:5432

.docker/compose_db.yaml

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
version: '3'
22
services:
33
db:
4-
build:
5-
context: ../jvm/src/test/resources
6-
dockerfile: ./dockerfile_db
4+
image: postgres:13-alpine
75
container_name: core-db-container
86
ports:
97
- 10021:5432

.docker/compose_deploy.yaml

+1-20
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,9 @@
11
version: '3'
2-
# WARNING!
3-
# In order for this procedure to work, you need to run docker-compose
4-
# from the root of the project, such that PWD=<root of the repo folder>
5-
# e.g. cd <root of project> && docker-compose -f .docker/compose_deploy.yaml run --rm core-deploy
6-
#
7-
# Credentials. Create a file named `env_deploy` in this folder, with the contents:
8-
# GCP_KEY='<JSON key credentials>'
9-
# GCP_ZONE='<zone of the GCE instance>'
10-
# GCP_REPO='<GCR repository name>'
11-
# GCP_INSTANCE='<target GCE instance name>'
12-
# GCP_PROJECT_ID='<GCP project ID>'
13-
# GCP_ACCOUNT='<GCP service account's email>'
14-
# GCP_DB_INSTANCE='<GCP SQL connection instance name>'
15-
# DB_CON_STRING_SUFFIX='<real db name>?user=<username>&password=<user password>'
16-
# DEV_DB_CON_STRING_SUFFIX='<auxiliary db name>?user=<username>&password=<user password>'
172
services:
183
core-deploy:
194
build:
205
context: ..
21-
dockerfile: ./project/res/dockerfile_deploy
22-
env_file: ./env_deploy
23-
network_mode: host
24-
working_dir: "${PWD}"
6+
dockerfile: .docker/dockerfiles/dockerfile_deploy
257
container_name: core-deploy-container
268
volumes:
27-
- "${PWD}:${PWD}"
289
- "/var/run/docker.sock:/var/run/docker.sock"

.docker/compose_run.yaml

+2-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ services:
33
core:
44
build:
55
context: ..
6-
dockerfile: ./jvm/src/test/resources/dockerfile_ci
6+
dockerfile: ./.docker/dockerfiles/dockerfile_ci
77
container_name: core-container
88
depends_on: [ db ]
99
# The entrypoint script will run the server if Argument 1 = "run"
@@ -15,9 +15,7 @@ services:
1515
- ION_CORE_SECRET_KEY=t8abumA3JBJrd7q0LuN3nSzKGBfslOYb
1616
- ION_CORE_BASE_URL=http://localhost:10023
1717
db:
18-
build:
19-
context: ../jvm/src/test/resources
20-
dockerfile: ./dockerfile_db
18+
image: postgres:13-alpine
2119
container_name: core-db-container
2220
ports:
2321
- 10021:5432

.docker/compose_schema_diff.yaml

-13
This file was deleted.

.docker/compose_schema_force_migration.yaml

-15
This file was deleted.

.docker/compose_schema_migration.yaml

-16
This file was deleted.

.docker/dockerfiles/bin/deploy

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/bin/sh
2+
3+
set -eu
4+
5+
core_image_tag="ghcr.io/i-on-project/core:latest"
6+
7+
# Start the database container
8+
docker-compose -f .docker/compose_db.yaml up -d db
9+
10+
jdbc_database_url="jdbc:postgresql://localhost:10021/core?user=bob&password=changeit"
11+
ion_core_secret_key="t8abumA3JBJrd7q0LuN3nSzKGBfslOYb"
12+
13+
# Build core image
14+
docker build -f ./.docker/dockerfiles/dockerfile_assemble \
15+
--network host \
16+
--build-arg "JDBC_DATABASE_URL=${jdbc_database_url}" \
17+
--build-arg "ION_CORE_SECRET_KEY=${ion_core_secret_key}" \
18+
-t "${core_image_tag}" .
19+
20+
# Stop the database container
21+
docker stop core-ci-database 2>/dev/null | true
22+
docker rm core-ci-database 2>/dev/null | true
23+
24+
# Try to push both images to GitHub Container Registry
25+
if [ -z "${GITHUB_ACTOR:-}" ] ||\
26+
[ -z "${GITHUB_TOKEN:-}" ]; then
27+
printf "Set the GITHUB_ACTOR and GITHUB_TOKEN environment variables to push the image to the registry!\n"
28+
exit 0
29+
fi
30+
31+
echo "$GITHUB_TOKEN" | docker login ghcr.io -u "$GITHUB_ACTOR" --password-stdin
32+
33+
docker push "${core_image_tag}"
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
FROM node:16-alpine3.11 AS node
2+
3+
WORKDIR ./core-react
4+
COPY ./core-react/package.json package.json
5+
COPY ./core-react/yarn.lock yarn.lock
6+
7+
RUN yarn install
8+
9+
COPY ./core-react .
10+
COPY ./jvm ../jvm
11+
12+
RUN yarn build
13+
14+
WORKDIR ..
15+
16+
FROM adoptopenjdk/openjdk11:alpine AS jvm
17+
18+
ARG JDBC_DATABASE_URL
19+
ARG ION_CORE_SECRET_KEY
20+
21+
COPY --from=node ./jvm ./proj
22+
COPY ./.docker ./proj/.docker
23+
24+
WORKDIR /proj
25+
RUN ./gradlew extractUberJar --no-daemon --stacktrace
26+
27+
FROM adoptopenjdk/openjdk11:alpine AS run
28+
29+
RUN addgroup -S spring && adduser -S spring -G spring
30+
WORKDIR /home/spring
31+
RUN mkdir -p ./app/resources
32+
RUN chown spring ./app/resources
33+
34+
USER spring:spring
35+
36+
ARG EXTRACT_DEPENDENCY_PATH=/proj/build/dependency
37+
38+
COPY --from=jvm ${EXTRACT_DEPENDENCY_PATH}/BOOT-INF/lib ./app/lib
39+
COPY --from=jvm ${EXTRACT_DEPENDENCY_PATH}/META-INF ./app/META-INF
40+
COPY --from=jvm ${EXTRACT_DEPENDENCY_PATH}/BOOT-INF/classes ./app
41+
42+
ENTRYPOINT ["java", "-cp", "app:app/lib/*", "org.ionproject.core.CoreApplicationKt"]

jvm/src/test/resources/dockerfile_ci .docker/dockerfiles/dockerfile_ci

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ FROM adoptopenjdk/openjdk11:alpine AS jvm
1818
RUN apk add postgresql-client
1919

2020
COPY --from=node ./jvm ./proj
21+
COPY ./.docker ./proj/.docker
2122
WORKDIR ./proj
22-
RUN mv ./src/test/resources/bin/poll_db_and_build .
23+
RUN mv ./.docker/dockerfiles/bin/poll_db_and_build .
2324

2425
ENTRYPOINT [ "./poll_db_and_build" ]

.docker/dockerfiles/dockerfile_deploy

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM alpine:latest
2+
3+
RUN apk add --no-cache docker docker-compose
4+
5+
COPY . .
6+
ENTRYPOINT [ "./.docker/dockerfiles/bin/deploy" ]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: Continuous Deployment
2+
3+
on:
4+
push:
5+
branches:
6+
- release/*
7+
8+
jobs:
9+
build_and_deploy:
10+
name: Build And Deploy to GitHub Container Registry
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: checkout
14+
uses: actions/checkout@v2
15+
16+
- name: Set env file for Docker Compose
17+
run: echo -e "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}\nGITHUB_ACTOR=${GITHUB_ACTOR}\nCOMMIT_SHA=${GITHUB_SHA}" > .docker/env_deploy
18+
19+
- name: Build & Deploy
20+
run: docker-compose -f .docker/compose_deploy.yaml run --rm core-deploy

.github/workflows/gcp_release_deploy.yaml

-34
This file was deleted.

jvm/build.gradle.kts

+12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ dependencies {
2222
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.2")
2323

2424
implementation("org.springframework.boot:spring-boot-starter-web")
25+
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
26+
2527
implementation("com.github.ben-manes.caffeine:caffeine:2.8.5")
2628
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
2729
implementation("org.jetbrains.kotlin:kotlin-reflect")
@@ -33,6 +35,8 @@ dependencies {
3335

3436
implementation("org.jdbi:jdbi3-kotlin-sqlobject:3.20.0")
3537

38+
implementation("org.flywaydb:flyway-core:6.5.7")
39+
3640
implementation("com.squareup.okhttp3:okhttp:4.9.1")
3741
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-RC")
3842

@@ -73,3 +77,11 @@ tasks.register("pgReset") {
7377
dependsOn(setupTask, stopTask)
7478
tasks[setupTask].mustRunAfter(stopTask)
7579
}
80+
81+
tasks.register<Copy>("extractUberJar") {
82+
dependsOn("build")
83+
dependsOn("test")
84+
dependsOn("ktlintCheck")
85+
from(zipTree("$buildDir/libs/${rootProject.name}-$version.jar"))
86+
into("$buildDir/dependency")
87+
}

jvm/src/main/kotlin/org/ionproject/core/calendar/category/CategoryRepo.kt

+5-8
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,20 @@ class CategoryRepoImpl(
1515
private val categoryMapper: CategoryData.CategoryMapper
1616
) : CategoryRepo {
1717

18-
private val categories = hashMapOf<Int, MutableList<Category>>()
19-
20-
init {
21-
populateCategoryMap()
22-
}
23-
24-
private fun populateCategoryMap() {
18+
private val categories: HashMap<Int, MutableList<Category>> by lazy {
19+
val map = hashMapOf<Int, MutableList<Category>>()
2520
transactionManager.run {
2621
it
2722
.createQuery(ALL_CATEGORIES_QUERY)
2823
.map(categoryMapper)
2924
.list()
3025
}?.forEach {
31-
categories.computeIfAbsent(it.first) {
26+
map.computeIfAbsent(it.first) {
3227
mutableListOf()
3328
}.add(it.second)
3429
}
30+
31+
map
3532
}
3633

3734
override fun byId(id: Int): List<Category>? =

jvm/src/main/kotlin/org/ionproject/core/calendar/language/LanguageRepo.kt

+7-12
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,22 @@ interface LanguageRepo {
99
}
1010

1111
@Repository
12-
class LanguagaRepoImpl(
12+
class LanguageRepoImpl(
1313
private val transactionManager: TransactionManager,
1414
private val languageMapper: LanguageData.LanguageMapper
1515
) : LanguageRepo {
1616

17-
private val languages = hashMapOf<Int, Language>()
18-
19-
init {
20-
populateLanguageMap()
21-
}
22-
23-
private fun populateLanguageMap() {
24-
val languages = transactionManager.run {
17+
private val languages: HashMap<Int, Language> by lazy {
18+
val l = transactionManager.run {
2519
it.createQuery(LanguageData.ALL_LANGUAGES_QUERY)
2620
.map(languageMapper)
2721
.list()
2822
}
2923

30-
languages?.forEach {
31-
this.languages += it
32-
}
24+
val map = hashMapOf<Int, Language>()
25+
l?.forEach { map += it }
26+
27+
map
3328
}
3429

3530
override fun byId(id: Int): Language? =

0 commit comments

Comments
 (0)