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 with:
persist-credentials: false
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 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 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 with:
persist-credentials: false
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 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 with:
name: install-method-container-${{ github.sha }}
path: ${{ runner.temp }}/install-methods/container
if-no-files-found: error