Skip to content

Commit

Permalink
add deploy action (#27)
Browse files Browse the repository at this point in the history
* add deploy action

---------

Co-authored-by: xinyu55 <[email protected]>
  • Loading branch information
Kylen0714 and xinyu55 authored Feb 23, 2024
1 parent 6358816 commit 0007151
Show file tree
Hide file tree
Showing 5 changed files with 246 additions and 0 deletions.
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: Docker Deploy and Test
on:
push:
branches:
- main
pull_request:
types: [ opened, synchronize, reopened ]
jobs:
test:
name: Docker 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 && 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 -P flow_api_test -Dapi.url=http://localhost:8080 && 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
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -901,6 +901,12 @@
</plugins>
</build>
</profile>
<profile>
<id>flow_api_test</id>
<modules>
<module>rill-flow-test</module>
</modules>
</profile>
</profiles>
</project>

30 changes: 30 additions & 0 deletions rill-flow-test/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?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>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package com.weibo.rill.flow.sample

import net.sf.json.groovy.JsonSlurper
import org.apache.http.HttpEntity
import org.apache.http.HttpResponse
import org.apache.http.client.HttpClient
import org.apache.http.client.methods.HttpGet
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 spock.lang.Specification
import spock.lang.Stepwise
import spock.lang.Timeout

@Stepwise
class SampleApiTest extends Specification {



String domain;

def setup(){
domain = System.getProperty("api.url")
}

@Timeout(30)

def "run choice sample task"() {
when:
def responseJson = sendPostRequest(domain + "/flow/bg/manage/descriptor/add_descriptor.json?business_id=rillFlowSample&feature_name=choiceSample&alias=release", "text/plain", readFileContent("../docs/samples/choice-sample.yaml"))

then:
responseJson.status == 200
responseJson.content.ret == true

when:
def submitResponseJson = sendPostRequest(domain + "/flow/submit.json?descriptor_id=rillFlowSample:choiceSample", "application/json", "{\"input_num\":10}")

then:
submitResponseJson.status == 200
submitResponseJson.content.execution_id != ""

expect:
assert checkDagStatus(submitResponseJson.content.execution_id)
}

def "run call api sample task"() {
when:
def responseJson = sendPostRequest(domain + "/flow/bg/manage/descriptor/add_descriptor.json?business_id=rillFlowSample&feature_name=callApiSample&alias=release", "text/plain", readFileContent("../docs/samples/call-api-sample.yaml"))

then:
responseJson.status == 200
responseJson.content.ret == true

when:
def submitResponseJson = sendPostRequest(domain + "/flow/submit.json?descriptor_id=rillFlowSample:callApiSample", "application/json", "{\"input_num\":10}")

then:
submitResponseJson.status == 200
submitResponseJson.content.execution_id != ""

expect:
assert checkDagStatus(submitResponseJson.content.execution_id)

}

private String readFileContent(String filePath) {
try {
return new File(filePath).text
} catch (IOException e) {
e.printStackTrace()
return null
}
}

private boolean checkDagStatus(String executionId) {
def i = 0
while (i < 10) {
def getResponseJson = sendGetRequest(domain + "/flow/get.json?execution_id=" + executionId, "application/json")
if (getResponseJson.content.ret.dag_status == "SUCCEED") {
return true
}
i++
println getResponseJson.content.ret.dag_status
if (getResponseJson.content.ret.dag_status == "FAILED") {
println getResponseJson.content.ret
}
Thread.sleep(1000)
}
return false
}

private Map<String, Object> sendPostRequest(String url, String contentType, String requestData) {
HttpClient httpClient = HttpClientBuilder.create().build()
def result = [:]
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()
def responseContent = new JsonSlurper().parse(entity.content)
result.status = statusCode
result.content = responseContent
result as Map<String, Object>
} catch (Exception e) {
e.printStackTrace()
return null
}
}

private Map<String, Object> sendGetRequest(String url, String contentType) {
HttpClient httpClient = HttpClientBuilder.create().build()
def result = [:]
try {
HttpGet httpGet = new HttpGet(url)
httpGet.addHeader("Content-Type", contentType)

HttpResponse response = httpClient.execute(httpGet)
HttpEntity entity = response.getEntity()

int statusCode = response.getStatusLine().getStatusCode()
def responseContent = new JsonSlurper().parse(entity.content)
result.status = statusCode
result.content = responseContent
result as Map<String, Object>
} catch (Exception e) {
e.printStackTrace()
return null
}
}
}

0 comments on commit 0007151

Please sign in to comment.