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

add deploy action #27

Merged
merged 37 commits into from
Feb 23, 2024
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
3be8762
add deploy action
Dec 25, 2023
db1ebda
add deploy action
Dec 25, 2023
ee0efac
Merge branch 'main' into add_deploy_action
qdaxb Dec 25, 2023
079e895
add deploy action
Dec 28, 2023
51d9e28
Merge remote-tracking branch 'origin/add_deploy_action' into add_depl…
Dec 28, 2023
e7106f3
add deploy action
Dec 28, 2023
c208a2b
add deploy action
Dec 28, 2023
a5e7d21
add deploy action
Dec 28, 2023
9ccdfd1
add deploy action
Dec 28, 2023
6c90182
add deploy action
Dec 28, 2023
0be8ba1
add deploy action
Dec 28, 2023
4b6c00f
add deploy action
Dec 28, 2023
1579cb4
add deploy action
Dec 28, 2023
01b0ec0
add deploy action
Dec 28, 2023
7d9d4f4
add deploy action
Dec 28, 2023
d344346
add deploy action
Dec 29, 2023
8e63ce1
fix deploy action
Jan 10, 2024
bee3dc9
fix deploy action
Jan 11, 2024
4fb808d
fix deploy action
Jan 11, 2024
51a1942
fix deploy action
Jan 11, 2024
b65aba3
fix deploy action
Jan 11, 2024
4c878c7
fix deploy action
Jan 11, 2024
1a50e50
fix deploy action
Jan 11, 2024
c17da85
fix deploy action
Jan 11, 2024
b17eed1
fix deploy action
Jan 11, 2024
3e9b0c2
fix deploy action
Jan 11, 2024
443e3f1
add helm action
Jan 12, 2024
ec73bcd
add helm action
Jan 12, 2024
a1f9a38
fix deploy action
Jan 16, 2024
ab75e39
fix deploy action
Jan 16, 2024
61c6378
fix deploy action
Jan 16, 2024
2b694bc
fix deploy action
Jan 16, 2024
3512890
fix deploy action
Jan 16, 2024
e95a170
fix deploy action
Jan 16, 2024
2429b9e
fix deploy action
Jan 16, 2024
10d1501
fix deploy action
Jan 25, 2024
d5e29d2
Merge branch 'main' into add_deploy_action
qdaxb Feb 23, 2024
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
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ jobs:
- name: Build and analyze
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: mvn -B clean javadoc:javadoc clean verify -P coverage -DskipITs=false -Dmaven.test.skip=false
run: mvn -B clean javadoc:javadoc clean verify -P coverage -DskipITs=false -Dmaven.test.skip=false -pl '!rill-flow-test'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

应该默认不运行rill-flow-test,而不是显式指定不运行

if: env.SONAR_TOKEN == ''
- name: Build and analyze with sonar
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: mvn -B clean javadoc:javadoc verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -P coverage -DskipITs=false -Dmaven.test.skip=false -Dsonar.projectKey=weibocom_rill-flow
run: mvn -B clean javadoc:javadoc verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -P coverage -DskipITs=false -Dmaven.test.skip=false -Dsonar.projectKey=weibocom_rill-flow -pl '!rill-flow-test'
if: env.SONAR_TOKEN != ''
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
Expand Down
38 changes: 38 additions & 0 deletions .github/workflows/deploy-run-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Deploy and Test
on:
push:
branches:
- main
pull_request:
types: [ opened, synchronize, reopened ]
jobs:
test:
name: Deploy and Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'

- name: Run Internal Test
run: mvn test -pl '!rill-flow-test' && echo "Maven Run Internal Test succeeded"|| { echo "Run Internal Test failed."; exit 1; }

- name: Install Docker Compose
run: |
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

- name: Deploy with Docker Compose
run: |
cd docker
docker-compose up -d

- name: Run API Test
run: mvn test -pl 'rill-flow-test' && echo "Run API Test succeeded"|| { echo "Run API Test failed."; exit 1; }

35 changes: 35 additions & 0 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
version: '3'
services:
rill-flow:
image: weibocom/rill-flow
depends_on:
- cache
- jaeger
ports:
- "8080:8080"
environment:
- RILL_FLOW_DESCRIPTOR_REDIS_HOST=cache
- RILL_FLOW_DEFAULT_REDIS_HOST=cache
- RILL_FLOW_TRACE_ENDPOINT=http://jaeger:4317
- RILL_FLOW_CALLBACK_URL=http://rill-flow:8080/flow/finish.json
- RILL_FLOW_TRACE_QUERY_HOST=http://jaeger:16686
cache:
image: redis:6.2-alpine
restart: always
command: redis-server --save 20 1 --loglevel warning
jaeger:
image: jaegertracing/all-in-one:1.39
restart: always
environment:
- COLLECTOR_OTLP_ENABLED=true
ui:
image: weibocom/rill-flow-ui
ports:
- "8088:80"
depends_on:
- rill-flow
- jaeger
environment:
- BACKEND_SERVER=http://rill-flow:8080
sample-executor:
image: weibocom/rill-flow-sample:sample-executor
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
<module>rill-flow-interfaces</module>
<module>rill-flow-plugins</module>
<module>rill-flow-trigger</module>
<module>rill-flow-test</module>
</modules>

<properties>
Expand Down
21 changes: 21 additions & 0 deletions rill-flow-test/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.weibo</groupId>
<artifactId>rill-flow</artifactId>
<version>0.1.6-SNAPSHOT</version>
</parent>

<artifactId>rill-flow-test</artifactId>

<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package com.weibo.rill.flow.sample

import org.apache.http.HttpEntity
import org.apache.http.HttpResponse
import org.apache.http.client.HttpClient
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.ContentType
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClientBuilder
import org.apache.http.util.EntityUtils
import org.junit.jupiter.api.MethodOrderer
import org.junit.jupiter.api.Order
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.TestMethodOrder
import spock.lang.Specification

import java.nio.file.Files
import java.nio.file.Paths

import static org.junit.jupiter.api.Assertions.assertEquals

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

应该使用spock的Stepwise来顺序执行测试

class SampleApiTest extends Specification {
class ApiResponse {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

可以直接用map,不需要单独定义类

int statusCode;
String responseContent;

ApiResponse(int statusCode, String responseContent) {
this.statusCode = statusCode;
this.responseContent = responseContent;
}

int getStatusCode() {
return statusCode
}

void setStatusCode(int statusCode) {
this.statusCode = statusCode
}

String getResponseContent() {
return responseContent
}

void setResponseContent(String responseContent) {
this.responseContent = responseContent
}
}


@Test
@Order(1)
public void testChoiceSampleAddDescriptor() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里没有使用spock的基本测试格式

String url = "http://localhost:8080/flow/bg/manage/descriptor/add_descriptor.json?business_id=rillFlowSample&feature_name=choiceSample&alias=release";
String contentType = "text/plain";
String requestData = readFileContent("../docs/samples/choice-sample.yaml");
// 执行 API 请求并获取响应
ApiResponse response = sendApiRequest(url, contentType, requestData);
// 使用测试断言来验证测试结果
assertEquals(200, response.getStatusCode(), response.getResponseContent());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里没有使用spock风格的assert

}

@Test
@Order(2)
public void testChoiceSampleSubmit() {
String url = "http://localhost:8080/flow/submit.json?descriptor_id=rillFlowSample:choiceSample";
String contentType = "application/json";
String requestData = "{\"input_num\":10}";
ApiResponse response = sendApiRequest(url, contentType, requestData);
assertEquals(200, response.getStatusCode(), response.getResponseContent());
}

@Test
@Order(3)
public void testCallApiSampleAddDescriptor() {
String url = "http://localhost:8080/flow/bg/manage/descriptor/add_descriptor.json?business_id=rillFlowSample&feature_name=callApiSample&alias=release";
String contentType = "text/plain";
String requestData = readFileContent("../docs/samples/call-api-sample.yaml");
ApiResponse response = sendApiRequest(url, contentType, requestData);
assertEquals(200, response.getStatusCode(), response.getResponseContent());
}

@Test
@Order(4)
public void testCallApiSampleSubmit() {
String url = "http://localhost:8080/flow/submit.json?descriptor_id=rillFlowSample:callApiSample";
String contentType = "application/json";
String requestData = "{\"input_num\":10}";
ApiResponse response = sendApiRequest(url, contentType, requestData);
assertEquals(200, response.getStatusCode(), response.getResponseContent());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

只验证了状态码,没有验证返回内容和图的业务结果

}

@Test
@Order(5)
public void testParallelAsyncTaskAddDescriptor() {
String url = "http://localhost:8080/flow/bg/manage/descriptor/add_descriptor.json?business_id=rillFlowSample&feature_name=parallelAsyncTask&alias=release";
String contentType = "text/plain";
String requestData = readFileContent("../docs/samples/parallel-async-dag.yaml");
ApiResponse response = sendApiRequest(url, contentType, requestData);
assertEquals(200, response.getStatusCode(), response.getResponseContent());
}

@Test
@Order(6)
public void testParallelAsyncTaskSubmit() {
String url = "http://localhost:8080/flow/submit.json?descriptor_id=rillFlowSample:parallelAsyncTask";
String contentType = "application/json";
String requestData = "{\"rand_num\":20}";
ApiResponse response = sendApiRequest(url, contentType, requestData);
assertEquals(200, response.getStatusCode(), response.getResponseContent());
}

@Test
@Order(7)
public void testSubDagTaskAddDescriptor() {
String url = "http://localhost:8080/flow/bg/manage/descriptor/add_descriptor.json?business_id=rillFlowSample&feature_name=subdagTask&alias=release";
String contentType = "text/plain";
String requestData = readFileContent("../docs/samples/ref-dag.yaml");
ApiResponse response = sendApiRequest(url, contentType, requestData);
assertEquals(200, response.getStatusCode(), response.getResponseContent());
}

@Test
@Order(8)
public void testSubDagTaskSubmit() {
String url = "http://localhost:8080/flow/submit.json?descriptor_id=rillFlowSample:subdagTask";
String contentType = "application/json";
String requestData = "{\"parent_rand_num\":20}";
ApiResponse response = sendApiRequest(url, contentType, requestData);
assertEquals(200, response.getStatusCode(), response.getResponseContent());
}




private String readFileContent(String filePath) {
try {
// 读取文件内容并返回
return new String(Files.readAllBytes(Paths.get(filePath)));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return new File('/path/to/file').text

} catch (IOException e) {
e.printStackTrace();
return null;
}
}

private ApiResponse sendApiRequest(String url, String contentType, String requestData) {
HttpClient httpClient = HttpClientBuilder.create().build();
try {
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Content-Type", contentType);

// 设置请求体
httpPost.setEntity(new StringEntity(requestData, ContentType.create(contentType)));

HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();

// 获取响应状态码和内容
int statusCode = response.getStatusLine().getStatusCode();
String responseContent = EntityUtils.toString(entity);

return new ApiResponse(statusCode, responseContent);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

可以直接用jsonslurper解析

} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}