feat(search): add graceful degradation with fallback for ha_search_entities #44
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Release Binaries | |
| on: | |
| release: | |
| types: [published] | |
| pull_request: | |
| branches: [master] | |
| paths: | |
| - 'src/**' | |
| - 'packaging/binary/**' | |
| - 'packaging/mcpb/**' | |
| - '.github/workflows/build-binary.yml' | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version to build (e.g., 4.7.4)' | |
| required: true | |
| default: '0.0.0-dev' | |
| # Restrict permissions by default (security best practice) | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| permissions: | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| artifact_name: ha-mcp-linux | |
| binary_ext: '' | |
| platform: linux | |
| - os: windows-latest | |
| artifact_name: ha-mcp-windows | |
| binary_ext: '.exe' | |
| platform: win32 | |
| - os: macos-latest | |
| artifact_name: ha-mcp-macos-arm64 | |
| binary_ext: '' | |
| platform: darwin | |
| runs-on: ${{ matrix.os }} | |
| name: Build on ${{ matrix.os }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| version: "latest" | |
| - name: Create virtual environment and install dependencies | |
| run: | | |
| uv venv .venv | |
| uv pip install -e . pyinstaller | |
| shell: bash | |
| - name: Activate venv (Unix) | |
| if: runner.os != 'Windows' | |
| run: echo "$PWD/.venv/bin" >> $GITHUB_PATH | |
| - name: Activate venv (Windows) | |
| if: runner.os == 'Windows' | |
| run: echo "$PWD/.venv/Scripts" >> $env:GITHUB_PATH | |
| shell: pwsh | |
| - name: Build binary | |
| run: pyinstaller packaging/binary/ha-mcp.spec | |
| - name: Run smoke test (Unix) | |
| if: runner.os != 'Windows' | |
| run: | | |
| chmod +x dist/ha-mcp | |
| # Run the built-in smoke test to verify all libraries are bundled | |
| ./dist/ha-mcp --smoke-test | |
| - name: Run smoke test (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| # Run the built-in smoke test to verify all libraries are bundled | |
| & "dist\ha-mcp.exe" --smoke-test | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Host "Smoke test failed with exit code $LASTEXITCODE" | |
| exit $LASTEXITCODE | |
| } | |
| - name: Rename binary for artifact | |
| shell: bash | |
| run: | | |
| mv dist/ha-mcp${{ matrix.binary_ext }} dist/${{ matrix.artifact_name }}${{ matrix.binary_ext }} | |
| - name: Upload binary artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.artifact_name }} | |
| path: dist/${{ matrix.artifact_name }}${{ matrix.binary_ext }} | |
| if-no-files-found: error | |
| create-mcpb: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - name: Download Windows binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ha-mcp-windows | |
| path: mcpb-bundle | |
| - name: Download macOS binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ha-mcp-macos-arm64 | |
| path: mcpb-bundle | |
| - name: Set version | |
| id: version | |
| run: | | |
| if [ "${{ github.event_name }}" = "release" ]; then | |
| VERSION="${{ github.event.release.tag_name }}" | |
| VERSION="${VERSION#v}" | |
| else | |
| VERSION="${{ github.event.inputs.version }}" | |
| VERSION="${VERSION:-0.0.0-dev}" | |
| fi | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Create combined mcpb bundle | |
| run: | | |
| VERSION="${{ steps.version.outputs.version }}" | |
| # Rename binaries to standard names | |
| mv mcpb-bundle/ha-mcp-windows.exe mcpb-bundle/ha-mcp.exe | |
| mv mcpb-bundle/ha-mcp-macos-arm64 mcpb-bundle/ha-mcp | |
| # Copy icons to bundle (light + dark variants + main icon) | |
| cp packaging/mcpb/icon-16.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-32.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-64.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-128.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-256.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-512.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-dark-16.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-dark-32.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-dark-64.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-dark-128.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-dark-256.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-dark-512.png mcpb-bundle/ | |
| cp packaging/mcpb/icon-512.png mcpb-bundle/icon.png | |
| # Generate manifest.json (multi-platform) | |
| python packaging/mcpb/generate_manifest.py "$VERSION" | |
| # Create .mcpb file (zip archive) | |
| cd mcpb-bundle | |
| zip -r ../ha-mcp.mcpb * | |
| cd .. | |
| # List contents for verification | |
| echo "=== MCPB Contents ===" | |
| unzip -l ha-mcp.mcpb | |
| - name: Upload mcpb artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ha-mcp-mcpb | |
| path: ha-mcp.mcpb | |
| if-no-files-found: error | |
| release: | |
| needs: [build, create-mcpb] | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'release' | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: List artifacts | |
| run: find artifacts -type f | |
| - name: Upload binaries to release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: | | |
| artifacts/ha-mcp-linux/ha-mcp-linux | |
| artifacts/ha-mcp-windows/ha-mcp-windows.exe | |
| artifacts/ha-mcp-macos-arm64/ha-mcp-macos-arm64 | |
| artifacts/ha-mcp-mcpb/ha-mcp.mcpb |