Skip to content

Remaining refinements: tests, pre-release support, PR label strategy#40

Merged
dexwritescode merged 3 commits into
mainfrom
remaining-refinements
Apr 22, 2026
Merged

Remaining refinements: tests, pre-release support, PR label strategy#40
dexwritescode merged 3 commits into
mainfrom
remaining-refinements

Conversation

@dexwritescode

@dexwritescode dexwritescode commented Apr 22, 2026

Copy link
Copy Markdown
Owner

Summary

Three refinements shipped in one branch, each as its own commit.

#4 — Tests

  • error.rs: derive Clone + PartialEq
  • models.rs: derive Clone on TagName and CreateReleaseRequest
  • github_client.rs: extract GithubApi trait; HTTP status/JSON handling moved from releases.rs into GithubClient's impl
  • releases.rs: Releases<C: GithubApi> — generic over client; 5 tests via MockGithubApi
  • config.rs: 6 tests covering required fields, missing vars, invalid strategy, custom prefix/version, dry-run
  • semver.rs: 7 from_str error cases (empty, malformed, leading zeros, pre-release suffix)

#2 — Pre-release support

  • semver.rs: PreRelease struct; regex updated to parse -id.N; base_version(), with_pre_release(), bump_pre_release(), pre_release_matches(); increment() strips pre-release; get_version() includes suffix; 5 new tests
  • config.rs: prerelease + prerelease_identifier fields
  • releases.rs: CreateReleaseRequest.prerelease wired from config
  • main.rs: pre-release branch — bumps counter when same identifier, otherwise applies strategy to base at .1; NoRelease early-exit skipped when prerelease=true
  • action.yaml: prerelease + prerelease-identifier inputs

#1 — PR label strategy

  • models.rs: Label + PullRequest models
  • github_client.rs: get_pr_for_commit on trait + impl (GET /commits/{sha}/pulls)
  • config.rs: use_label_strategy, label_major/minor/patch/skip fields
  • releases.rs: get_pr_for_commit delegator; 2 new tests
  • main.rs: resolve_label_strategy (major > minor > skip > patch > config fallback); 6 new tests
  • action.yaml: use-label-strategy, label-major/minor/patch/skip inputs

Test plan

  • cargo test — 31 tests, all green

🤖 Generated with Claude Code

dexwritescode and others added 3 commits April 22, 2026 12:57
- error.rs: derive Clone + PartialEq to support test assertions
- models.rs: derive Clone on TagName and CreateReleaseRequest
- github_client.rs: extract GithubApi trait; move HTTP status/JSON
  handling from releases.rs into GithubClient's impl
- releases.rs: make Releases<C: GithubApi> generic; add 5 tests via
  MockGithubApi (request fields, error propagation, None on 404)
- config.rs: add 6 tests covering required fields, missing vars,
  invalid strategy, custom prefix/version, dry-run flag
- semver.rs: add 7 from_str error cases (empty, malformed, leading
  zeros, pre-release suffix)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- semver.rs: add PreRelease struct; update regex to parse -id.N suffix;
  add base_version(), with_pre_release(), bump_pre_release(),
  pre_release_matches(); increment() strips pre-release on all arms;
  get_version() includes pre-release suffix; 5 new tests
- config.rs: add prerelease (bool) and prerelease_identifier (String)
  fields read from INPUT_PRERELEASE / INPUT_PRERELEASE-IDENTIFIER
- releases.rs: pass config.prerelease into CreateReleaseRequest
- main.rs: NoRelease early-exit skipped when prerelease=true; version
  computation branches on prerelease — bumps counter if same identifier,
  otherwise applies strategy to base and starts at .1
- action.yaml: add prerelease and prerelease-identifier inputs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- semver.rs: derive Clone on VersionIncrementStrategy
- models.rs: add Label and PullRequest models
- github_client.rs: add get_pr_for_commit to GithubApi trait;
  implement via GET /repos/{owner}/{repo}/commits/{sha}/pulls
- config.rs: add use_label_strategy, label_major, label_minor,
  label_patch, label_skip fields (all optional with sensible defaults)
- releases.rs: expose get_pr_for_commit; update MockGithubApi with
  pr_response field and with_pr_labels builder; add 2 new tests
- main.rs: add resolve_label_strategy (major > minor > skip > patch >
  fallback); run() fetches PR and resolves strategy when
  use_label_strategy=true; 6 new tests for label resolution
- action.yaml: add use-label-strategy, label-major, label-minor,
  label-patch, label-skip inputs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@dexwritescode dexwritescode merged commit 7febb50 into main Apr 22, 2026
2 checks passed
@dexwritescode dexwritescode deleted the remaining-refinements branch April 22, 2026 17:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant