diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8d1e90bfb..57b9a4ae2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -53,7 +53,7 @@ jobs: name: "${{ matrix.env.IMAGE }}${{ matrix.env.NAME && ' • ' || ''}}${{ matrix.env.NAME }}${{ matrix.env.CATKIN_LINT && ' • catkin_lint' || ''}}${{ matrix.env.CLANG_TIDY && ' • clang-tidy' || '' }}" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: recursive @@ -80,14 +80,14 @@ jobs: subdir: target_ws/install - name: Upload test artifacts (on failure) - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 if: failure() && (steps.ici.outputs.run_target_test || steps.ici.outputs.target_test_results) with: name: test-results-${{ matrix.env.IMAGE }}${{ matrix.env.NAME && '-' || ''}}${{ matrix.env.NAME }}${{ matrix.env.CLANG_TIDY && '-clang-tidy' || '' }} path: ${{ env.BASEDIR }}/target_ws/**/test_results/**/*.xml - name: Upload clang-tidy fixes (on failure) - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 if: failure() && steps.ici.outputs.clang_tidy_checks with: name: clang-tidy-fixes.yaml @@ -122,9 +122,9 @@ jobs: image: moveit/moveit:jammy-ci steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@v6 - name: Install dependencies run: | @@ -149,7 +149,7 @@ jobs: sphinx-build -W -b linkcheck core/doc _site - name: Upload pages artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 # Deployment job deploy: diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml index 33d3a8a6e..e5ee78252 100644 --- a/.github/workflows/format.yaml +++ b/.github/workflows/format.yaml @@ -13,7 +13,7 @@ jobs: name: pre-commit runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: recursive - name: Install clang-format-14 diff --git a/.github/workflows/prerelease.yaml b/.github/workflows/prerelease.yaml index 18c6c0a13..900db7253 100644 --- a/.github/workflows/prerelease.yaml +++ b/.github/workflows/prerelease.yaml @@ -34,7 +34,7 @@ jobs: # free up a lot of stuff from /usr/local sudo rm -rf /usr/local df -h - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: recursive - name: industrial_ci diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 55effc06f..95e1c8531 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: # Standard hooks - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: check-added-large-files - id: check-case-conflict @@ -29,7 +29,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/psf/black - rev: 25.1.0 + rev: 26.3.1 hooks: - id: black args: ["--line-length", "100"] diff --git a/core/src/container.cpp b/core/src/container.cpp index fa60a2ece..4543ef059 100644 --- a/core/src/container.cpp +++ b/core/src/container.cpp @@ -327,7 +327,7 @@ void ContainerBasePrivate::liftSolution(const SolutionBasePtr& solution, const I ContainerBase::ContainerBase(ContainerBasePrivate* impl) : Stage(impl) { auto& p = properties(); - p.declare("pruning", std::string("enable pruning?")).configureInitFrom(Stage::PARENT, "pruning"); + p.declare("pruning", false, std::string("enable pruning?")).configureInitFrom(Stage::PARENT, "pruning"); } size_t ContainerBase::numChildren() const { @@ -1029,6 +1029,11 @@ bool FallbacksPrivatePropagator::nextJob() { } // When arriving here, we have a valid job_ and a current_ child to feed it. Let's do that. + if (dir_ == Interface::FORWARD) + setStatus(nullptr, nullptr, &*job_, InterfaceState::Status::ENABLED); + else + setStatus(nullptr, nullptr, &*job_, InterfaceState::Status::ENABLED); + copyState(dir_, job_, (*current_)->pimpl()->pullInterface(dir_), Interface::UpdateFlags()); return true; } diff --git a/core/src/stage.cpp b/core/src/stage.cpp index 8b37752e4..5d23dc479 100644 --- a/core/src/stage.cpp +++ b/core/src/stage.cpp @@ -820,7 +820,7 @@ void ConnectingPrivate::newState(Interface::iterator it, Interface::UpdateFlags for (Interface::iterator oit : oit_to_enable) parent_pimpl->setStatus()>(me(), &*it, &*oit, InterfaceState::Status::ENABLED); - if (!have_enabled_opposites) // prune new state and associated branch if necessary + if (!have_enabled_opposites && parent()->pruning()) // prune new state and associated branch if necessary // pass creator=nullptr to skip hasPendingOpposites() check as we did this here already parent_pimpl->setStatus(nullptr, nullptr, &*it, InterfaceState::Status::ARMED); } diff --git a/core/src/task.cpp b/core/src/task.cpp index 221bb6aca..7d654239e 100644 --- a/core/src/task.cpp +++ b/core/src/task.cpp @@ -94,7 +94,6 @@ const ContainerBase* TaskPrivate::stages() const { Task::Task(const std::string& ns, bool introspection, ContainerBase::pointer&& container) : WrapperBase(new TaskPrivate(this, ns), std::move(container)) { - setPruning(false); setTimeout(std::numeric_limits::max()); // monitor state on commandline diff --git a/core/test/test_fallback.cpp b/core/test/test_fallback.cpp index c5b7eb90b..35134d05a 100644 --- a/core/test/test_fallback.cpp +++ b/core/test/test_fallback.cpp @@ -195,3 +195,19 @@ TEST_F(FallbacksFixtureConnect, connectStageInsideFallbacks) { EXPECT_TRUE(t.plan()); EXPECT_COSTS(t.solutions(), testing::ElementsAre(11, 12, 22, 121)); } + +TEST_F(FallbacksFixtureConnect, connectInsideSerialInsideFallbacks) { + t.add(std::make_unique(PredefinedCosts({ 0.0 }))); + auto fallbacks = std::make_unique("Fallbacks"); + auto serial = std::make_unique("Serial1"); + serial->add(std::make_unique(PredefinedCosts::constant(0.0))); + serial->add(std::make_unique(PredefinedCosts::constant(1.0))); + serial->add(std::make_unique(PredefinedCosts::constant(INF))); + serial->add(std::make_unique(PredefinedCosts::single(2.0))); + fallbacks->add(std::move(serial)); + fallbacks->add(std::make_unique(PredefinedCosts::constant(4.0))); + + t.add(std::move(fallbacks)); + EXPECT_TRUE(t.plan()); + EXPECT_COSTS(t.solutions(), testing::ElementsAre(4.0)); +}