Skip to content

Commit 720d188

Browse files
committed
trigger build and put to queue status
1 parent 6c6494e commit 720d188

File tree

10 files changed

+142
-10
lines changed

10 files changed

+142
-10
lines changed
Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ services:
55
db:
66
image: postgres:17
77
restart: always
8-
container_name: flowci_local_db
98
shm_size: 128mb
109
ports:
1110
- "5432:5432"
@@ -14,20 +13,19 @@ services:
1413
POSTGRES_PASSWORD: flowci
1514
POSTGRES_DB: flowci_db
1615

16+
rabbitmq:
17+
image: rabbitmq:3-management
18+
ports:
19+
- "5672:5672"
20+
- "15672:15672"
21+
1722
# zk:
1823
# image: zookeeper:3.6
1924
# container_name: flowci-debug-zk
2025
# restart: always
2126
# ports:
2227
# - "2181:2181"
2328
#
24-
# rabbitmq:
25-
# image: rabbitmq:3-management
26-
# container_name: flowci-debug-rabbitmq
27-
# ports:
28-
# - "5672:5672"
29-
# - "15672:15672"
30-
#
3129
# minio:
3230
# image: quay.io/minio/minio:RELEASE.2023-12-02T10-51-33Z
3331
# container_name: flowci-debug-minio

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@
8686
<artifactId>spring-boot-starter-validation</artifactId>
8787
</dependency>
8888

89+
<dependency>
90+
<groupId>org.springframework.boot</groupId>
91+
<artifactId>spring-boot-starter-amqp</artifactId>
92+
</dependency>
93+
8994
<dependency>
9095
<groupId>com.github.ben-manes.caffeine</groupId>
9196
<artifactId>caffeine</artifactId>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.flowci.common.business;
2+
3+
import com.flowci.common.model.RabbitEvent;
4+
5+
public interface PublishRabbitEvent {
6+
void invoke(RabbitEvent event);
7+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.flowci.common.business;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.flowci.common.model.RabbitEvent;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.amqp.core.Message;
8+
import org.springframework.amqp.rabbit.core.RabbitTemplate;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.stereotype.Component;
11+
12+
import static com.flowci.common.config.AmqpConfig.EXCHANGE_NAME;
13+
14+
@Slf4j
15+
@Component
16+
public class PublishRabbitEventImpl implements PublishRabbitEvent {
17+
18+
private final static Long WAIT_TIMEOUT = 5000L; // 5 seconds
19+
20+
private final RabbitTemplate rabbitTemplate;
21+
private final ObjectMapper objectMapper;
22+
23+
public PublishRabbitEventImpl(@Autowired(required = false) RabbitTemplate rabbitTemplate,
24+
ObjectMapper objectMapper) {
25+
this.rabbitTemplate = rabbitTemplate;
26+
this.objectMapper = objectMapper;
27+
}
28+
29+
@Override
30+
public void invoke(RabbitEvent event) {
31+
if (rabbitTemplate == null) {
32+
log.debug("rabbitmq is not configured");
33+
return;
34+
}
35+
36+
try {
37+
var eventJson = objectMapper.writeValueAsString(event);
38+
rabbitTemplate.send(EXCHANGE_NAME, event.getRoutingKey(), new Message(eventJson.getBytes()));
39+
40+
if (rabbitTemplate.waitForConfirms(WAIT_TIMEOUT)) {
41+
log.info("Event {} published successfully", eventJson);
42+
}
43+
} catch (JsonProcessingException e) {
44+
log.error("unable parse event to json", e);
45+
}
46+
}
47+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.flowci.common.config;
2+
3+
import org.springframework.amqp.core.*;
4+
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
5+
import org.springframework.amqp.rabbit.core.RabbitAdmin;
6+
import org.springframework.amqp.rabbit.core.RabbitTemplate;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
10+
import org.springframework.retry.support.RetryTemplateBuilder;
11+
12+
import java.time.Duration;
13+
14+
@Configuration
15+
@ConditionalOnProperty("spring.rabbitmq.host")
16+
public class AmqpConfig {
17+
18+
public final static String EXCHANGE_NAME = "flows.exchange";
19+
// public final static String BUILDS_QUEUE_NAME = "flows.builds.queue";
20+
// public final static String BUILDS_ROUTING_KEY = "builds";
21+
22+
@Bean
23+
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
24+
return new RabbitAdmin(connectionFactory);
25+
}
26+
27+
@Bean
28+
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
29+
var rabbitTemplate = new RabbitTemplate(connectionFactory);
30+
rabbitTemplate.setRetryTemplate(new RetryTemplateBuilder()
31+
.fixedBackoff(Duration.ofSeconds(2L))
32+
.maxAttempts(3)
33+
.build());
34+
return rabbitTemplate;
35+
}
36+
37+
// @Bean
38+
// public Declarables declarables() {
39+
// var exchange = new DirectExchange(EXCHANGE_NAME);
40+
// var queueForBuilds = QueueBuilder.durable(BUILDS_QUEUE_NAME)
41+
// .quorum()
42+
// .build();
43+
//
44+
// return new Declarables(
45+
// exchange,
46+
// queueForBuilds,
47+
// BindingBuilder.bind(queueForBuilds).to(exchange).with(BUILDS_ROUTING_KEY)
48+
// );
49+
// }
50+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.flowci.common.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
5+
6+
import java.io.Serializable;
7+
8+
@JsonTypeInfo(
9+
use = JsonTypeInfo.Id.CLASS,
10+
include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
11+
property = "klass",
12+
visible = true
13+
)
14+
public interface RabbitEvent extends Serializable {
15+
16+
@JsonIgnore
17+
String getRoutingKey();
18+
}
File renamed without changes.

src/main/resources/application.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ spring:
1010
import:
1111
- classpath:application-management.yaml
1212
- classpath:application-db.yaml
13-
- classpath:application-ci.yaml
13+
- classpath:application-flowci.yaml
1414

1515
server:
1616
port: ${FLOWCI_SERVER_PORT:8080}

src/test/java/com/flowci/SpringTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.flowci.flow.repo.FlowYamlRepo;
88
import lombok.Getter;
99
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
10+
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
1011
import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
1112
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
1213
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
@@ -30,7 +31,8 @@
3031
DataSourceAutoConfiguration.class,
3132
DataSourceTransactionManagerAutoConfiguration.class,
3233
HibernateJpaAutoConfiguration.class,
33-
FlywayAutoConfiguration.class
34+
FlywayAutoConfiguration.class,
35+
RabbitAutoConfiguration.class,
3436
})
3537
@Import(SpringTest.MockRepositoriesConfig.class)
3638
public abstract class SpringTest {

src/test/java/com/flowci/build/business/WaitForAgentTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,21 @@
22

33
import com.flowci.SpringTest;
44
import com.flowci.build.model.Build;
5+
import com.flowci.common.business.PublishRabbitEvent;
56
import org.junit.jupiter.api.Test;
67
import org.mockito.ArgumentCaptor;
78
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.boot.test.mock.mockito.MockBean;
810

911
import static org.assertj.core.api.Assertions.assertThat;
1012
import static org.mockito.ArgumentMatchers.anyLong;
1113
import static org.mockito.Mockito.doNothing;
1214

1315
class WaitForAgentTest extends SpringTest {
1416

17+
@MockBean
18+
private PublishRabbitEvent publishRabbitEvent;
19+
1520
@Autowired
1621
private MockRepositoriesConfig mockRepositoriesConfig;
1722

0 commit comments

Comments
 (0)