Skip to content
Open

ci #1

Show file tree
Hide file tree
Changes from all commits
Commits
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
73 changes: 73 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: e2e

on:
pull_request:
types: [ opened, reopened, synchronize ]

jobs:
e2e-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Setup gradle
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: '8.6'
- name: Pull browsers
run: |
docker pull selenoid/vnc_chrome:127.0
- name: Run tests
env:
ARCH: amd64
ALLURE_DOCKER_API: ${{ secrets.ALLURE_DOCKER_API }}
BUILD_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
HEAD_COMMIT_MESSAGE: ${{ github.event.pull_request.head.sha || github.sha }}
EXECUTION_TYPE: github
run: |
: # build backends with profile `docker`, only for testing
bash ./gradlew jibDockerBuild -x :rangiffler-e2e:test || exit 1
: # run e2e tests
docker compose -f docker-compose-test.yml up -d
docker ps -a
docker wait rangiffler-e2e
exit_code=$(docker inspect -f '{{.State.ExitCode}}' rangiffler-e2e)
echo "e2e_exit_code=$exit_code" >> $GITHUB_OUTPUT
echo "### Test logs ###"
docker logs rangiffler-e2e
docker compose -f docker-compose-test.yml down
docker system prune -a -f
if [ "$exit_code" -eq "0" ]; then
echo "Tests passed successfully!"
exit 0
else
echo "Tests failed!"
exit 1
fi
- name: Add comment to PR with link to allure
if: always()
uses: actions/github-script@v6
with:
script: |
const issues = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
head: `${context.repo.owner}:${context.ref.replace('refs/heads/', '')}`
})
const pr = context.issue.number || issues.data[0].number
const exitCode = ${{ steps.e2e.outputs.e2e_exit_code }}
const message = exitCode == '0' ?
'✅ TEST RUN PASSED ✅ There is the [report](https://allure.niffler-stage.qa.guru/api/allure-docker-service/projects/rangiffler/reports/latest/index.html)\n🕓 All reports [history](https://allure.niffler-stage.qa.guru/allure-docker-service-ui/projects/rangiffler)' :
'🔴 TEST RUN FAILED 🔴 There is the [report](https://allure.niffler-stage.qa.guru/api/allure-docker-service/projects/rangiffler/reports/latest/index.html)\n🕓 All reports [history](https://allure.niffler-stage.qa.guru/allure-docker-service-ui/projects/rangiffler)'
github.rest.issues.createComment({
issue_number: pr,
owner: context.repo.owner,
repo: context.repo.repo,
body: message
})
11 changes: 11 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,14 @@ allprojects {
}
}
}

subprojects {
ext {
dockerImage = System.getProperty("os.arch") == "aarch64" || System.getProperty("os.arch") == "arm64"
? "arm64v8/eclipse-temurin:21-jdk"
: "eclipse-temurin:21-jdk"
dockerArch = System.getProperty("os.arch") == "aarch64" || System.getProperty("os.arch") == "arm64"
? "arm64"
: "amd64"
}
}
18 changes: 18 additions & 0 deletions docker-compose-dev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
export FRONT_VERSION="1.0"
export ARCH=$(uname -m)

docker compose down
bash ./gradlew clean
if [ "$1" = "push" ]; then
echo "### Build & push images ###"
bash ./gradlew jib -x :rangiffler-e2e:test
docker compose push client.rangiffler.dc
else
echo "### Build images ###"
bash ./gradlew jibDockerBuild -x :rangiffler-e2e:test
fi

docker image prune -f
docker compose up -d
docker ps -a
94 changes: 94 additions & 0 deletions docker-compose-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
services:
rangiffler-mysql:
container_name: rangiffler-mysql
image: mysql:8.3.0
environment:
- MYSQL_ROOT_PASSWORD=secret
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 3s
timeout: 3s
retries: 5
expose:
- 3306
networks:
- rangiffler-network
dns_search: .

auth.rangiffler.dc:
container_name: auth.rangiffler.dc
image: dtuchs/rangiffler-auth:latest
ports:
- 9000:9000
depends_on:
rangiffler-mysql:
condition: service_healthy
networks:
- rangiffler-network
dns_search: .

api.rangiffler.dc:
container_name: api.rangiffler.dc
image: dtuchs/rangiffler-api:latest
ports:
- 8080:8080
depends_on:
auth.rangiffler.dc:
condition: service_started
networks:
- rangiffler-network
dns_search: .

client.rangiffler.dc:
container_name: client.rangiffler.dc
image: dtuchs/rangiffler-client:latest
build:
context: ./rangiffler-gql-client
dockerfile: ./Dockerfile
args:
VERSION: ${FRONT_VERSION}
ports:
- 80:80
depends_on:
api.rangiffler.dc:
condition: service_started
networks:
- rangiffler-network

rangiffler-e2e:
container_name: rangiffler-e2e
image: dtuchs/rangiffler-e2e:latest
build:
context: ./
dockerfile: ./rangiffler-e2e/Dockerfile
args:
ALLURE_DOCKER_API: ${ALLURE_DOCKER_API}
BUILD_URL: ${BUILD_URL}
HEAD_COMMIT_MESSAGE: ${HEAD_COMMIT_MESSAGE}
EXECUTION_TYPE: ${EXECUTION_TYPE}
environment:
- ALLURE_DOCKER_API=${ALLURE_DOCKER_API}
- BUILD_URL=${BUILD_URL}
- HEAD_COMMIT_MESSAGE=${HEAD_COMMIT_MESSAGE}
- EXECUTION_TYPE=${EXECUTION_TYPE}
depends_on:
client.rangiffler.dc:
condition: service_started
networks:
- rangiffler-network

selenoid:
image: aerokube/selenoid:latest-release
platform: linux/${ARCH}
volumes:
- /selenoid:/etc/selenoid
- /var/run/docker.sock:/var/run/docker.sock
command: ["-conf", "/etc/selenoid/browsers.json", "-limit", "3", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs", "-container-network", "rangiffler_rangiffler-network"]
ports:
- "4444:4444"
networks:
- rangiffler-network

networks:
rangiffler-network:
driver: bridge
66 changes: 66 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
services:
rangiffler-mysql:
container_name: rangiffler-mysql
image: mysql:8.3.0
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
- rangiffler:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 3s
timeout: 3s
retries: 5
expose:
- 3306
networks:
- rangiffler-network
dns_search: .

auth.rangiffler.dc:
container_name: auth.rangiffler.dc
image: dtuchs/rangiffler-auth:latest
ports:
- 9000:9000
depends_on:
rangiffler-mysql:
condition: service_healthy
networks:
- rangiffler-network
dns_search: .

api.rangiffler.dc:
container_name: api.rangiffler.dc
image: dtuchs/rangiffler-api:latest
ports:
- 8080:8080
depends_on:
auth.rangiffler.dc:
condition: service_started
networks:
- rangiffler-network
dns_search: .

client.rangiffler.dc:
container_name: client.rangiffler.dc
image: dtuchs/rangiffler-client:latest
build:
context: ./rangiffler-gql-client
dockerfile: ./Dockerfile
args:
VERSION: ${FRONT_VERSION}
ports:
- 80:80
depends_on:
api.rangiffler.dc:
condition: service_started
networks:
- rangiffler-network

volumes:
rangiffler:
external: true

networks:
rangiffler-network:
driver: bridge
35 changes: 35 additions & 0 deletions rangiffler-api/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'org.springframework.boot' version '3.3.4'
id 'io.spring.dependency-management' version '1.1.6'
id 'com.google.cloud.tools.jib' version '3.4.1'
}

group = 'org.rangiffler'
Expand All @@ -26,6 +27,40 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok:1.18.34'
}

jib {
container {
ports = ['8080']
jvmFlags = ['-Dspring.profiles.active=docker']
creationTime = 'USE_CURRENT_TIMESTAMP'
labels = [
'maintainer': 'Dmitrii Tuchs @dtuchs',
'version' : "${project.version}".toString()
]
}
from {
image = "${project.ext.dockerImage}"
platforms {
platform {
architecture = "${project.ext.dockerArch}"
os = 'linux'
}
}
}
to {
image = "dtuchs/${project.name}"
tags = ['latest', "${project.version}"]
}
}

tasks.jib.dependsOn test
tasks.jibDockerBuild.dependsOn test

tasks.register('printVersion') {
doLast {
println project.version
}
}

test {
useJUnitPlatform()
}
39 changes: 30 additions & 9 deletions rangiffler-api/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,7 @@ spring:
enabled: true
websocket:
path: /graphql
security:
oauth2:
resourceserver:
jwt:
issuer-uri: 'http://127.0.0.1:9000'
datasource:
url: 'jdbc:mysql://127.0.0.1:3306/rangiffler-api?serverTimezone=UTC&createDatabaseIfNotExist=true'
hikari:
connection-timeout: 20000
minimum-idle: 10
Expand Down Expand Up @@ -50,9 +44,36 @@ spring:
logging:
level:
root: INFO
org.springframework.web: DEBUG
org.springframework.security: DEBUG
org.springframework.security.oauth2: DEBUG
org.springframework.web: INFO
org.springframework.security: INFO
org.springframework.security.oauth2: INFO

---
spring:
config:
activate:
on-profile: 'local'
security:
oauth2:
resourceserver:
jwt:
issuer-uri: 'http://127.0.0.1:9000'
datasource:
url: 'jdbc:mysql://127.0.0.1:3306/rangiffler-api?serverTimezone=UTC&createDatabaseIfNotExist=true'
rangiffler-front:
base-uri: 'http://127.0.0.1:3001'
---
spring:
config:
activate:
on-profile: 'docker'
security:
oauth2:
resourceserver:
jwt:
issuer-uri: 'http://auth.rangiffler.dc:9000'
datasource:
url: 'jdbc:mysql://rangiffler-mysql:3306/rangiffler-api?serverTimezone=UTC&createDatabaseIfNotExist=true'
rangiffler-front:
base-uri: 'http://client.rangiffler.dc'
---
Loading