sbt, the interactive build tool
Go to file
Idan Ben-Zvi 09c76127a3
[2.x] fix: fall back to the onsite task when cache fails (#8890)
**Problem**
When the remote cache server (e.g. bazel-remote using S3 for storage) reports an AC (Action Cache)
hit but the underlying CAS (Content Addressable Storage) blob is missing or
corrupt, ActionCache.cache propagates the resulting exception (typically
java.io.FileNotFoundException) directly to the SBT task engine process with no interception of the propogated error.
This causes a build failure instead of a graceful cache miss.

The three unguarded call sites are:
1. organicTask - syncBlobs after a successful put only caught NoSuchFileException,
   missing FileNotFoundException and other IO errors.
2. getWithFailure / readFromSymlink fast-path - syncBlobs inside flatMap with no
   exception handling.
3. getWithFailure main branch - both syncBlobs calls and the subsequent IO.read
   were completely unguarded.

**Solution**
Guard all three call sites with NonFatal catches:
- Cache read failures (getWithFailure) return Left(None) which the caller
  interprets as a cache miss, triggering organic recomputation.
- Cache write failures (organicTask) are demoted to a debug-level log; the task
  result that was already computed is returned successfully.

Two regression tests are added to ActionCacheTest:
1. Tests the main getWithFailure branch using the default relative-path converter.
2. Tests the readFromSymlink fast-path using an absolute-path converter so the
   symlink created on the first run is found by Files.isSymbolicLink on the second.
2026-03-11 01:34:01 -04:00
.github [2.x] refactor: Extract lm-ivy to separate sbt-ivy plugin module (#8873) 2026-03-10 23:30:06 -04:00
buildfile/src [2.x] fix: support comma-separated imports in build.sbt (#8829) 2026-02-28 19:12:38 -05:00
client Revert "[2.x] feat: Enable musl static linking for sbtn on JDK 17+ (#8464)" (#8557) 2026-01-16 00:06:28 -05:00
contributing-docs [2.x] fix: Fix spelling typos in contributing docs (#8835) 2026-02-28 23:51:01 -05:00
core-macros/src [2.x] fix: Reject java.io.File as cached task output type (#8766) 2026-02-21 01:35:46 -05:00
internal [2.x] refactor: Delete silent annotation (#8893) 2026-03-10 13:39:02 -04:00
launch [2.x] feat: repositories_force support (#8761) 2026-02-20 01:52:59 -05:00
launcher-package [2.x] Improve -help/--help and fix launcher test harness (#8879) 2026-03-09 23:11:05 -04:00
licenses move remaining pieces of sbt subproject to sbt_pending and fix notices 2010-09-21 21:55:50 -04:00
lm-core [2.x] refactor: Extract lm-ivy to separate sbt-ivy plugin module (#8873) 2026-03-10 23:30:06 -04:00
lm-coursier [2.x] fix: Populate explicitArtifacts from classifier in UpdateReport (#8874) 2026-03-04 16:22:48 -05:00
lm-ivy/src Use given instead of implicit val (#8870) 2026-03-03 23:17:28 -05:00
main [2.x] fix: Handle scala/toolkit.local when passed as argument to sbt new (#8887) 2026-03-10 23:46:51 -04:00
main-actions/src [2.x] fix: Fixes explicitlySpecified and selectors for testOnly (#8727) 2026-02-13 09:19:05 -08:00
main-command/src [2.x] ci: Update java file formatter plugin (#8892) 2026-03-10 11:19:48 -04:00
main-settings/src [2.x] fix: Fixes plugin toggle precedence between disablePlugins and enablePlugins (#8794) 2026-02-23 00:11:57 -05:00
notes Spelling (#8028) 2025-02-04 01:11:28 -05:00
project [2.x] ci: Update java file formatter plugin (#8892) 2026-03-10 11:19:48 -04:00
protocol/src [2.x] feat: sbtn subscription level (#8796) 2026-02-24 21:46:37 -05:00
run [2.x] fix: Fixes double quotes handling in fork mode (#8765) 2026-02-24 23:22:48 -05:00
sbt-app/src [2.x] fix: Handle scala/toolkit.local when passed as argument to sbt new (#8887) 2026-03-10 23:46:51 -04:00
sbt-ivy/src/main/scala/sbt [2.x] refactor: Extract lm-ivy to separate sbt-ivy plugin module (#8873) 2026-03-10 23:30:06 -04:00
sbt-remote-cache/src/main/scala/sbt remove unnecessary `case` 2025-02-22 08:48:29 +09:00
sbtw [2.x] perf: short-circuit --version from build.properties (#8822) 2026-02-27 12:02:17 -05:00
scripted-sbt [2.x] Add project id to Zinc debug log (#8750) 2026-02-24 21:55:39 -05:00
scripts Fix lm-coursier scripted 2024-10-11 14:30:55 +02:00
server-test/src [2.x] feat: sbtn subscription level (#8796) 2026-02-24 21:46:37 -05:00
src [2.x] Add scripted test for #7838 (#8541) 2026-01-20 12:13:27 -05:00
tasks Use enum instead of scala.Enumeration in sbt.Execute.State (#8788) 2026-02-22 22:21:29 -05:00
tasks-standard Use SAM-conversion if possible (#8477) 2026-01-11 07:21:28 -05:00
testing [2.x] fix: Fixes testing EventHandler race condition 2026-02-09 10:55:06 -05:00
util-cache [2.x] fix: fall back to the onsite task when cache fails (#8890) 2026-03-11 01:34:01 -04:00
util-collection Use given instead of implicit val (#8870) 2026-03-03 23:17:28 -05:00
util-tracking [2.x] test: Migrate TrackedSpec.scala to verify.BasicTestSuite (#8547) 2026-01-15 22:51:29 -05:00
worker/src [2.x] ci: Update java file formatter plugin (#8892) 2026-03-10 11:19:48 -04:00
zinc-lm-integration/src [2.x] ci: Update java file formatter plugin (#8892) 2026-03-10 11:19:48 -04:00
.git-blame-ignore-revs [2.x] blame ignore commits (#8814) 2026-02-25 10:51:21 -05:00
.gitattributes Fix line endings in msi 2021-11-19 20:41:39 -05:00
.gitignore [2.x] fix : BSP compile returns StatusCode.Error on failure (#8104) (#8709) 2026-02-07 11:01:49 -05:00
.gitmodules Move metadata to lm-coursier/metadata 2024-10-09 09:44:42 +02:00
.java-version Scala 3.8.0 2026-01-24 04:52:28 -05:00
.jvmopts Add .jvmopts 2023-11-25 01:06:30 -05:00
.mailmap Add mailmap 2019-06-11 09:30:14 +02:00
.sbtopts Restore .sbtopts file 2020-11-19 12:42:26 -08:00
.scala-steward.conf Pin slf4j-api 2023-01-02 22:06:46 -05:00
.scalafmt.conf update scalafmt config. re-format build files 2025-09-23 10:28:38 +09:00
AGENTS.md [2.x] fix: Fix spelling and link in AGENTS docs (#8837) 2026-03-01 00:25:09 -05:00
CONTRIBUTING.md [2.x] fix: Fix typo in CONTRIBUTING guide 2026-02-28 20:44:19 -06:00
LICENSE add LICENSE file 2023-06-25 09:53:06 +09:00
NOTICE Transfer copyright to Scala Center 2023-06-20 16:39:07 +02:00
PROFILING.md docs: Update flamegraph guide --lines 2025-11-09 18:06:13 -05:00
README.md [2.x] docs: Move to CONTRIBUTING (#8629) 2026-01-25 15:48:09 -05:00
SUPPORT.md Transfer copyright to Scala Center 2023-06-20 16:39:07 +02:00
build.sbt [2.x] refactor: Extract lm-ivy to separate sbt-ivy plugin module (#8873) 2026-03-10 23:30:06 -04:00
sbt [2.x] Improve -help/--help and fix launcher test harness (#8879) 2026-03-09 23:11:05 -04:00
sbt-allsources.sh Merge remote-tracking branch 'lm/wip/sbt-2.x' into 2.x-lm-coursier 2024-10-09 08:50:03 +02:00
sbt.sh Implement sbt-launch.jar download 2021-04-19 23:43:15 -04:00
server.md setting query is "sbt/setting" 2017-10-03 01:45:06 -04:00

README.md

CI Latest version Discord

sbt

sbt is a build tool for Scala, Java, and more.

For general documentation, see https://www.scala-sbt.org/.

sbt 2.x

This is the 2.x series of sbt. The source code of sbt is split across several GitHub repositories, including this one.

  • sbt/io hosts sbt.io module.
  • sbt/zinc hosts Zinc, an incremental compiler for Scala.
  • sbt/sbt, this repository hosts modules that implement the build tool.
  • Setup: Describes getting started with the latest binary release.
  • FAQ: Explains how to get help and more.
  • sbt/sbt-zero-seven: hosts sbt 0.7.7 and earlier versions

Issues and Pull Requests

Please read CONTRIBUTING carefully before opening a GitHub Issue or a pull request.

If you're looking for an idea for a contribution, issues labeled with good first issue or help wanted might be good starting points.

If you would like to ask questions about sbt, there's sbt channel on Scala Discord, but it would be good to gather questions on Stackoverflow.

license

See LICENSE.