Skip to content

Commit 681b07b

Browse files
Fix failed builds not appearing on the API (#9)
* Fix failed builds not appearing on papyrus * better sql queries
1 parent 4886c07 commit 681b07b

File tree

7 files changed

+48
-15
lines changed

7 files changed

+48
-15
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,7 @@ out/
3838

3939
### VS Code ###
4040
.vscode/
41+
42+
43+
### Java ###
44+
*.jar

src/main/java/org/purpurmc/papyrus/controller/v2/BuildController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public BuildResponse getBuild(@PathVariable("project") String projectName, @Path
6464
Version version = versionRepository.findByProjectAndName(project, versionName).orElseThrow(VersionNotFound::new);
6565
Build build = (buildName.equals("latest")
6666
? buildRepository.findLatestByVersionAndFileNotNull(version)
67-
: buildRepository.findByVersionAndNameAndFileNotNull(version, buildName)
67+
: buildRepository.findByVersionAndNameAndReady(version, buildName)
6868
).orElseThrow(BuildNotFound::new);
6969
List<Commit> commits = commitRepository.findAllByBuild(build);
7070

src/main/java/org/purpurmc/papyrus/controller/v2/CreationController.java

+16-5
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,20 @@ public CreateBuild createBuild(@RequestHeader(HttpHeaders.AUTHORIZATION) String
9696
version = versionRepository.save(new Version(project, body.version));
9797
}
9898

99-
Build build = buildRepository.save(new Build(version, body.build, body.result, body.timestamp, body.duration));
99+
int ready = 0;
100+
if (body.result != Build.BuildResult.SUCCESS) {
101+
ready = 1;
102+
}
103+
104+
Build build = buildRepository.save(new Build(version, body.build, body.result, body.timestamp, body.duration, ready));
100105
if (body.commits != null) {
101106
commitRepository.saveAll(body.commits.stream().map(commit -> new Commit(build, commit.author, commit.email, commit.description, commit.hash, commit.timestamp)).toList());
102107
}
103108

109+
if (ready == 1) {
110+
return new CreateBuild(null);
111+
}
112+
104113
CreationState id = creationStateRepository.save(new CreationState(build, body.fileExtension));
105114
return new CreateBuild(id.getId().toString());
106115
}
@@ -134,10 +143,6 @@ public ResponseEntity<String> uploadFile(@RequestHeader(HttpHeaders.AUTHORIZATIO
134143
throw new FileUploadError();
135144
}
136145

137-
Build build = state.getBuild();
138-
build.setHash(DigestUtils.md5DigestAsHex(bytes));
139-
buildRepository.save(build);
140-
141146
String contentType;
142147
try {
143148
Path tempFile = Files.createTempFile("papyrus", state.getId().toString());
@@ -148,6 +153,8 @@ public ResponseEntity<String> uploadFile(@RequestHeader(HttpHeaders.AUTHORIZATIO
148153
throw new FileUploadError();
149154
}
150155

156+
Build build = state.getBuild();
157+
151158
File file = fileRepository.save(new File(build, contentType, state.getFileExtension()));
152159
try {
153160
Path path = Path.of(configuration.getFileStorage(), file.getId().toString());
@@ -156,6 +163,10 @@ public ResponseEntity<String> uploadFile(@RequestHeader(HttpHeaders.AUTHORIZATIO
156163
throw new FileUploadError();
157164
}
158165

166+
build.setHash(DigestUtils.md5DigestAsHex(bytes));
167+
build.setReady(1);
168+
buildRepository.save(build);
169+
159170
creationStateRepository.delete(state);
160171
return ResponseEntity.ok("");
161172
}

src/main/java/org/purpurmc/papyrus/controller/v2/VersionController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public VersionController(ProjectRepository projectRepository, VersionRepository
4646
public ResponseEntity<?> getVersion(@PathVariable("project") String projectName, @PathVariable("version") String versionName, @RequestParam(value = "detailed", required = false) String detailed) {
4747
Project project = projectRepository.findByName(projectName).orElseThrow(ProjectNotFound::new);
4848
Version version = versionRepository.findByProjectAndName(project, versionName).orElseThrow(VersionNotFound::new);
49-
List<Build> builds = buildRepository.findAllByVersionAndFileNotNullOrderByTimestampAsc(version);
49+
List<Build> builds = buildRepository.findAllByVersionAndReadyOrderByTimestampAsc(version);
5050
Optional<Build> latest = buildRepository.findLatestByVersionAndFileNotNull(version);
5151

5252
if (detailed != null) {

src/main/java/org/purpurmc/papyrus/db/entity/Build.java

+15-3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ public class Build {
4040
@Nullable
4141
private String hash;
4242

43+
@Nonnull
44+
private int ready;
45+
4346
@Nonnull
4447
@ManyToOne
4548
@JoinColumn(name = "VERSION_ID", referencedColumnName = "ID")
@@ -52,17 +55,18 @@ public class Build {
5255
public Build() {
5356
}
5457

55-
public Build(Version version, String name, BuildResult result, Long timestamp, Long duration) {
56-
this(version, name, result, timestamp, duration, null);
58+
public Build(Version version, String name, BuildResult result, Long timestamp, Long duration, int ready) {
59+
this(version, name, result, timestamp, duration, null, ready);
5760
}
5861

59-
public Build(Version version, String name, BuildResult result, Long timestamp, Long duration, String hash) {
62+
public Build(Version version, String name, BuildResult result, Long timestamp, Long duration, String hash, int ready) {
6063
this.version = version;
6164
this.name = name;
6265
this.result = result;
6366
this.timestamp = timestamp;
6467
this.duration = duration;
6568
this.hash = hash;
69+
this.ready = ready;
6670
}
6771

6872
public UUID getId() {
@@ -93,6 +97,14 @@ public void setHash(String hash) {
9397
this.hash = hash;
9498
}
9599

100+
public int getReady() {
101+
return this.ready;
102+
}
103+
104+
public void setReady(int ready) {
105+
this.ready = ready;
106+
}
107+
96108
public enum BuildResult {
97109
SUCCESS,
98110
FAILURE

src/main/java/org/purpurmc/papyrus/db/repository/BuildRepository.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@
1515
public interface BuildRepository extends JpaRepository<Build, UUID> {
1616
boolean existsByVersionAndName(Version version, String name);
1717

18-
Optional<Build> findByVersionAndNameAndFileNotNull(Version version, String name);
18+
@Query("SELECT b FROM Build b WHERE b.version = :version AND b.name = :name AND b.ready = 1")
19+
Optional<Build> findByVersionAndNameAndReady(@Param("version") Version version, String name);
1920

20-
List<Build> findAllByVersionAndFileNotNullOrderByTimestampAsc(Version version);
21+
@Query("SELECT b FROM Build b WHERE b.version = :version AND b.ready = 1 ORDER BY timestamp ASC")
22+
List<Build> findAllByVersionAndReadyOrderByTimestampAsc(@Param("version") Version version);
2123

22-
@Query("SELECT b FROM Build b WHERE b.result = 'SUCCESS' AND b.version = :version AND b.name = :name AND b.file IS NOT null")
23-
Optional<Build> findByVersionAndNameAndFileNotNullAndResultIsSuccess(Version version, String name);
24+
@Query("SELECT b FROM Build b WHERE b.version = :version AND b.name = :name AND b.ready = 1 AND b.result = 'SUCCESS'")
25+
Optional<Build> findByVersionAndNameAndReadyAndResultIsSuccess(@Param("version") Version version, String name);
2426

25-
@Query("SELECT b FROM Build b WHERE b.result = 'SUCCESS' AND b.version = :version AND b.file IS NOT null ORDER BY timestamp DESC LIMIT 1")
27+
@Query("SELECT b FROM Build b WHERE b.version = :version AND b.name = :name AND b.file IS NOT null AND b.ready = 1 AND b.result = 'SUCCESS'")
28+
Optional<Build> findByVersionAndNameAndFileNotNullAndResultIsSuccess(@Param("version") Version version, String name);
29+
30+
@Query("SELECT b FROM Build b WHERE b.version = :version AND b.file IS NOT null AND b.ready = 1 AND b.result = 'SUCCESS' ORDER BY timestamp DESC LIMIT 1")
2631
Optional<Build> findLatestByVersionAndFileNotNull(@Param("version") Version version);
2732
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
alter table build add column ready int not null default (1) check (ready IN (0, 1));

0 commit comments

Comments
 (0)