From 999a2d0e71ddf19b3bade573026b9a6381d40f51 Mon Sep 17 00:00:00 2001 From: phact Date: Mon, 15 Dec 2025 16:35:09 -0500 Subject: [PATCH] docker rc version fix --- .github/workflows/build-multiarch.yml | 35 +++++++++------------------ src/tui/managers/container_manager.py | 4 +-- src/tui/widgets/command_modal.py | 15 +++++++++--- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/.github/workflows/build-multiarch.yml b/.github/workflows/build-multiarch.yml index f9a83400..336f8df9 100644 --- a/.github/workflows/build-multiarch.yml +++ b/.github/workflows/build-multiarch.yml @@ -14,6 +14,7 @@ jobs: outputs: skip_release: ${{ steps.version.outputs.skip_release }} version: ${{ steps.version.outputs.version }} + docker_version: ${{ steps.version.outputs.docker_version }} is_prerelease: ${{ steps.version.outputs.is_prerelease }} steps: - name: Checkout @@ -26,6 +27,12 @@ jobs: echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Version: $VERSION" + # Normalize version per PEP 440 for Docker tags + # e.g., "0.1.53-rc2" -> "0.1.53rc2" to match Python's importlib.metadata + DOCKER_VERSION=$(echo "$VERSION" | sed -E 's/-?(rc|alpha|beta|dev|post)/\1/g') + echo "docker_version=$DOCKER_VERSION" >> $GITHUB_OUTPUT + echo "Docker Version: $DOCKER_VERSION" + # Check if tag already exists if git rev-parse "v$VERSION" >/dev/null 2>&1; then echo "Tag v$VERSION already exists, skipping release" @@ -117,13 +124,6 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Extract version from pyproject.toml - id: version - run: | - VERSION=$(grep '^version = ' pyproject.toml | cut -d '"' -f 2) - echo "version=$VERSION" >> $GITHUB_OUTPUT - echo "Version: $VERSION" - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -141,7 +141,7 @@ jobs: file: ${{ matrix.file }} platforms: ${{ matrix.platform }} push: ${{ github.event_name != 'pull_request' }} - tags: ${{ matrix.tag }}:${{ steps.version.outputs.version }}-${{ matrix.arch }} + tags: ${{ matrix.tag }}:${{ needs.check-version.outputs.docker_version }}-${{ matrix.arch }} cache-from: type=gha,scope=${{ matrix.image }}-${{ matrix.arch }} cache-to: type=gha,mode=max,scope=${{ matrix.image }}-${{ matrix.arch }} @@ -153,12 +153,6 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Extract version from pyproject.toml - id: version - run: | - VERSION=$(grep '^version = ' pyproject.toml | cut -d '"' -f 2) - echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Login to Docker Hub uses: docker/login-action@v3 with: @@ -167,7 +161,7 @@ jobs: - name: Create and push multi-arch manifests run: | - VERSION=${{ steps.version.outputs.version }} + VERSION=${{ needs.check-version.outputs.docker_version }} # Create versioned tags docker buildx imagetools create -t langflowai/openrag-backend:$VERSION \ @@ -224,13 +218,6 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v3 - - name: Extract version from pyproject.toml - id: version - run: | - VERSION=$(grep '^version = ' pyproject.toml | cut -d '"' -f 2) - echo "version=$VERSION" >> $GITHUB_OUTPUT - echo "Version: $VERSION" - - name: Build wheel and source distribution run: | uv build @@ -253,8 +240,8 @@ jobs: - name: Create Release uses: softprops/action-gh-release@v2 with: - tag_name: v${{ steps.version.outputs.version }} - name: Release ${{ steps.version.outputs.version }} + tag_name: v${{ needs.check-version.outputs.version }} + name: Release ${{ needs.check-version.outputs.version }} draft: false prerelease: ${{ needs.check-version.outputs.is_prerelease }} generate_release_notes: true diff --git a/src/tui/managers/container_manager.py b/src/tui/managers/container_manager.py index d1ac00b4..37c7d6cf 100644 --- a/src/tui/managers/container_manager.py +++ b/src/tui/managers/container_manager.py @@ -1040,7 +1040,7 @@ class ContainerManager: up_success = {"value": True} error_messages = [] - async for message, replace_last in self._stream_compose_command(["up", "-d"], up_success, cpu_mode): + async for message, replace_last in self._stream_compose_command(["up", "-d", "--no-build"], up_success, cpu_mode): # Detect error patterns in the output lower_msg = message.lower() @@ -1115,7 +1115,7 @@ class ContainerManager: # Restart with new images using streaming output restart_success = True async for message, replace_last in self._run_compose_command_streaming( - ["up", "-d", "--force-recreate"], cpu_mode + ["up", "-d", "--force-recreate", "--no-build"], cpu_mode ): yield False, message, replace_last # Check for error patterns in the output diff --git a/src/tui/widgets/command_modal.py b/src/tui/widgets/command_modal.py index a75a46ee..39be7037 100644 --- a/src/tui/widgets/command_modal.py +++ b/src/tui/widgets/command_modal.py @@ -315,15 +315,22 @@ class CommandOutputModal(ModalScreen): asyncio.create_task(callback_result) self.call_after_refresh(_invoke_callback) + except asyncio.CancelledError: + # Modal was dismissed while command was running - this is fine + pass except Exception as e: self._update_output(f"Error: {e}", False) output.text = "\n".join(self._output_lines) output.move_cursor((len(self._output_lines), 0)) finally: - # Enable the close button and focus it - close_btn = self.query_one("#close-btn", Button) - close_btn.disabled = False - close_btn.focus() + # Enable the close button and focus it (if modal still exists) + try: + close_btn = self.query_one("#close-btn", Button) + close_btn.disabled = False + close_btn.focus() + except Exception: + # Modal was already dismissed + pass def _update_output(self, message: str, replace_last: bool = False) -> None: """Update the output buffer by appending or replacing the last line.