Skip to content

Conversation

@inv-jishnu
Copy link
Contributor

@inv-jishnu inv-jishnu commented Jun 12, 2025

Description

This PR adds a dedicated CI workflow just for the data loader CLI. The main CI.yaml file only runs check and for the data loader CLI build errors made it's way into the master branch. To avoid this, we like to run the build command for the data loader in the CI as well.

After adding and testing this workflow, it was also apparent that one of the unit tests was failing when running in certain environments. (only failing when running in the workflows) A test for a read only folder that failed with it's directory permissions. This PR also fixes this unit test to make sure the build is ok.

Based on PR comment.

Related issues and/or PRs

Please review and merge this PR after the following PR is merged.

Changes made

  • A CI workflow for data loader CLI build (created by @ypeckstadt )
  • A unit test change as the test was failing due to directory permissions not being set properly.

I have tested the CI with act in my local machine and confirmed the CI is working.

Checklist

The following is a best-effort checklist. If any items in this checklist are not applicable to this PR or are dependent on other, unmerged PRs, please still mark the checkboxes after you have read and understood each item.

  • I have commented my code, particularly in hard-to-understand areas.
  • I have updated the documentation to reflect the changes.
  • I have considered whether similar issues could occur in other products, components, or modules if this PR is for bug fixes.
  • Any remaining open issues linked to this PR are documented and up-to-date (Jira, GitHub, etc.).
  • Tests (unit, integration, etc.) have been added for the changes.
  • My changes generate no new warnings.
  • Any dependent changes in other PRs have been merged and published.

Additional notes (optional)

Release notes

Add a CI workflow for data loader CLI build

@inv-jishnu inv-jishnu self-assigned this Jun 12, 2025
@inv-jishnu inv-jishnu added the enhancement New feature or request label Jun 12, 2025
@inv-jishnu inv-jishnu marked this pull request as draft June 12, 2025 08:38
@ypeckstadt ypeckstadt changed the title Add a CI workflow for data loader CLI build Add a dedicated CI workflow for data loader CLI Jun 13, 2025
@ypeckstadt ypeckstadt marked this pull request as ready for review June 16, 2025 02:14
@ypeckstadt ypeckstadt requested review from Copilot and ypeckstadt June 16, 2025 02:14
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR introduces a dedicated CI workflow to build the Data Loader CLI and fixes a unit test issue related to directory permissions. Key changes include:

  • Adding a new workflow in .github/workflows/data-loader-ci.yaml to build the Data Loader CLI.
  • Updating the unit test in DirectoryUtilsTest.java to handle non-writable directory scenarios with a fallback for non-POSIX systems.
  • Modifying the Gradle build script to ensure the shadowJar task runs after distZip and distTar.

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
data-loader/cli/src/test/java/com/scalar/db/dataloader/cli/util/DirectoryUtilsTest.java Updated unit test to set directory permissions and skip reliably on systems that do not support POSIX.
data-loader/cli/build.gradle Added a mustRunAfter dependency to enforce task ordering for shadowJar relative to distZip and distTar.
.github/workflows/data-loader-ci.yaml New CI workflow file to build the Data Loader CLI.
Comments suppressed due to low confidence (2)

data-loader/cli/src/test/java/com/scalar/db/dataloader/cli/util/DirectoryUtilsTest.java:64

  • The fallback using toFile().setWritable(false) may not reliably enforce non-writability on all platforms, potentially leading to skipped tests. Consider documenting the known limitations for non-POSIX systems or exploring a more robust approach.
Assumptions.assumeFalse(isWritable, "Directory is still writable; skipping test.");

data-loader/cli/build.gradle:37

  • Ensure that the tasks 'distZip' and 'distTar' are consistently defined in the build configuration, as the ordering dependency here relies on their existence and proper configuration.
mustRunAfter distZip, distTar

@ypeckstadt ypeckstadt requested review from a team, Torch3333, brfrn169, feeblefakie and komamitsu and removed request for a team June 16, 2025 02:16

// Build a fat jar
shadowJar {
mustRunAfter distZip, distTar
Copy link
Contributor

Choose a reason for hiding this comment

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

Is added via other PR so can be ignored here.

- name: Cleanup Gradle cache
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

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

Can you add a newline?

Copy link
Contributor

Choose a reason for hiding this comment

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

Added

steps:
- uses: actions/checkout@v2

- name: Set version
Copy link
Contributor

Choose a reason for hiding this comment

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

I might be missing something, but why is this needed?

Also, there are some differences between the original ci.yaml's check job and this new workflow. Can you update this workflow based on the original ci.yaml? I guess it might fix the weird write permission issue.

Comment on lines 26 to 27
11
8
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is it necessary to set up both Java 8 and 11 ?

Comment on lines 29 to 37
- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
Copy link
Contributor

Choose a reason for hiding this comment

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

I may miss something, but if you don't require a custom caching logic, using the setup-gradle action is usually preferred for a grade build compared to using the action/cache action.

Suggested change
- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

Copy link
Contributor

Choose a reason for hiding this comment

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

Updated

Comment on lines 42 to 45
- name: Cleanup Gradle cache
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

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

If you follow my suggestion of using gradle/actions/setup-gradle@v4, this is not necessary.

Suggested change
- name: Cleanup Gradle cache
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties

Copy link
Contributor

Choose a reason for hiding this comment

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

Updated

Copy link
Contributor

@Torch3333 Torch3333 left a comment

Choose a reason for hiding this comment

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

LGTM, thank you!

Copy link
Collaborator

@brfrn169 brfrn169 left a comment

Choose a reason for hiding this comment

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

LGTM! Thank you!

Path readOnlyDirectory = Files.createDirectory(Paths.get(tempDir.toString(), "readOnlyDir"));
readOnlyDirectory.toFile().setWritable(false);

// Try to make it read-only using POSIX if supported
Copy link
Contributor

@komamitsu komamitsu Jun 17, 2025

Choose a reason for hiding this comment

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

Seems like the cause of the test failure is still unclear, so I think we shouldn't merge this kind of ad-hoc workaround.

I ran ./gradlew :data-loader:cli:build --no-daemon --stacktrace without this workaround with the latest data-loader-ci.yaml, but it didn't fail
https://github.com/scalar-labs/scalardb/actions/runs/15702570827/job/44240661813. I guess the updated workflow file may have resolved the issue. Can you try without this workaround again just in case?

Even if it still fails, the unit tests should be already executed in ci.yaml's check job, so I think we can skip the unit tests in data-loader-ci.yaml by using ./gradlew -x test like ./gradlew -x test :data-loader:cli:build.

Copy link
Contributor

Choose a reason for hiding this comment

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

@inv-jishnu (If you missed this)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@komamitsu san (cc @ypeckstadt ),
Sorry I missed this. You are right about the tests already executing in check job. And as I mentioned, since the test failure only occurs on my local environment with act, it might be some issue with my environment and we can ignore that.
Thank you for pointing this out.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The change above was reverted by @ypeckstadt san in this commit 6def419.

@ypeckstadt
Copy link
Contributor

@inv-jishnu I have restored the changes to the test file and please test again if you can run the action without any problems without any additional fixes this time.

If so, we can just treat this PR as the title suggests.

@inv-jishnu
Copy link
Contributor Author

@ypeckstadt

@inv-jishnu I have restored the changes to the test file and please test again if you can run the action without any problems without any additional fixes this time.

If so, we can just treat this PR as the title suggests.

I have tested with act in local (there was issues in using v4 with act, so I had to change it to v3) and the CI failed with reverted test changes with the same issue as before. When I updated the test, with the fix and re ran it, the CI workflow was completed successfully. So we need to add the fix for unit test.

@komamitsu
Copy link
Contributor

the CI failed with reverted test changes with the same issue as before.

@inv-jishnu It looks like the CI finished successfully
https://github.com/scalar-labs/scalardb/actions/runs/15703462548 to me. But... I'm seeing a wrong result?

@inv-jishnu
Copy link
Contributor Author

inv-jishnu commented Jun 17, 2025

the CI failed with reverted test changes with the same issue as before.

@inv-jishnu It looks like the CI finished successfully https://github.com/scalar-labs/scalardb/actions/runs/15703462548 to me. But... I'm seeing a wrong result?

@komamitsu san,

I tested the workflow in my local environment with act. There may be some issue with act or with some configuration set in my local environment. The issue I faced can be ignored as it is working as expected in the actual workflow run.

I have added a snippet from log for reference.

| > Task :data-loader:cli:test
| 
| ExportCommandTest > call_withInvalidScalarDBConfigurationFile_shouldReturnOne() STANDARD_ERROR
|     [Test worker] ERROR com.scalar.db.dataloader.cli.command.dataexport.ExportCommand - The ScalarDB connection settings file path is invalid or the file is missing: /home/jishnuj/SCALAR/DB/test/scalardb/data-loader/c
li
| ImportCommandTest > call_WithoutValidConfigFile_ShouldThrowException() STANDARD_ERROR
|     [Test worker] INFO com.datastax.driver.core - DataStax Java driver 3.11.5 for Apache Cassandra
|     [Test worker] INFO com.datastax.driver.core.GuavaCompatibility - Detected Guava >= 19 in the classpath, using modern compatibility layer
| 
| DirectoryUtilsTest > validateOrCreateTargetDirectory_DirectoryNotWritable_ThrowsException() FAILED
|     org.opentest4j.AssertionFailedError at DirectoryUtilsTest.java:49
| 
| 47 tests completed, 1 failed
| 
| > Task :data-loader:cli:test FAILED
| 
| FAILURE: Build failed with an exception.
| 
| * What went wrong:
| Execution failed for task ':data-loader:cli:test'.
| > There were failing tests. See the report at: file:///home/jishnuj/SCALAR/DB/test/scalardb/data-loader/cli/build/reports/tests/test/index.html
| 
| * Try:
| > Run with --scan to get full insights.
| 
| * Exception is:
| org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':data-loader:cli:test'.
|         at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130)
|         at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
|         at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:128)
|         at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)
|         at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
|         at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
|         at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
|         at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
|         at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|         at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
|         at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
|         at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
|         at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
|         at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
|         at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|         at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
| Caused by: org.gradle.api.internal.exceptions.MarkedVerificationException: There were failing tests. See the report at: file:///home/jishnuj/SCALAR/DB/test/scalardb/data-loader/cli/build/reports/tests/test/index.html
|         at org.gradle.api.tasks.testing.AbstractTestTask.handleTestFailures(AbstractTestTask.java:691)
|         at org.gradle.api.tasks.testing.AbstractTestTask.handleCollectedResults(AbstractTestTask.java:533)
|         at org.gradle.api.tasks.testing.AbstractTestTask.executeTests(AbstractTestTask.java:528)
|         at org.gradle.api.tasks.testing.Test.executeTests(Test.java:715)
|         at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
|         at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
|         at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
|         at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
|         at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:244)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
|         at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
|         at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:229)
|         at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:212)
|         at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:195)
|         at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:162)
|         at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:105)
|         at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44)
|         at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:59)
|         at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:56)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|         at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
|         at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:56)
|         at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
|         at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
|         at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
|         at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
|         at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:50)
|         at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:28)
|         at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:67)
|         at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:37)
|         at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:61)
|         at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:26)
|         at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:67)
|         at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:45)
|         at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:40)
|         at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:29)
|         at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:189)
|         at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
|         at org.gradle.internal.Either$Right.fold(Either.java:175)
|         at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:62)
|         at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
|         at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
|         at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:46)
|         at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:35)
|         at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:76)
|         at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:54)
|         at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
|         at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
|         at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
|         at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
|         at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:49)
|         at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:27)
|         at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:71)
|         at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:39)
|         at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:65)
|         at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:36)
|         at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:106)
|         at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:55)
|         at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:64)
|         at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:43)
|         at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.executeWithNonEmptySources(AbstractSkipEmptyWorkStep.java:125)
|         at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:61)
|         at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:36)
|         at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
|         at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36)
|         at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23)
|         at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:75)
|         at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:41)
|         at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.lambda$execute$0(AssignMutableWorkspaceStep.java:35)
|         at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:289)
|         at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:31)
|         at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:22)
|         at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:40)
|         at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:23)
|         at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.lambda$execute$2(ExecuteWorkBuildOperationFiringStep.java:67)
|         at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:67)
|         at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:39)
|         at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:46)
|         at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:34)
|         at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:48)
|         at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:35)
|         at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:61)
|         at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:127)
|         at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)
|         at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
|         at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
|         at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
|         at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
|         at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|         at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|         at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
|         at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
|         at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
|         at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
|         at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
|         at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
|         at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
|         at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|         at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
| 
| 
| Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
| 
| You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
| 
| For more on this, please refer to https://docs.gradle.org/8.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
| 
| BUILD FAILED in 4m 4s
| 28 actionable tasks: 28 executed
| 
| 
| 
| 
| 
[CI for Data Loader CLI/Build Data Loader CLI]   ❌  Failure - Main Gradle Data Loader CLI build [4m4.922739208s]
[CI for Data Loader CLI/Build Data Loader CLI] exitcode '1': failure
[CI for Data Loader CLI/Build Data Loader CLI] ⭐ Run Post Setup Gradle
[CI for Data Loader CLI/Build Data Loader CLI]   🐳  docker exec cmd=[/usr/local/bin/node /var/run/act/actions/gradle-actions-setup-gradle@v3/dist/setup-gradle/post/index.js] user= workdir=
| In post-action step
| Cache is read-only: will not save state for use in subsequent builds.
| Generating Job Summary
| Completed post-action step
[CI for Data Loader CLI/Build Data Loader CLI]   ✅  Success - Post Setup Gradle [1.000045115s]
[CI for Data Loader CLI/Build Data Loader CLI] ⭐ Run Post Set up JDK 8
[CI for Data Loader CLI/Build Data Loader CLI]   🐳  docker exec cmd=[/usr/local/bin/node /var/run/act/actions/actions-setup-java@v3/dist/cleanup/index.js] user= workdir=
[CI for Data Loader CLI/Build Data Loader CLI]   ✅  Success - Post Set up JDK 8 [648.557773ms]
[CI for Data Loader CLI/Build Data Loader CLI] ⭐ Run Complete job
[CI for Data Loader CLI/Build Data Loader CLI]   ✅  Success - Complete job
[CI for Data Loader CLI/Build Data Loader CLI]

@inv-jishnu inv-jishnu requested a review from komamitsu June 17, 2025 13:32
Copy link
Contributor

@komamitsu komamitsu left a comment

Choose a reason for hiding this comment

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

LGTM! 👍

Copy link
Contributor

@feeblefakie feeblefakie left a comment

Choose a reason for hiding this comment

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

LGTM! Thank you!

Copy link
Contributor

@ypeckstadt ypeckstadt left a comment

Choose a reason for hiding this comment

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

LGTM. Thank you.

@brfrn169 brfrn169 merged commit 2dc4608 into master Jun 18, 2025
107 of 108 checks passed
@brfrn169 brfrn169 deleted the data-loader/add-ci-for-build branch June 18, 2025 10:25
feeblefakie pushed a commit that referenced this pull request Jun 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants