Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
8b2d473
feat: Github metadata ์ •๋ณด๋ฅผ ext์— ์ €์žฅํ•˜๋Š” gradle task
can019 Oct 5, 2024
7f946fe
refactor: JunitReport copy task๋ฅผ aggregateJunitTestReports๋กœ ๋ณ€๊ฒฝ
can019 Oct 5, 2024
54c0282
chore: Copy junit reports -> aggregate junit reports๋ฅผ workflow์— ์ ์šฉ
can019 Oct 5, 2024
5226aae
fix: Reports upload์‹œ configuration-cache ์ œ์™ธ
can019 Oct 5, 2024
dcb74a2
chore: Collect test reports ํ›„ dir ํ™•์ธํ•˜๋Š” ์ž„์‹œ ์ฝ”๋“œ ci์— ์ ์šฉ
can019 Oct 5, 2024
6ff791e
refactor: Collect test report๋ฅผ test ์ด ํ›„ ๋ฐ”๋กœ ์ง„ํ–‰
can019 Oct 5, 2024
0503ef7
chore: Aggregate xml, html task๋ฅผ ๊ฐ๊ฐ ์‹คํ–‰
can019 Oct 5, 2024
9e7aab7
fix: Xml report aggregate ์‹œ NO-SOURCE๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์กฐ์ •
can019 Oct 5, 2024
80a4af6
chore: Xml report test๋งŒ ์ž„์‹œ๋กœ ๋ช…์‹œํ•˜์—ฌ workflow์—์„œ ์‹คํ–‰
can019 Oct 5, 2024
d1ad311
chore: Debug aggregateReport workflow
can019 Oct 5, 2024
3646daa
chore: Aggregate junit report์— configure cache ์ œ๊ฑฐ
can019 Oct 5, 2024
7fc2876
test: XmlReport๊ฐ€ htmlReport๋ณด๋‹ค ๋Šฆ๊ฒŒ ์‹คํ–‰๋˜๊ฒŒ test
can019 Oct 5, 2024
be61bbe
refactor: AggregateJunitXmlReport๋ฅผ copy task๋กœ ๋ณ€๊ฒฝ
can019 Oct 5, 2024
ebbff76
fix: Junit xml report aggregation์ด html aggregation๋ณด๋‹ค ๋จผ์ € ์ž‘๋™ํ•˜๋„๋ก ๋ช…์‹œ
can019 Oct 5, 2024
0533e76
fix: ์ž„์‹œ๋กœ aggregateJunitXmlReport๊ฐ€ ๊ฐ•์ œ๋กœ ์ˆ˜ํ–‰๋˜๋„๋ก ์„ค์ •
can019 Oct 5, 2024
0522aa9
chore: Junit xml, html aggregate task๋ฅผ ๊ฐ๊ฐ ์‹คํ–‰ํ•˜๋„๋ก ํ•จ
can019 Oct 5, 2024
c093d20
chore: buildSrc gradle์— lombok, java version ์ถ”๊ฐ€
can019 Oct 10, 2024
cba1e76
chore: Github pages configure structure ์ •์˜
can019 Oct 11, 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
22 changes: 13 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,22 @@ jobs:
cache-read-only: false
cache-encryption-key: ${{ secrets.GradleEncryptionKey }}

- name: Test gradle buildSrc srcipts
run: gradle :buildSrc:test --configuration-cache --info

- name: Build
run: gradle build -x check --configuration-cache --info

- name: Test
run: gradle test --configuration-cache --info
continue-on-error: true

- name: Collect test reports
run: |
gradle aggregateJunitHtmlReports
gradle aggregateJunitXmlReports
ls build/reports/tests

- name: Generate jacoco report
run: gradle testCodeCoverageReport -x check --info --configuration-cache

Expand All @@ -57,19 +66,14 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

- name: Collect test reports
run: |
gradle copyJunitHtmlResults --configuration-cache
gradle copyJunitXmlResults --configuration-cache

- name: Save test reports
uses: actions/upload-artifact@v4
with:
name: reports
path: |
build/reports
build/test-results
build/api-spec
!build/reports/configuration-cache
build/docs
support/jacoco/reports

Expand Down Expand Up @@ -102,19 +106,19 @@ jobs:
- name: publish core test results
uses: EnricoMi/publish-unit-test-result-action@v2
with:
files: './build/test-results/core/TEST-*.xml'
files: './build/reports/tests/xml/core-*.xml'
check_name: 'Core'

- name: publish api test results
uses: EnricoMi/publish-unit-test-result-action@v2
with:
files: './build/test-results/api/TEST-*.xml'
files: './build/reports/tests/xml/api-*.xml'
check_name: 'Api'

- name: publish admin test results
uses: EnricoMi/publish-unit-test-result-action@v2
with:
files: './build/test-results/admin/TEST-*.xml'
files: './build/reports/tests/xml/admin-*.xml'
check_name: 'Admin'

set-github-pages-resource:
Expand Down
62 changes: 34 additions & 28 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ plugins {
id 'org.sonarqube'
id "org.asciidoctor.jvm.convert"
id 'com.epages.restdocs-api-spec'
id 'com.github.can019.base.github-pages'
}

//apply from: 'gradle/jacoco.gradle'
Expand Down Expand Up @@ -145,7 +146,6 @@ subprojects {
property 'sonar.java.binaries', "${buildDir}/classes"
}
}

}

sonar {
Expand All @@ -162,49 +162,55 @@ sonar {
}
}

tasks.register('copyJunitXmlResults', Copy) {
tasks.register('copyOpenApi3Results',Copy) {
subprojects.each { subproject ->
def xmlTestResultsDir = file("${subproject.buildDir}/test-results/test")
def openApi3ResultsDir = file("${subproject.buildDir}/api-spec/")

if (xmlTestResultsDir.exists()) {
from(xmlTestResultsDir) {
if (openApi3ResultsDir.exists()) {
from(openApi3ResultsDir) {
into "${subproject.name}"
}
} else {
logger.info("No test result xml in submodule [${subproject.name}]")
logger.info("No openapi3 file in submodule [${subproject.name}]")
}
}
into "$buildDir/test-results" // ๋ณ‘ํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ์œ„์น˜
into "$buildDir/api-spec" // ๋ณ‘ํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ• 
}
tasks.register('aggregateJunitHtmlReports', TestReport){
destinationDirectory = file("$buildDir/reports/tests")
reportOn subprojects*.test
}

tasks.register('copyJunitHtmlResults', Copy) {
subprojects.each { subproject ->
def htmlTestResultsDir = file("${subproject.buildDir}/reports/tests")
tasks.register('aggregateJunitXmlReports', Copy){
onlyIf { true }
def xmlReportDir = file("$buildDir/reports/tests/xml")
xmlReportDir.mkdirs()

if (htmlTestResultsDir.exists()) {
from(htmlTestResultsDir) {
into "${subproject.name}"
subprojects.each { subproject ->
def testResultDir = subproject.file("${subproject.buildDir}/test-results/test")

if (testResultDir.exists()) {
copy {
from subproject.test.reports.junitXml.outputLocation
into xmlReportDir
include "**/*.xml"
// Rename files to avoid conflicts
rename { String fileName ->
def projectPath = subproject.path.substring(1).replace(':', '-')
"${projectPath}-${fileName}"
}
}
} else {
logger.info("No test result xml in submodule [${subproject.name}]")
logger.lifecycle("Skipping ${subproject.path}: No test results found.")
}
}
into "$buildDir/reports/submodule/tests" // ๋ณ‘ํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ์œ„์น˜
}

tasks.register('copyOpenApi3Results',Copy) {
subprojects.each { subproject ->
def openApi3ResultsDir = file("${subproject.buildDir}/api-spec/")

if (openApi3ResultsDir.exists()) {
from(openApi3ResultsDir) {
into "${subproject.name}"
}
} else {
logger.info("No openapi3 file in submodule [${subproject.name}]")
}
}
into "$buildDir/api-spec" // ๋ณ‘ํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ• 
tasks.register('aggregateJunitTestReports', TestReport) {
// aggregateJunitXmlReports๊ฐ€ ๊ณ„์† no source๋กœ ๋จ
aggregateJunitXmlReports.mustRunAfter(aggregateJunitHtmlReports)
dependsOn(aggregateJunitHtmlReports)
dependsOn(aggregateJunitXmlReports)
}

bootJar.enabled = false
38 changes: 38 additions & 0 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
plugins {
id 'java'
id 'java-gradle-plugin'
}

group = 'com.github.can019.base'
version = '0.3.0-SNAPSHOT'

repositories {
mavenCentral()
}

java{
sourceCompatibility = '21'
}

dependencies {
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
implementation 'net.datafaker:datafaker:2.3.1'
testImplementation "org.assertj:assertj-core:3.26.3"

compileOnly 'org.projectlombok:lombok:1.18.32'
annotationProcessor 'org.projectlombok:lombok:1.18.32'
}

gradlePlugin {
plugins {
githubPagesPlugin {
id = 'com.github.can019.base.github-pages'
implementationClass = 'com.github.can019.base.gradle.github.GitHubPagesPlugin'
}
}
}

test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.github.can019.base.gradle.github;

import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;

public class GitHubPageResourceGeneratorTask extends DefaultTask {

public GitHubPageResourceGeneratorTask() {
setDescription("Generates all resources for GitHub Pages");
setGroup("GitHub Pages");

// ์˜์กด์„ฑ ์„ค์ •
dependsOn("registerGitHubMetadata");
}

@TaskAction
public void generateResources() {
getLogger().lifecycle("Generating all resources for GitHub Pages...");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.github.can019.base.gradle.github;

import org.gradle.api.Plugin;
import org.gradle.api.Project;

public class GitHubPagesPlugin implements Plugin<Project>{
@Override
public void apply(Project target) {
target.getTasks().register("generateGitHubPageResources", GitHubPageResourceGeneratorTask.class);
target.getTasks().register("registerGitHubMetadata", RegisterGitHubMetadataTask.class);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.github.can019.base.gradle.github;

import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.tasks.TaskAction;

public class RegisterGitHubMetadataTask extends DefaultTask{
@TaskAction
public void registerMetadata() {
String commitId = (String) getProject().findProperty("commitId");
String releaseVersion = (String) getProject().findProperty("releaseVersion");

if (commitId == null || releaseVersion == null) {
throw new GradleException("Commit id ๋˜๋Š” release version์ด ์—†์Šต๋‹ˆ๋‹ค");
}

getProject().getExtensions().getExtraProperties().set("commitId", commitId);
getProject().getExtensions().getExtraProperties().set("releaseVersion", releaseVersion);

getLogger().lifecycle("Commit id stored: " + commitId);
getLogger().lifecycle("Release version stored: " + releaseVersion);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.github.can019.base.gradle.github.configure;

import lombok.Getter;

@Getter
public class GitHubPageConfigure {
private MetaData metaData;
private GithubPageFileTree githubPageFileTree;
}

@Getter
class MetaData {
private String releaseVersion;
private String commitId;
}

class GithubPageFileTree{
private String markUpFileName;
private String rootDirPath;

public String getRootMarkUpFilePath() {
return String.join("/", rootDirPath, markUpFileName);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.github.can019.base.gradle.github.structure;

public interface FileTree {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.github.can019.base.gradle.github;

import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.testfixtures.ProjectBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import net.datafaker.Faker;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

class RegisterGitHubMetadataTaskTest {
private Project project;
private RegisterGitHubMetadataTask task;

private Faker faker = new Faker();

@BeforeEach
public void setUp() {
project = ProjectBuilder.builder().build();

project.getExtensions().getExtraProperties().set("commitId", null);
project.getExtensions().getExtraProperties().set("releaseVersion", null);

task = project.getTasks().create("registerGitHubMetadata", RegisterGitHubMetadataTask.class);
}

@Test
@DisplayName("Commit id์™€ release version์ด ์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์•ผ ํ•œ๋‹ค")
public void testRegisterMetadata() {
String commitId = faker.code().ean8();
project.getExtensions().getExtraProperties().set("commitId", commitId);

String releaseVersion = faker.app().version();
project.getExtensions().getExtraProperties().set("releaseVersion", releaseVersion);

task.registerMetadata();

System.out.println(commitId);
System.out.println(releaseVersion);


assertThat(commitId).isEqualTo( project.getExtensions().getExtraProperties().get("commitId"));
assertThat(releaseVersion).isEqualTo(project.getExtensions().getExtraProperties().get("releaseVersion"));
}

@Test
@DisplayName("Commit id๊ฐ€ null์ธ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•œ๋‹ค")
public void testRegisterMetadataWithoutCommitId() {
String releaseVersion = faker.app().version();
project.getExtensions().getExtraProperties().set("releaseVersion", releaseVersion);

project.getExtensions().getExtraProperties().set("commitId", null);

assertThatThrownBy(()-> task.registerMetadata())
.isInstanceOf(GradleException.class)
.hasMessage("Commit id ๋˜๋Š” release version์ด ์—†์Šต๋‹ˆ๋‹ค");
}

@Test
@DisplayName("Release version์ด null์ธ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•œ๋‹ค")
public void testRegisterMetadataWithoutReleaseVersion() {
String commitId = faker.code().ean8();
project.getExtensions().getExtraProperties().set("commitId", commitId);
project.getExtensions().getExtraProperties().set("releaseVersion", null);

assertThatThrownBy(()-> task.registerMetadata())
.isInstanceOf(GradleException.class)
.hasMessage("Commit id ๋˜๋Š” release version์ด ์—†์Šต๋‹ˆ๋‹ค");
}
}