{"id":50949981,"url":"https://github.com/scottconverse/installer-ci","last_synced_at":"2026-06-18T00:30:55.341Z","repository":{"id":364632307,"uuid":"1268607136","full_name":"scottconverse/installer-ci","owner":"scottconverse","description":"Reusable GitHub Actions workflow: auto-detect \u0026 test installers (13 types) end-to-end with false-pass guards","archived":false,"fork":false,"pushed_at":"2026-06-13T19:33:37.000Z","size":116,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T21:23:48.020Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scottconverse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-13T18:22:34.000Z","updated_at":"2026-06-13T19:33:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/scottconverse/installer-ci","commit_stats":null,"previous_names":["scottconverse/installer-ci"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/scottconverse/installer-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottconverse%2Finstaller-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottconverse%2Finstaller-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottconverse%2Finstaller-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottconverse%2Finstaller-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scottconverse","download_url":"https://codeload.github.com/scottconverse/installer-ci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottconverse%2Finstaller-ci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34471638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-18T00:30:53.857Z","updated_at":"2026-06-18T00:30:55.326Z","avatar_url":"https://github.com/scottconverse.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# installer-ci\n\nCentral, reusable GitHub Actions workflow that **auto-detects how a repo installs software and tests that install end-to-end** — build → install → launch → upgrade-over-previous-release → uninstall — across Linux/macOS/Windows, for **13 installer types**:\n\n`tauri` · `electron` · `pyinstaller` · `python-pip-wheel` · `npm-bin` · `go-binary` · `cargo-binary` · `docker-image` · `shell-installer` · `deb-rpm` · `homebrew-formula` · `dotnet` · `java-jar`\n\nIt is built to **never false-pass**: every leg captures real exit codes, asserts the artifact exists, launches the real installed program (not a wrapper PID), distinguishes \"no prior release\" from \"download failed\", asserts real uninstall removal, and a final **tripwire** fails any matrix leg that skipped its whole lifecycle. Signing/notarization is checked **warn-only** so public CI without signing secrets isn't blocked.\n\n## Use it in a repo\n\nAdd `.github/workflows/installer-test.yml`:\n\n```yaml\nname: installer-test\non:\n  push: { branches: [main] }       # use your default branch\n  pull_request: { branches: [main] }\n  workflow_dispatch:\njobs:\n  installer-test:\n    uses: scottconverse/installer-ci/.github/workflows/installer-test.yml@main\n    permissions: { contents: read, packages: read }\n    secrets: inherit\n```\n\nOr run the onboarding helper: `./bootstrap.sh \u003crepo\u003e` (one repo) / `./bootstrap.sh --all` (every repo). It opens a PR and is idempotent.\n\nRepos with no installer (prompt/skill suites) **no-op green** — detection finds nothing and the test job is skipped.\n\n## Knobs (workflow inputs)\n- `force_types` — CSV to override detection (validated against the known 13; an unknown value hard-fails).\n- `enable_system_scope` — also run system-scope install paths (default on).\n\n## Repo-specific config (Actions Variables)\nSome recipes read optional `vars.*` with sane defaults — e.g. Tauri: `vars.TAURI_PRODUCT_NAME` / `vars.APP_DIR` (default `.`) / `vars.TAURI_DIR` (default `src-tauri`).\n\n## Layout\n- `.github/workflows/installer-test.yml` — the assembled reusable workflow (source of truth)\n- `recipes/*.steps.yaml` — per-type recipe sources the workflow is stitched from\n- `bootstrap.sh` — onboarding helper · `ROLLOUT.md` — rollout plan · `VERIFY-FINDINGS.json` — adversarial-review notes\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscottconverse%2Finstaller-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscottconverse%2Finstaller-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscottconverse%2Finstaller-ci/lists"}