tambo 0.13.4

Install and prove the whole AI knowledge-tool kit
Documentation
name: Quipu install method qualification

on:
  workflow_dispatch:
    inputs:
      method:
        description: Qualify only the selected method; keep earlier successful method receipts
        type: choice
        options: [all, brew, apt, container]
        default: all
      trust_brew_formula:
        description: Explicitly trust only scbrown/tap/quipu on the disposable macOS runner (removed afterward)
        type: boolean
        default: false
      container:
        description: Qualify the published container as well as Homebrew and apt
        type: boolean
        default: true
      image:
        description: Versioned or digest-pinned Quipu image (registry pin is independent of native releases)
        type: string
        default: ghcr.io/intigraph/quipu:0.8.1

permissions:
  contents: read

concurrency:
  group: install-method-qualification-${{ github.ref }}
  cancel-in-progress: false

jobs:
  packages:
    name: Clean ${{ matrix.method }} lifecycle
    if: inputs.method != 'container'
    strategy:
      fail-fast: false
      matrix:
        method: ${{ fromJSON(inputs.method == 'brew' && '["brew"]' || inputs.method == 'apt' && '["apt"]' || '["brew", "apt"]') }}
    runs-on: ${{ matrix.method == 'brew' && 'macos-15' || 'ubuntu-latest' }}
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
        with:
          persist-credentials: false
      - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
        with:
          python-version: "3.12"
      - name: Exercise the package-owned install, verification, upgrade and removal
        env:
          METHOD: ${{ matrix.method }}
          TRUST_BREW_FORMULA: ${{ inputs.trust_brew_formula }}
          INSTALL_METHOD_RUNNER: ${{ runner.environment }}
        run: |
          args=()
          if [[ "$METHOD" == brew && "$TRUST_BREW_FORMULA" == true ]]; then
            args+=(--trust-brew-formula)
          fi
          python3 scripts/qualify-install-method.py "$METHOD" --output "$RUNNER_TEMP/install-methods/$METHOD" "${args[@]}"
      - name: Retain the exact checkout and per-command method receipt
        if: always()
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
        with:
          name: install-method-${{ matrix.method }}-${{ github.sha }}
          path: ${{ runner.temp }}/install-methods/${{ matrix.method }}
          if-no-files-found: error

  container:
    name: Clean container lifecycle
    if: inputs.container && (inputs.method == 'all' || inputs.method == 'container')
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
        with:
          persist-credentials: false
      - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
        with:
          python-version: "3.12"
      - name: Pull, verify MCP, recreate, back up and remove only owned resources
        env:
          QUIPU_IMAGE: ${{ inputs.image }}
          INSTALL_METHOD_RUNNER: ${{ runner.environment }}
        run: python3 scripts/qualify-install-method.py container --image "$QUIPU_IMAGE" --output "$RUNNER_TEMP/install-methods/container"
      - name: Retain the exact image digest and per-command method receipt
        if: always()
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
        with:
          name: install-method-container-${{ github.sha }}
          path: ${{ runner.temp }}/install-methods/container
          if-no-files-found: error