Skip to content

Commit f9c6d86

Browse files
author
Ruslan Molchanov
committed
Merge branch 'sprint' into 'master'
Sprint to Master See merge request open-platform/api!21
2 parents 700b280 + 144666b commit f9c6d86

139 files changed

Lines changed: 35540 additions & 175 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitlab-ci.yml

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
image: docker:latest
2+
3+
services:
4+
- docker:dind
5+
6+
stages:
7+
- build
8+
- test
9+
- package
10+
- deploy
11+
12+
13+
variables:
14+
DOCKER_DRIVER: overlay2
15+
IMAGE_NAME: gcr.io/zinc-computer-205115/apiopenfuture
16+
IMAGE_TAG: ${CI_COMMIT_REF_NAME}-${CI_PIPELINE_ID}
17+
18+
19+
###########################
20+
# Building
21+
###########################
22+
build-jar:
23+
stage: build
24+
image: openjdk:8-jdk
25+
before_script:
26+
- export GRADLE_USER_HOME=`pwd`/.gradle
27+
script: "./gradlew assemble"
28+
cache:
29+
paths:
30+
- .gradle/wrapper
31+
- .gradle/caches
32+
- frontend/.gradle/nodejs
33+
artifacts:
34+
paths:
35+
- build/libs/*.jar
36+
expire_in: 1 week
37+
only:
38+
- master
39+
- sprint
40+
41+
unit-tests:
42+
stage: test
43+
image: openjdk:8-jdk
44+
variables:
45+
POSTGRES_HOST: "postgres"
46+
POSTGRES_DB: "open-api"
47+
POSTGRES_USER: "open-api"
48+
POSTGRES_PASSWORD: "open-api"
49+
GOOGLE_CLIENT_ID: $GOOGLE_CLIENT_ID_DEV
50+
GOOGLE_CLIENT_SECRET: $GOOGLE_CLIENT_SECRET_DEV
51+
INFURA_URL: $INFURA_URL_DEV
52+
ETHEREUM_PRIVATE_KEY: $ETHEREUM_PRIVATE_KEY_DEV
53+
services:
54+
- name: postgres
55+
alias: $POSTGRES_HOST
56+
script:
57+
- ./gradlew build
58+
- cat build/reports/tests/test/index.html
59+
cache:
60+
paths:
61+
- .gradle/wrapper
62+
- .gradle/caches
63+
- frontend/.gradle/nodejs
64+
artifacts:
65+
when: always
66+
paths:
67+
- build/libs/*.jar
68+
- build/reports/tests/test/
69+
expire_in: 1 week
70+
71+
72+
.registry-auth-script: &registry_auth
73+
- docker login -u _json_key -p "${GOOGLE_JSON_TOKEN}" https://gcr.io
74+
75+
package-docker:
76+
stage: package
77+
before_script: *registry_auth
78+
script:
79+
- docker build -t ${IMAGE_NAME}:${IMAGE_TAG} -f docker/Dockerfile .
80+
- docker push ${IMAGE_NAME}:${IMAGE_TAG}
81+
only:
82+
- sprint
83+
- master
84+
85+
86+
87+
###########################
88+
# Deployment
89+
###########################
90+
.prepare-key-script: &prepare_key
91+
- apk add --no-cache openssh-client
92+
- eval $(ssh-agent -s)
93+
- echo "$DEPLOY_KEY" | tr -d '\r' | ssh-add - > /dev/null
94+
- mkdir -p ~/.ssh
95+
- chmod 700 ~/.ssh
96+
- ssh-keyscan $DEPLOY_HOST >> ~/.ssh/known_hosts
97+
- chmod 644 ~/.ssh/known_hosts
98+
99+
100+
.deploy-to-host-script: &deploy_to_host
101+
- |
102+
ssh ${DEPLOY_USER}@${DEPLOY_HOST} "docker login -u _json_key -p '${GOOGLE_JSON_TOKEN}' https://gcr.io"
103+
- ssh ${DEPLOY_USER}@${DEPLOY_HOST} "docker pull ${IMAGE_NAME}:${IMAGE_TAG}"
104+
- |
105+
ssh ${DEPLOY_USER}@${DEPLOY_HOST} "
106+
docker inspect ${CONTAINER_NAME} && \
107+
IMG=\$(docker ps -a --filter='name=^/${CONTAINER_NAME}$' --format='{{.Image}}') && \
108+
docker rm -f ${CONTAINER_NAME} && \
109+
docker rmi \$IMG; \
110+
exit 0
111+
"
112+
- |
113+
ssh ${DEPLOY_USER}@${DEPLOY_HOST} "
114+
docker run -d --name '${CONTAINER_NAME}' --restart=always \
115+
-p 8080:8080 \
116+
-e "POSTGRES_HOST=${POSTGRES_HOST}" \
117+
-e "POSTGRES_DB=${POSTGRES_DB}" \
118+
-e "POSTGRES_USER=${POSTGRES_USER}" \
119+
-e "POSTGRES_PASSWORD=${POSTGRES_PASSWORD}" \
120+
-e "GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}" \
121+
-e "GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}" \
122+
-e "INFURA_URL=${INFURA_URL}" \
123+
-e "ETHEREUM_PRIVATE_KEY=${ETHEREUM_PRIVATE_KEY}" \
124+
${IMAGE_NAME}:${IMAGE_TAG}
125+
"
126+
127+
deploy-development:
128+
stage: deploy
129+
variables:
130+
DEPLOY_USER: $DEPLOY_USER_DEV
131+
DEPLOY_HOST: $DEPLOY_HOST_DEV
132+
DEPLOY_KEY: $DEPLOY_KEY_DEV
133+
CONTAINER_NAME: open-api
134+
POSTGRES_HOST: $POSTGRES_HOST_DEV
135+
POSTGRES_DB: $POSTGRES_DB_DEV
136+
POSTGRES_USER: $POSTGRES_USER_DEV
137+
POSTGRES_PASSWORD: $POSTGRES_PASSWORD_DEV
138+
GOOGLE_CLIENT_ID: $GOOGLE_CLIENT_ID_DEV
139+
GOOGLE_CLIENT_SECRET: $GOOGLE_CLIENT_SECRET_DEV
140+
INFURA_URL: $INFURA_URL_DEV
141+
ETHEREUM_PRIVATE_KEY: $ETHEREUM_PRIVATE_KEY_DEV
142+
before_script: *prepare_key
143+
script: *deploy_to_host
144+
only:
145+
- sprint
146+
environment:
147+
name: development
148+
url: http://api.open-platform.zensoft.io
149+
150+
deploy-production:
151+
stage: deploy
152+
variables:
153+
DEPLOY_USER: $DEPLOY_USER_PROD
154+
DEPLOY_HOST: $DEPLOY_HOST_PROD
155+
DEPLOY_KEY: $DEPLOY_KEY_PROD
156+
CONTAINER_NAME: open-api
157+
POSTGRES_HOST: $POSTGRES_HOST_PROD
158+
POSTGRES_DB: $POSTGRES_DB_PROD
159+
POSTGRES_USER: $POSTGRES_USER_PROD
160+
POSTGRES_PASSWORD: $POSTGRES_PASSWORD_PROD
161+
GOOGLE_CLIENT_ID: $GOOGLE_CLIENT_ID_PROD
162+
GOOGLE_CLIENT_SECRET: $GOOGLE_CLIENT_SECRET_PROD
163+
INFURA_URL: $INFURA_URL_PROD
164+
ETHEREUM_PRIVATE_KEY: $ETHEREUM_PRIVATE_KEY_PROD
165+
before_script: *prepare_key
166+
script: *deploy_to_host
167+
only:
168+
- master
169+
environment:
170+
name: production
171+
url: https://api.openfuture.io

build.gradle

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ plugins {
1010
apply plugin: "io.spring.dependency-management"
1111

1212
group = "io.openfuture.api"
13-
version = "0.0.1-SNAPSHOT"
13+
version = "1.0.0"
1414
sourceCompatibility = JavaVersion.VERSION_1_8
1515

1616
repositories {
@@ -25,7 +25,7 @@ ext.s3Version = "1.11.333"
2525
dependencies {
2626
// Spring
2727
compile("org.springframework.boot:spring-boot-starter-web")
28-
compile('org.springframework.boot:spring-boot-starter-freemarker')
28+
compile("org.springframework.boot:spring-boot-starter-freemarker")
2929
compile("org.springframework.boot:spring-boot-starter-security")
3030
compile("org.springframework.boot:spring-boot-starter-data-jpa")
3131

@@ -50,12 +50,17 @@ dependencies {
5050
compile("org.jetbrains.kotlin:kotlin-reflect")
5151

5252
// Utils
53-
compile('commons-io:commons-io:2.6')
53+
compile("commons-io:commons-io:2.6")
5454

5555
//Test
5656
testCompile("org.springframework.boot:spring-boot-starter-test")
5757
}
5858

59+
sourceSets {
60+
main.kotlin.srcDirs += 'src/main/kotlin'
61+
main.resources.srcDirs += 'frontend/build/resources'
62+
}
63+
5964
compileKotlin {
6065
kotlinOptions {
6166
freeCompilerArgs = ["-Xjsr305=strict"]
@@ -69,3 +74,6 @@ compileTestKotlin {
6974
jvmTarget = "1.8"
7075
}
7176
}
77+
78+
// Front
79+
processResources.dependsOn(':frontend:assemble')

docker/Dockerfile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
FROM openjdk:8-jre-alpine
2+
3+
WORKDIR root/
4+
5+
ADD build/libs/*.jar ./application.jar
6+
7+
CMD java -Xmx1024M -Djava.security.egd=/dev/zrandom \
8+
-jar /root/application.jar

frontend/.gitignore

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# See https://help.github.com/ignore-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
6+
# testing
7+
/coverage
8+
9+
# production
10+
/build
11+
12+
# misc
13+
.DS_Store
14+
.env.local
15+
.env.development.local
16+
.env.test.local
17+
.env.production.local
18+
19+
npm-debug.log*
20+
yarn-debug.log*
21+
yarn-error.log*

0 commit comments

Comments
 (0)