Skip to content

chore: modernise E2E test suite and action workflows for 0.2.0 milestone #101

@Kavirubc

Description

@Kavirubc

Context

The E2E integration test (tests/integration/e2e_test.go) and the GitHub Actions workflows were last substantially updated before the 0.2.0 milestone features shipped. They do not cover or correctly reflect several things added since then. This issue tracks everything that needs catching up.


1. tests/integration/e2e_test.go

Missing coverage

  • PR indexing — no test exercises simili index --include-prs or verifies that qdrant.pr_collection is correctly populated when set.
  • pr-duplicate CLI — no test invokes simili pr-duplicate end-to-end; the mergeSearchResults helper and the LLM verdict path are only covered by command-level unit tests, not an integration run.
  • Hybrid duplicate / related issues — no assertion checks that ctx.Metadata["related_issues"] is populated after DuplicateDetector.Run, nor that buildDuplicateSection produces a [!NOTE] block when related issues exist but no duplicate is detected (added in PR feat(duplicate): hybrid reasoning step — typed related issues, configurable top-N, confidence fix (closes #56) #100 / issue Enhancement: Hybrid Reasoning Step for Similarity Confirmation #56).
  • DuplicateCandidates config wiringTestEndToEndPipeline constructs a config.Config directly and never calls applyDefaults(), so Transfer.DuplicateConfidenceThreshold is always 0 in this test path (the fallback in the step handles it, but it means the config default is untested end-to-end).

Dead code

  • MockStep struct is defined but never used. Either write a test that exercises it or remove it.

2. .github/workflows/e2e-test.yml

Go version drift

  • Steps that set up Go pin go-version: '1.23'. The module's go.mod requires Go 1.24. This means CI builds on a different toolchain than local dev. All go-version fields should be updated to '1.24' or switched to go-version-file: go.mod to auto-track the module.

Seeded E2E config is stale

The .github/simili.yaml written inside the test repo (step 2) and the inline index-cfg.yaml (step 5) are missing fields added in recent milestones:

The embedded triage workflow template (step 7) does not pass QDRANT_PR_COLLECTION as an env var, so PR-collection features are untested end-to-end.

Missing E2E scenarios

  • PR duplicate detection — no step creates a test PR, runs simili pr-duplicate, and asserts the output JSON structure.
  • --include-prs indexing — no step runs simili index --include-prs and verifies the PR collection is populated in Qdrant.
  • Related-but-not-duplicate detection — the Verify similarity detection step only greps for similar|duplicate|related|#1. It should also verify that when related issues exist but no high-confidence duplicate is found, a [!NOTE] block (not [!WARNING]) appears in the comment.
  • Qdrant PR collection cleanup — step 12 only deletes the issues collection (TEST_COLLECTION). Any PR collection created during the run (simili-e2e-prs-${{ github.run_id }} or similar) is never deleted.

3. .github/workflows/ci.yml

  • go-version: '1.23' across all three jobs (build, lint, vet) → should be '1.24' or go-version-file: go.mod.
  • golangci/golangci-lint-action@v4 → latest stable is v6; v4 no longer receives updates.
  • codecov/codecov-action@v4 → latest is v5.

4. .github/workflows/auto-close.yml

  • go-version: '1.23' → same drift as above.
  • Builds the CLI from source (go build -o simili-cli) rather than using the Docker action (uses: ./) like triage.yml. This means the auto-close workflow tests a freshly compiled binary but bypasses the Docker entrypoint entirely — entrypoint-level bugs would not be caught here.

5. .github/workflows/triage.yml

  • The bot_users config field (BotUsers []string) allows arbitrary bot usernames to be suppressed via YAML config, but the workflow's if: guard hard-codes only gh-simili-bot and github-actions[bot]. Custom bot_users entries set in simili.yaml have no effect at the workflow trigger level. Worth either documenting this limitation clearly or finding a way to surface it.
  • The pull_request trigger runs the generic process command. Now that pr-duplicate exists as a dedicated CLI command for PR duplicate detection, it is worth evaluating whether the PR triage path should route to pr-duplicate instead of (or alongside) process.

Suggested order of work

  1. Fix Go version drift across all four workflow files — use go-version-file: go.mod.
  2. Bump golangci-lint-action → v6 and codecov-action → v5 in ci.yml.
  3. Update the seeded E2E configs to include duplicate_candidates and qdrant.pr_collection.
  4. Add PR collection to the Qdrant cleanup step.
  5. Remove or use the dead MockStep in e2e_test.go.
  6. Add a PR-indexing + pr-duplicate E2E scenario (can be a new job or additional steps).
  7. Tighten the Verify similarity detection assertion to cover the [!NOTE] related-issues block.

Raised during review of PR #100 (issue #56 hybrid reasoning step).

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Todo

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions