chore: update
This commit is contained in:
+15
-21
@@ -1,37 +1,31 @@
|
||||
FROM ubuntu:26.04
|
||||
FROM jbangdev/jbang-action:latest AS jbang-provider
|
||||
|
||||
FROM node:current-trixie AS base
|
||||
|
||||
COPY --from=jbang-provider /jbang /jbang
|
||||
|
||||
ENV PATH="/jbang/bin:${PATH}"
|
||||
|
||||
ENV PNPM_HOME="/pnpm"
|
||||
ENV PATH="$PNPM_HOME:$PATH"
|
||||
|
||||
RUN npx corepack enable
|
||||
|
||||
# Tránh các câu hỏi tương tác trong quá trình cài đặt
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update && apt-get install -y ca-certificates && apt-get clean
|
||||
|
||||
RUN sed -i 's|http://archive.ubuntu.com|https://apt.demonkernel.io.vn|g' /etc/apt/sources.list.d/ubuntu.sources && \
|
||||
sed -i 's|http://security.ubuntu.com|https://apt.demonkernel.io.vn|g' /etc/apt/sources.list.d/ubuntu.sources
|
||||
|
||||
# 1. Cài đặt các công cụ cơ bản
|
||||
RUN apt-get update --fix-missing && apt-get install --no-install-recommends --no-install-suggests -y \
|
||||
curl \
|
||||
bash \
|
||||
git \
|
||||
gnupg \
|
||||
docker-buildx \
|
||||
docker.io \
|
||||
nodejs \
|
||||
openjdk-25-jdk-headless \
|
||||
maven
|
||||
|
||||
# 5. Cấu hình Git
|
||||
RUN git config --global --add safe.directory '*'
|
||||
|
||||
# 2. Cài đặt Node.js & PNPM (thay thế cho apk pnpm)
|
||||
RUN curl -fsSL https://get.pnpm.io/install.sh | bash -
|
||||
|
||||
# 3. Cài đặt Kubectl
|
||||
RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \
|
||||
&& install -m 0755 kubectl /usr/local/bin/kubectl
|
||||
|
||||
# 6. Cài đặt JBang & Quarkus CLI
|
||||
ENV JBANG_DIR="/root/.jbang"
|
||||
ENV PATH="${JBANG_DIR}/bin:${PATH}"
|
||||
|
||||
RUN curl -Ls https://sh.jbang.dev | bash -s - trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/
|
||||
RUN curl -Ls https://sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio
|
||||
RUN jbang trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/
|
||||
RUN jbang app install --fresh --force quarkus@quarkusio
|
||||
|
||||
@@ -1,14 +1,22 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/alpine
|
||||
{
|
||||
"dockerComposeFile": "docker-compose.main.yaml",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"args": {
|
||||
"http_proxy": "http://host.docker.internal:3142",
|
||||
},
|
||||
"options": [
|
||||
"--add-host=host.docker.internal:host-gateway"
|
||||
],
|
||||
},
|
||||
"runArgs": [
|
||||
"--add-host=host.docker.internal:host-gateway"
|
||||
],
|
||||
"mounts": [
|
||||
"source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind",
|
||||
"source=${localEnv:USERPROFILE}/.kube,target=/root/.kube,type=bind"
|
||||
],
|
||||
"remoteUser": "root",
|
||||
"service": "devcontainer",
|
||||
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
@@ -24,7 +32,11 @@
|
||||
},
|
||||
"containerEnv": {
|
||||
"TESTCONTAINERS_RYUK_DISABLED": "true",
|
||||
"QUARKUS_DEBUG_HOST": "0.0.0.0"
|
||||
"QUARKUS_DEBUG_HOST": "0.0.0.0",
|
||||
},
|
||||
"forwardPorts": [5005, 8080]
|
||||
"postCreateCommand": "git config --global --add safe.directory '*'",
|
||||
"forwardPorts": [
|
||||
5005,
|
||||
8080
|
||||
]
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
services:
|
||||
kafka:
|
||||
image: apache/kafka:latest
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
environment:
|
||||
KAFKA_NODE_ID: 1
|
||||
KAFKA_PROCESS_ROLES: broker,controller
|
||||
KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
|
||||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
|
||||
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
|
||||
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
|
||||
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
|
||||
|
||||
kafdrop:
|
||||
image: obsidiandynamics/kafdrop:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- kafka
|
||||
network_mode: host
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
command: sh -c "sleep 5 && exec ./start-app"
|
||||
environment:
|
||||
KAFKA_BROKERCONNECT: "localhost:9092"
|
||||
@@ -1,14 +0,0 @@
|
||||
include:
|
||||
- ./docker-compose.redis.yaml
|
||||
|
||||
services:
|
||||
devcontainer:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
volumes:
|
||||
- ../..:/workspaces:cached
|
||||
network_mode: host
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
command: sleep infinity
|
||||
@@ -1,13 +0,0 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:alpine
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=password
|
||||
network_mode: host
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
@@ -1,11 +0,0 @@
|
||||
services:
|
||||
redis:
|
||||
image: redis:alpine
|
||||
network_mode: host
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
|
||||
volumes:
|
||||
redis_data:
|
||||
@@ -15,9 +15,6 @@ import org.junit.jupiter.api.Test;
|
||||
@QuarkusTest
|
||||
public class CustomerServiceTest {
|
||||
|
||||
@Inject
|
||||
OtpService otpService;
|
||||
|
||||
@Test
|
||||
void testSignup() {
|
||||
String phone = Utils.generateRandomPhone();
|
||||
@@ -115,33 +112,6 @@ public class CustomerServiceTest {
|
||||
.statusCode(400); // BadRequestException
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQuickLogin_Success() {
|
||||
String phone = Utils.generateRandomPhone();
|
||||
|
||||
QuickSignup input = new QuickSignup();
|
||||
input.phone = phone;
|
||||
|
||||
given()
|
||||
.contentType(ContentType.JSON)
|
||||
.body(input)
|
||||
.when()
|
||||
.post(Role.Customer + Url.QuickSignup)
|
||||
.then();
|
||||
|
||||
QuickLogin payload = new QuickLogin();
|
||||
payload.phone = phone;
|
||||
payload.otp = otpService.generateAndSaveOtp(phone);
|
||||
|
||||
given()
|
||||
.contentType(ContentType.JSON)
|
||||
.body(payload)
|
||||
.when()
|
||||
.post(Role.Customer + Url.QuickLogin)
|
||||
.then()
|
||||
.statusCode(202);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testQuickLoginFailInvalidOtp() {
|
||||
String phone = Utils.generateRandomPhone();
|
||||
|
||||
@@ -3,8 +3,8 @@ quarkus.http.host=0.0.0.0
|
||||
|
||||
# Database
|
||||
## Datasource
|
||||
%test.quarkus.datasource.db-kind=h2
|
||||
%test.quarkus.datasource.jdbc.url=jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1
|
||||
quarkus.datasource.db-kind=h2
|
||||
quarkus.datasource.jdbc.url=jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1
|
||||
|
||||
## Orm
|
||||
%test.quarkus.hibernate-orm.database.generation=drop-and-create
|
||||
quarkus.hibernate-orm.database.generation=drop-and-create
|
||||
|
||||
+12
-11
@@ -8,25 +8,24 @@ echo "🚀 Đang quét và tạo Native Integration Tests..."
|
||||
# Tìm tất cả các file kết thúc bằng Test.java nhưng không phải là IT.java
|
||||
find "$TEST_DIR" -name "*Test.java" ! -name "*IT.java" | while read -r test_file; do
|
||||
|
||||
# Lấy tên package từ nội dung file
|
||||
# Kiểm tra xem file có sử dụng RestAssured không
|
||||
if grep -q "import static io.restassured.RestAssured" "$test_file" || grep -q "import io.restassured.RestAssured" "$test_file"; then
|
||||
|
||||
# Lấy tên package
|
||||
package_line=$(grep -m 1 "^package " "$test_file")
|
||||
|
||||
# Lấy tên class (ví dụ: GreetingResourceTest)
|
||||
# Lấy tên class gốc
|
||||
test_class=$(basename "$test_file" .java)
|
||||
|
||||
# Tạo tên class mới (ví dụ: NativeGreetingResourceIT)
|
||||
# Tạo tên class IT mới
|
||||
it_class="Native${test_class/Test/IT}"
|
||||
|
||||
# Đường dẫn file IT mới
|
||||
it_file="$(dirname "$test_file")/${it_class}.java"
|
||||
|
||||
# Kiểm tra nếu file IT đã tồn tại thì bỏ qua
|
||||
if [ -f "$it_file" ]; then
|
||||
echo "⏭️ Đã tồn tại: $it_class"
|
||||
else
|
||||
echo "✅ Đang tạo: $it_class"
|
||||
echo "✅ Đang tạo IT cho API Test: $it_class"
|
||||
|
||||
# Ghi nội dung vào file IT
|
||||
cat <<EOF > "$it_file"
|
||||
$package_line
|
||||
|
||||
@@ -34,10 +33,12 @@ import io.quarkus.test.junit.QuarkusIntegrationTest;
|
||||
|
||||
@QuarkusIntegrationTest
|
||||
public class $it_class extends $test_class {
|
||||
// Thực thi lại toàn bộ các bài test từ $test_class trong môi trường Native.
|
||||
// Chạy Native IT cho API Test (Sử dụng RestAssured)
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
else
|
||||
# Bỏ qua các file dùng @Inject (thường là Service hoặc Unit Test logic)
|
||||
echo "📜 Bỏ qua: $(basename "$test_file")"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "🎉 Hoàn thành! Giờ bạn có thể chạy 'mvn verify -Pnative'."
|
||||
Reference in New Issue
Block a user